expdp报错,UDE-00014: invalid value for parameter, 'exclude'.

由于数据迁移需求,需要将某个用户下除了指定的200张表之外的所有对象和数据全部导出。于是使用expdp工具,指定了exclude参数,排除指定的200张表。

expdp_ad.par文件中关于exclude的部分如下所示:
EXCLUDE=TABLE:"IN ('CA_STAT_DAILY_DTL_PAY_201610',
'CA_STAT_DAILY_DTL_PAY_201612',
'CA_STAT_DAILY_DTL_PAY_201701',
'CA_STAT_DAILY_DTL_PAY_201608',
'CA_STAT_DAILY_DTL_PAY_201609',
'CA_STAT_DAILY_DTL_PAY_201611',
......
)"

执行expdp导出时报错,信息如下所示:

oracle ->@zwdb1:/backup/dmp$tail -f nohup.out
Export: Release 12.1.0.2.0 - Production on Wed Aug 19 16:24:37 2020

Copyright (c) 1982, 2014, Oracle and/or its affiliates. All rights reserved.

Connected to: Oracle Database 12c Enterprise Edition Release 12.1.0.2.0 - 64bit Production
With the Partitioning, Real Application Clusters, Automatic Storage Management, OLAP,
Advanced Analytics and Real Application Testing options
UDE-00014: invalid value for parameter, 'exclude'.

[1] + Done(1) nohup expdp userid=\'/ as sysdba\' parfile=expdp_ad.par &

可以看出,问题在于exclude参数指定的参数值无效。

开始怀疑是exclude参数中指定的表名不能独占一行,需要添加换行符,于是修改expdp_ad.par文件,在exclude参数中指定的表名后都添加换行符。如下所示:

EXCLUDE=TABLE:"IN ('CA_STAT_DAILY_DTL_PAY_201610', \
'CA_STAT_DAILY_DTL_PAY_201612', \
'CA_STAT_DAILY_DTL_PAY_201701', \
'CA_STAT_DAILY_DTL_PAY_201608', \ 
'CA_STAT_DAILY_DTL_PAY_201609', \
'CA_STAT_DAILY_DTL_PAY_201611',  \
......
)"

结果仍然提示UDE-00014: invalid value for parameter, 'exclude'., 怀疑换行符不起作用,干脆直接把所有表名都放在一行中。 如下所示:

EXCLUDE=TABLE:"IN ('CA_STAT_DAILY_DTL_PAY_201610', 'CA_STAT_DAILY_DTL_PAY_201612', 'CA_STAT_DAILY_DTL_PAY_201701', 'CA_STAT_DAILY_DTL_PAY_201608', ......)"

 

但是,仍然提示UDE-00014: invalid value for parameter, 'exclude'.,于是再做了一次尝试,将指定的表名只包括三张表,如下所示:

EXCLUDE=TABLE:"IN ('CA_STAT_DAILY_DTL_PAY_201610','CA_STAT_DAILY_DTL_PAY_201612','CA_NOTIFY_TASK_0930_2_202003')"

 

再次测试,可以成功导出数据。 通过这一系列的测试可以说明,EXCLUDE=TABLE:"IN ('参数中的值太多时,就会出现问题。根据这一现象,搜索到文章:UDE-00014 invalid value for parameter, 'tables'. (Doc ID 758848.1)。

这篇文章的大概意思是,当tables参数中的参数值太大,超过3400字节时,就可能会出现无效的参数值。

 

那么,当前遇到的这个问题,该如何处理呢? 最后想了一个土办法,就是每一张表使用一个exclude=table:in的方式,如下所示:

EXCLUDE=TABLE:"IN ('CA_STAT_DAILY_DTL_PAY_201610')"
EXCLUDE=TABLE:"IN ('CA_STAT_DAILY_DTL_PAY_201612')"
EXCLUDE=TABLE:"IN ('CA_STAT_DAILY_DTL_PAY_201701')"
EXCLUDE=TABLE:"IN ('CA_STAT_DAILY_DTL_PAY_201608')"

......

 

posted @ 2020-08-23 13:15  石云华  阅读(3407)  评论(0编辑  收藏  举报