使用expdp导出大量表

时间:2017-07-26 10:30:09

标签: oracle database-administration oracle11gr2 expdp

我的环境有超过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个表,但失败并出现相同的错误。

此致

Sujit

3 个答案:

答案 0 :(得分:0)

documentation描述了sudo apt-get install oracle-java7-installer 参数的name_clause

  

是一个SQL表达式,用作对象名称的过滤器......

这意味着通过使用IN列表,您将受限于列表中1000 elements的一般限制。

即使是最差this link也表明INCLUDE的长度限制为4000个字符。超过它,你得到name_clause

但是解决方法很简单(如上面的链接所示)

1)使用参数文件 - 参见参数UDE-00014 invalid value for parameter INCLUDE - 以避免可能的转义问题

2)将(未引用的)表名放在辅助表中并使用以下参数

PARFILE

答案 1 :(得分:0)

找到解决方案:

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)"   

感谢。

答案 2 :(得分:0)

您可以使用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)

(添加您需要的所有表格)。

如果目前不存在,则需要预先创建黄金模式。如果您希望使用exclude = table跳过所有表,则可以使用模式模式导入来执行此操作。