2017-05-04 110 views
0

我的Oracle數據庫中有大量的用戶模式。我希望爲這些模式導出表數據,但排除以第二個字符命名的任何表爲下劃線。如何從Oracle數據集中排除某些表導出

比如我想導出表TPI_SUMMARYDFXRRTRTAFF但不包括C_NAMESG_BEARS等,基本上只是想用下劃線作爲第二個字符

我使用Oracle數據泵排除任何東西:

expdp system/[email protected] 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查詢是錯誤的。 DIRECTORY,DUMPFILELOGFILE都可以。

我得到如下:

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 

任何想法?我真的很努力讓這個工作。

回答

2

錯誤是指EXCLUDE,不INCLUDE

ORA-39071: Value for EXCLUDE is badly formed 

...它確實是這是不對的。你正在嘗試使用多值的相等性;你只需要再次使用IN()

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

as it says in the documentation

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) = '_')" 

你也可以,有一個模式列表想要使用兩個INCLUDE子句 - 這可能會更簡單,列出所有內置模式,這可能會有所不同。

+0

非常感謝,這已經按要求工作了 – sasquartch

相關問題