我的环境有4000多个表。我只想导出2000个表。我尝试通过Include子句来使用par文件。但出口正在失败。细节如下所述
工具: EXPDP | Oracle数据库版本:11g R2 |导出表数: 2000
使用的代码:
directory=pump
dumpfile=EXP_FULL_GOLD.dmp
logfile=EXP_FULL_GOLD.log
COMPRESSION=ALL
schemas=GOLD
include=TABLE:"IN('T1','T2','T3','T4'..'T2000')错误:使用分区、OLAP、数据挖掘和实时应用程序测试选项ORA-39001:无效的参数值ORA-39071: INCLUDE的值格式不正确。ORA-00920:关系运算符无效
甚至我也尝试过下面的代码:
directory=pump
dumpfile=EXP_FULL_GOLD.dmp
logfile=EXP_FULL_GOLD.log
COMPRESSION=ALL
schemas=Gold
content=DATA_ONLY
INCLUDE=TABLE:\"IN \(SELECT tname FROM Gold.t11\)\"这里,T11包含存储在列tname (2000条记录)中的表的列表。
但同样的错误也会发生。请帮忙,因为我在网上搜索了很多,但我不能找到任何解决方案。即使对于Include子句,允许的表数限制在任何地方也不可用。尝试使用900个表,但由于相同的错误而失败。
致以敬意,
苏吉特
发布于 2017-07-26 19:23:39
documentation描述了INCLUDE参数的name_clause
是一个SQL表达式,用作对象名称的过滤器...
这意味着通过使用IN列表,您将受到列表中1000 elements的一般限制的约束。
即使是最糟糕的this link也表明name_clause的长度有4000个字符的限制。超过它,你会得到UDE-00014 invalid value for parameter INCLUDE
但是解决方法很简单(正如上面的链接所建议的)
1)使用参数文件-请参阅参数PARFILE -以避免可能的转义问题
2)将(不带引号的)表名放在helper表中,并使用以下参数
INCLUDE=TABLE:"IN (select table_name from TAB_LIST)"发布于 2017-07-26 20:29:25
找到解决方案:
SCHEMAS=GOLD
DIRECTORY=DEBUG
COMPRESSION=ALL
CONTENT=DATA_ONLY
DUMPFILE=EXP_GOLD_26Jul2017.dmp
LOGFILE=EXP_GOLD_26Jul2017.log
INCLUDE=TABLE:"IN(SELECT TNAME FROM GOLD.T11)" 谢谢。
发布于 2017-12-12 00:07:52
您可以使用parfile从完全导出中仅导入所需的表,该parfile包含使用表模式导入所需的表的列表:-
directory=pump
dumpfile=EXP_FULL_GOLD.dmp
logfile=EXP_FULL_GOLD.log
transform=storage:n
exclude=statistics
tables=(
gold.t1,
gold.t2,
gold.t3,
gold.t4,
gold.t2000)(添加所需的所有表)。
如果gold模式当前不存在,则需要预先创建它。如果您希望使用exclude=table跳过所有表,则可以使用模式模式导入来执行此操作。
https://stackoverflow.com/questions/45324367
复制相似问题