使用expdp导出大量表

问题描述 投票:0回答:3

我的环境有 4000 多张桌子。我只想导出 2000 个表。 我尝试使用包含子句来使用 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 包含存储在 Column tname 中的表列表(2000 条记录)。

但是出现同样的错误。 请帮助,因为我在网上搜索了很多,但找不到任何解决方案。 即使对于 Include 子句允许的表数限制也无法在任何地方使用。尝试使用 900 个表,但失败并出现相同的错误。

问候,

苏吉特

oracle oracle11gr2 expdp oracle-dump
3个回答
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)"   

谢谢。


0
投票

文档描述了

name_clause
参数的
INCLUDE

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

这意味着通过使用 IN 列表,您将受到列表中1000 个元素的一般限制。

最糟糕的是此链接表明

name_clause
的长度有4000个字符的限制。超过它你会得到
UDE-00014 invalid value for parameter INCLUDE

但是解决方法很简单(如上面链接中建议的那样)

1) 使用参数文件 - 请参阅参数

PARFILE
- 避免可能出现的转义问题

2)将(不带引号的)表名放入辅助表中并使用以下参数

 INCLUDE=TABLE:"IN (select table_name from TAB_LIST)"

0
投票

您可以使用包含您想要使用表模式导入的表列表的配置文件从完全导出中仅导入所需的表:-

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)

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

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

© www.soinside.com 2019 - 2024. All rights reserved.