如何从Oracle DataPump导出中排除某些表



我的Oracle数据库中有大量的用户模式。我希望导出这些模式的表数据,但排除了以下第二个字符命名的表。

例如,我希望导出表TPI_SUMMARYDFXRRTRTAFF,但排除C_NAMESG_BEARS等。基本上只想将其作为第二个字符

排除任何内容

我正在使用Oracle Data Pump:

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查询是错误的。DIRECTORYDUMPFILELOGFILE都可以。

我得到以下内容:

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,而不是INCLUDE

ORA-39071: Value for EXCLUDE is badly formed

...,确实是错误的。您正在尝试使用具有多个值的平等;您只需要再次使用IN()

EXCLUDE=SCHEMA:"IN('SYS','SYSTEM','SYSMAN','DBSNMP','OUTLN','APPQOSSYS')"

,但正如文档中所述:

EXCLUDEINCLUDE参数是互斥的。

不过,您可以使用两个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')"

但是like与您预期的不匹配;您需要添加一个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) = '_')"

您也可以,如果您有一个模式列表 do 想要,请使用两个INCLUDE子句 - 这可能更简单,而不是列出所有内置模式,它们可能会变化。/p>

相关内容

  • 没有找到相关文章

最新更新