如何从Oracle数据泵导出中排除某些表
我的Oracle数据库中有大量用户模式。我希望导出这些模式的表数据,但不包括使用第二个字符下划线命名的任何表 例如,我希望导出表如何从Oracle数据泵导出中排除某些表,oracle,oracle11g,datapump,expdp,Oracle,Oracle11g,Datapump,Expdp,我的Oracle数据库中有大量用户模式。我希望导出这些模式的表数据,但不包括使用第二个字符下划线命名的任何表 例如,我希望导出表TPI_SUMMARY,DFXRRT和RTAFF,但排除C_名称,G_熊等。基本上,我只想排除以下划线作为第二个字符的任何内容 我正在使用Oracle数据泵: expdp system/xxxxx@string parfile=parfile.par parfile包含: INCLUDE=TABLE:"IN(select table_name from dba_tab
TPI_SUMMARY
,DFXRRT
和RTAFF
,但排除C_名称
,G_熊
等。基本上,我只想排除以下划线作为第二个字符的任何内容
我正在使用Oracle数据泵:
expdp system/xxxxx@string parfile=parfile.par
parfile
包含:
INCLUDE=TABLE:"IN(select table_name from dba_tables where table_name not like '_\_%')"
EXCLUDE=SCHEMA:"='SYS','SYSTEM','SYSMAN','DBSNMP','OUTLN','APPQOSSYS'"
DIRECTORY=paul_test
DUMPFILE=infrep_temp1.dmp
FULL=Y
LOGFILE=Daily_Backup_infrep_temp1.log
我就是不能让它工作。我认为EXCLUDE
位是可以的,但是INCLUDE
查询是错误的。目录
、转储文件
和日志文件
都正常
我得到以下信息:
Export: Release 11.2.0.4.0 - Production on Thu May 4 16:41:48 2017
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
Connected to: Oracle Database 11g Release 11.2.0.4.0 - 64bit Production
ORA-39001: invalid argument value
ORA-39071: Value for EXCLUDE is badly formed.
ORA-00933: SQL command not properly ended
有什么想法吗?我真的很难让它工作。错误指的是
排除
,而不是包括
:
EXCLUDE=TABLE:"NOT IN(select table_name from dba_tables where table_name not like '_\_%')"
EXCLUDE=SCHEMA:"IN('SYS','SYSTEM','SYSMAN','DBSNMP','OUTLN','APPQOSSYS')"
。。。这确实是错误的。您试图使用具有多个值的相等;您只需再次在()中使用
:
EXCLUDE=SCHEMA:"IN('SYS','SYSTEM','SYSMAN','DBSNMP','OUTLN','APPQOSSYS')"
但是:
EXCLUDE
和INCLUDE
参数是互斥的
但是,您可以使用两个EXCLUDE
子句,因此可以否定第一个INCLUDE
:
EXCLUDE=TABLE:"NOT IN(select table_name from dba_tables where table_name not like '_\_%')"
EXCLUDE=SCHEMA:"IN('SYS','SYSTEM','SYSMAN','DBSNMP','OUTLN','APPQOSSYS')"
或者现在是双重否定:
EXCLUDE=TABLE:"IN(select table_name from dba_tables where table_name like '_\_%')"
EXCLUDE=SCHEMA:"IN('SYS','SYSTEM','SYSMAN','DBSNMP','OUTLN','APPQOSSYS')"
但是像这样的并不像你期望的那样匹配;您需要添加一个escape
子句,在此上下文中,您需要通过将反斜杠加倍来对其进行转义:
EXCLUDE=TABLE:"IN(select table_name from dba_tables where table_name like '_\_%' escape '\\')"
或者您可以使用substr()
:
EXCLUDE=TABLE:"IN(select table_name from dba_tables where substr(table_name, 2, 1) = '_')"
如果您有自己想要的模式列表,也可以使用两个INCLUDE
子句,这可能比列出所有内置模式更简单,因为它们可能会有所不同