本文對Oracle數據庫11g R1中數據泵增強做一個簡單的概述,包括以下內容:
◆ 壓縮(COMPRESSION)
◆ 加密參數
a. 加密和加密密碼(ENCRYPTION and ENCRYPTION_PASSWord)
b. 加密算法(ENCRYPTION_ALGORITHM)
c. 加密模式(ENCRYPTION_MODE)
◆ 可傳輸性(TRANSPORTABLE)
◆ 分區選項(PARTITION_OPTIONS)
◆ 重用轉儲文件(REUSE_DUMPFILES)
◆ 表重新映射(REMAP_TABLE)
◆ 數據選項(DATA_OPTIONS)
a. 跳過約束錯誤(SKIP_CONSTRAINT_ERRORS)
b. XML CLOB
◆ 重新映射數據(REMAP_DATA)
◆ 其它增強
壓縮
COMPRESSION參數允許你確定在導出時對什麼進行壓縮,語法如下:
COMPRESSION={ALL | DATA_ONLY | METADATA_ONLY | NONE}
可用的選項有:
◆ ALL 元數據和數據都被壓縮
◆ DATA_ONLY 只壓縮數據
◆ METADATA_ONLY 只壓縮元數據
◆ NONE 不壓縮
下面是一個使用COMPRESSION參數的示例:
expdp test/test schemas=TEST directory=TEST_DIR dumpfile=TEST.dmp
logfile=expdpTEST.log compression=all
如果要使用這些選項,初始化參數COMPATIBLE應該設置為11.0.0或更高,但METADATA_ONLY選項可以用於10.2。
加密參數
數據泵加密是企業版的特性,因此下面描述的內容都只與企業版有關,此外,初始化參數COMPATIBLE應該設置為11.0.0或更高。
1. ENCRYPTION 和 ENCRYPTION_PASSWord
加密的使用是由ENCRYPTION 和 ENCRYPTION_PASSWord參數控制的,ENCRYPTION參數的語法如下:
ENCRYPTION = {ALL | DATA_ONLY | ENCRYPTED_COLUMNS_ONLY | METADATA_ONLY | NONE}
可用的選項有:
◆ ALL 元數據和數據都加密
◆ DATA_ONLY 只加密數據
◆ ENCRYPTED_COLUMNS_ONLY 只加密寫入到轉儲文件中的列
◆ METADATA_ONLY 只加密元數據
◆ NONE 不加密
如果既沒有設置ENCRYPTION參數也沒有設置ENCRYPTION_PASSWORD參數,可能需要的加密級別是NONE,如果只設置了ENCRYPTION_PASSWord參數,可能需要的參數應該是ALL,下面是一個使用這些參數的示例:
expdp test/test schemas=TEST directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log
encryption=all encryption_password=passWord
2. ENCRYPTION_ALGORITHM
ENCRYPTION_ALGORITHM參數指定了在導出時使用的加密算法,默認使用的是“AES128”,語法如下:
ENCRYPTION_ALGORITHM = { AES128 | AES192 | AES256 }
ENCRYPTION_ALGORITHM參數必須和ENCRYPTION 或 ENCRYPTION_PASSWord參數聯合使用,如:
expdp test/test schemas=TEST directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log
encryption=all encryption_password=passWord encryption_algorithm=AES256
3. ENCRYPTION_MODE
ENCRYPTION_MODE參數指出了在導出或導入過程中使用的安全類型,語法如下:
ENCRYPTION_MODE = { DUAL | PASSWord | TRANSPARENT }
有效值和它們的默認設置解釋如下:
◆ DUAL 這個模式下導出的轉儲文件可以使用Oracle加密錢夾導入,或者在導出時使用了ENCRYPTION_PASSWORD參數,如果設置了ENCRYPTION_PASSWord參數並且有一個打開的錢夾,這是默認設置。
◆ PASSWORD 這個模式導出的文件只能在導出時使用了ENCRYPTION_PASSWORD參數才能導入。如果設置了ENCRYPTION_PASSWord參數但沒有一個打開的錢夾,這是默認設置。
◆ TRANSPARENT 這個模式使用Oracle加密錢夾創建的加密轉儲文件,如果在這個模式下指定了ENCRYPTION_PASSWord參數並產生了錯誤,如果只設置了ENCRYPTION參數這是默認設置。
關於錢夾的設置請參考http://www.Oracle-base.com/articles/11g/TablespaceEncryption_11gR1.PHP#wallet_creation。
ENCRYPTION_MODE參數需要指定ENCRYPTION 或 ENCRYPTION_PASSWord參數。
expdp test/test schemas=TEST directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log
encryption=all encryption_password=password encryption_mode=passWord
TRANSPORTABLE
TRANSPORTABLE參數和TRANSPORT_TABLESPACES參數類似,但TRANSPORT_TABLESPACES只能導出/導入表的元數據,需要你手動傳輸相關表空間數據文件,導出操作列出了必須被傳輸的表空間,語法如下:
TRANSPORTABLE = {ALWAYS | NEVER}
值ALWAYS開啟了可傳輸模式,默認值是NEVER,表示是一個正常的導入/導出。
使用TRANSPORTABLE參數導出時有下面的約束:
◆ 這個參數只在導出表一級時可用。
◆ 執行這個操作的用戶必須有EXP_FULL_DATABASE權限。
◆ 表空間包括的源對象必須是只讀的。
◆ COMPATIBLE初始化參數必須設置為11.0.0或更高。
◆ 用戶執行導出的默認表空間和要傳輸的表空間不能是同一個。
在導入時也有一些限制:
◆ 在導入過程中必須指定NETWORK_LINK參數,這個參數校驗數據庫連接到源方案的有效性。
◆ 執行導入操作的方案必須有EXP_FULL_DATABASE 和 IMP_FULL_DATABASE權限。
◆ TRANSPORT_DATAFILES參數用於識別容納表數據的數據文件。
下面是導入/導出操作的示例:
expdp system tables=TEST1.TAB1 directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log
transportable=ALWAYS
impdp system tables=TEST1.TAB1 directory=TEST_DIR dumpfile=TEST.dmp logfile=impdpTEST.log
transportable=ALWAYS network_link=DB11G transport_datafiles='/u01/oradata/DB11G/test01.dbf'
PARTITION_OPTIONS
PARTITION_OPTIONS參數指定在導出和導入操作過程中分區表該如何處理,語法如下:
PARTITION_OPTIONS={none | departition | merge}
可用的值包括:
◆ NONE 象在系統上的分區表一樣創建。
◆ DEPARTITION 每個分區表和子分區表作為一個獨立的表創建,名字使用表和分區(子分區)名字的組合。
◆ MERGE 將所有分區合並到一個表。
如果導出時使用了TRANSPORTABLE參數,這裡就不能使用NONE和MERGE。
expdp test/test directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log tables=test.tab1
partition_options=merge
REUSE_DUMPFILES
如果在導出時轉儲文件已經存在,使用REUSE_DUMPFILES參數可以預防錯誤發生。
REUSE_DUMPFILES={Y | N}
設置為“Y”時,現在的轉儲文件將被覆蓋,當使用默認值“N”時,如果轉儲文件已經存在就會產生一個錯誤。
expdp test/test schemas=TEST directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log
reuse_dumpfiles=y
REMAP_TABLE
這個參數允許在導入過程中使用TRANSPORTABLE方法時對表進行重命名,在使用PARTITION_OPTIONS導入時也可以使用這個參數修改基礎表名,語法如下:
REMAP_TABLE=[schema.]old_tablename[.partition]:new_tablename
下面是一個示例:
impdp test/test tables=TAB1 directory=TEST_DIR dumpfile=TEST.dmp logfile=impdpTEST.log
remap_table=TEST.TAB1:TAB2
現有表沒有被重命名,只創建了表。
DATA_OPTIONS
1. SKIP_CONSTRAINT_ERRORS
在導入過程中使用外部表訪問方法時,設置DATA_OPTIONS參數的值為SKIP_CONSTRAINT_ERRORS允許發生非延遲約束錯誤時繼續載入,如果沒有這個選項,默認將回滾整個操作,語法如下:
DATA_OPTIONS=SKIP_CONSTRAINT_ERRORS
示例如下:
impdp test/test tables=TAB1 directory=TEST_DIR dumpfile=TEST.dmp logfile=impdpTEST.log
data_options=SKIP_CONSTRAINT_ERRORS
這個參數對延遲約束沒有影響,但一旦檢測到還是引起回滾,如果對象有唯一性索引或約束,不能使用APPEND提示,它可能會對性能產生負面影響。
2. XML_CLOBS
在導出過程中,如果XMLTYPE列以CLOB格式存儲,它們會被自動導出為非壓縮的CLOB,如果是以對象--關系,二進制或CLOB格式組合存儲,默認將以壓縮格式導出,設置DATA_OPTIONS參數的值為XML_CLOBS指定所有XMLTYPE列都以非壓縮CLOB格式導出,語法如下:
DATA_OPTIONS=XML_CLOBS
例子:
expdp test/test tables=TAB1 directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log
version=11.1 data_options=XML_CLOBS
導入/導出必須使用相同的XML方案,作業版本必須設置為11.0.0或更高。
REMAP_DATA
在導入/導出操作期間,REMAP_DATA參數允許你關聯一個重新映射封裝函數,接受這個列的值作為其參數,然後返回數據修改後的版本,語法如下:
REMAP_DATA=[schema.]tablename.column_name:[schema.]pkg.function
這個功能在導入/導出操作時可以用來屏蔽敏感數據,將原始數據替換成隨機數據,映射是基於一列一列的,如:
expdp test/test tables=TAB1 directory=TEST_DIR dumpfile=TEST.dmp logfile=expdpTEST.log
remap_data:tab1.col1:remap_pkg.remap_col1 remap_data:tab1.col2:remap_pkg.remap_col2
重新映射函數必須返回和源列相同的數據類型,並且不能執行提交和回滾操作。
其它增強
如果由於某個錯誤,工作進程停止了,現在可以一次性自動重啟,如果進程第二次停止了,則必須手動重啟。
原文:Data Pump Enhancements in Oracle Database 11g Release 1 作者:Tim Hall