幾乎所有DBA都熟悉oracle的導出和導入實用程序,它們將數據裝載進或卸載出數據庫,在oracle database 10g和11g中,你必須使用更通用更強大的數據泵導出和導入(Data Pump Export and Import)實用程序導出和導入數據。
以前的導出和導入實用程序在oracle database 11g中仍然可以使用,但是Oracle強烈建議使用數據泵(Data Pump)技術,因為它提供了更多的高級特性。例如,你可以中斷導出/導入作業,然后恢復它們;可以重新啟動已失敗的導出和導入作業;可以重映射對象屬性以修改對象;可以容易地從另一個會話中監控數據泵的作業,甚至可以在作業過程中修改其屬性;使用並行技術很容易快速移動大量的數據;因為oracle提供了針對數據泵技術的API,所以可以容易地在PL/SQL程序中包含導出/導入作業;可以使用更強大的可移植表空間特性來快速移植大量的數據,甚至可在不同操作系統平台之間移動。
與舊的導出和導入實用程序不同,數據泵程序有一組可以在命令行中使用的參數以及一組只能以交互方式使用的特殊命令,你可以通過在命令行中輸入expdp help = y 或者 impdp help = y快速獲取所有數據泵參數及命令的概述
一. 數據泵技術的優點
原有的導出和導入技術基於客戶機,而數據泵技術基於服務器。默認所有的轉儲,日志和其他文件都建立在服務器上。
以下是數據泵技術的主要優點:
- 改進了性能
- 重新啟動作業的能力
- 並行執行的能力
- 關聯運行作業的能力
- 估算空間需求的能力
- 操作的網格方式
- 細粒度數據導入功能
- 重映射能力
二. 數據泵導出和導入的用途
- 將數據從開發環境轉到測試環境或產品環境
- 在不同的操作系統平台上的oracle數據庫直接的傳遞數據
- 在修改重要表之前進行備份
- 備份數據庫
- 把數據庫對象從一個表空間移動到另一個表空間
- 在數據庫直接移植表空間
- 提取表或其他對象的DDL
注意:數據庫不建立完備的備份,因為在導出文件中沒有災難發生時的最新數據。但是對於較小的數據庫和個別的表空間的導出,數據導出仍然是一個可行的備份工具。
三. 數據泵的組成部分
數據泵技術主要有三個以下部件組成
- DBMS_DATAPUMP程序包。 這是驅動數據字段元數據裝載和卸載的主要引擎。DBMS_DATAPUMP程序包包括數據泵技術的核心部分,此核心部分以過程的形式出現,實際驅動數據裝載和卸載。
- DBMS_METADATA。 為了提取並修改元數據,Oracle提供了DBMS_METADATA程序包。
- 命令行客戶機。兩個實用程序expdp和impdp進行導出和導入工作
四. 數據泵文件
對於數據泵操作,可以使用三種類型的文件:
- 轉儲文件:此文件存儲實際原數據
- 日志文件:記錄數據泵操作的消息和結果
- SQL文件:數據泵使用一種特殊的參數sqlfile,把導入作業中要執行的所有DDL語句寫入一個文件中。數據泵並不實際執行SQL,它僅僅是將DDL語句寫入由SQLFILE參數制定的文件中。
1. 使用目錄對象
數據泵作業在服務器上(而不是啟動在客戶機上)創建其所有的轉儲文件。Oracle后台進程代表Oracle的擁有者,負責為所有轉儲文件設置I/O。這意味着從安全角度講,你不能讓用戶在服務器上指定絕對路徑,除此之外還存在安全措施等問題。為了避免這些類型的問題,數據泵使用目錄對象。
目錄對象(directory object)被稱為是數據泵映射到一個特定操作系統目錄的對象,例如,一個目錄對象dump_dir可以指向服務器上/u01/app/oracle/admin/export目錄。然后通過簡單的dump_dir目錄對象名,訪問該目錄。Oracle會創建一個默認的目錄對象DATA_PUMP_DIR。該默認的對象目錄由oracle在以下位置自動創建:
ORACLE_BASE/admin/sid
ORACLE_HOME/admin/sid
如果未建立自己的目錄對象,oracle將使用默認的目錄對象DATA_PUMP_DIR,並將轉儲文件,日志文件,SQL文件寫到里面。要想了解默認的DATA_PUMP_DIR,可以使用基於DBA_DIRECTORIES視圖查詢。
SELECT * FROM DBA_DIRECTORIES
只有擁有SYS和SYSTEM權限的用戶才能夠使用默認目錄對象DATA_PUMP_DIR。因此,SYSTEM用戶可以啟動數據泵作業,而不用提供目錄名。
其他,未授權的用戶能夠使用數據泵導出或導入前,DBA(或者有CREATE ANY DIRECTORY權限的用戶)必須創建一個目錄對象並授予相應的權限。
CREATE OR REPLACE DIRECTORY directoy_name as ‘/u/test/oradata’
授予權限:
GRANT READ, WRITE ON DIRECTORY directoy_name TO user_name
之后所有的數據泵導出或導入作業均可使用DIRECTORY參數指定目錄
如:DIRECTORY = directoy_name, 如果用戶視圖使用expdp或impdp沒有指定目錄對象將報錯。
在實際的作業中,可以通過以下三種方式指定目錄對象:
- DIRECTORY參數: 在一個數據泵導出作業中,可以使用DIRECOTY參數指定對象名;
$ expdp hr/hr DIRECOTY=dump_dir ……
- DIRECOTY:FILE表示法: 為替代使用DIRECTORY參數,可以將目錄對象包含在一個特定的數據泵文件中(轉儲,日志,SQLFILE)。使用冒號(:)隔開文件說明中的目錄和個別文件名;
$ expdp hr/hr LOGFILE=dump_dir:test.log ……
- DATA_PUMP_DIR環境變量: 可以使用環境變量DATA_PUMP_DIR指向服務器的目錄對象。使用export命令。 指定之后,就不需要在作業中再指定DIRECTORY參數了。
$ EXPORT DATA_PUMP_DIR= dump_dir
2. 文件位置的優先次序
由於存在幾種指定目錄的方法,則究竟使用哪種,有一定的優先次序
a) Oracle首先檢查是否將目錄包含在一個與文件有關的參數內
b) 第二個檢查是否存在DIRECTORY參數
c) 第三個檢查是否使用環境變量
d) 最后檢查默認的DATA_PUMP_DIR目錄對象
五. 數據泵的權限
所有的oracle用戶都可以在默認情況下使用數據泵實用程序,若使用某些高級任務,還必須擁有以下權限
EXP_FULL_DATABASE,IMP_FULL_DATABASE
六. 數據泵的作業結構
數據泵導出和導入實用程序使用幾個進程來執行其作業,其中包括關鍵的主進程和工進程,以及客戶機進程和影子進程,下面我們具體來看看各個進程:
- 主進程
主進程,MCP(Master Control Process),有一個進程名為DMnn,全主進程名用<instance>_DMnn_<pid>格式,每個作業只有一個主進程。主進程控制整個數據泵作業的執行和順序。具體來說,主進程執行一下任務:
- 創建並控制作業
- 創建並管理工進程(worker process)
- 監控作業並記錄進程
- 維護作業狀態並重新啟動主表中的信息
- 管理必要的文件,包括轉儲文件集
主進程使用一個特殊的表,即主表。記錄導出轉儲文件中的各數據對象的位置。主表很像oracle的其他表,它位於每個數據泵導出和導入作業的中心。主進程維護作業狀態並啟動主表中的信息。Oracle在每個導出任務作業開始的時候,在正在運行數據泵作業的用戶模式中創建主表。主表包括了關於當前作業的各類信息,如導出/導入作業中的對象狀態,轉儲文件集的位置,作業的參數以及所有工作進程的狀態,主表與導出作業的名字相同。 主進程只對導出過程使用主表,在導出結束時,在導出作業的最后一步,主進程將主表的內容寫入導出轉儲文件並自動從數據庫中刪除主表。 主要導出作業成功完成或者發布了KILL_JOB的命令主表都講自動刪除,但是如果使用STOP_JOB命令停止作業,或者導出作業由於某種原因失敗,主表不會被刪除,表中包含了要重新啟動中斷作業的全部必要信息。
- 工作進程
工作進程名為<instance>_DWnn_<pid>。它是實際執行繁重的裝載和卸載數據工作的進程。主進程創建工作進程,並行度決定主進程將創建幾個工作進程,工作進程維護主表的行,在導出和導入各種對象時,他們根據作業狀態信息更新主表,完成,未決或失敗
- 影子進程
當客戶機登陸Oracle服務器時,數據庫創建了一個Oracle進程為數據泵API的請求服務。此影子進程(shadow process)創建由主表和主進程組成的作業,一旦客戶機崩潰,影子進程自動消失
- 客戶機進程
客戶機進程調用數據泵API。可使用兩個客戶機expdp和impdp,執行導出和導入。
七. 數據泵的導出
i. 數據泵的導出方法
1. 使用命令行,如:
$ expdp system/manager DIRECTORY=dump_dir DUMPFILE = expda1.dmp
2. 使用參數文件
除了在命令行直接指定導出參數外,還可以將他們放入參數文件中,從而在實際的導出作業中調用該參數文件,如:mytext.txt 這個參數文件
SCHEMA=HR
DIRECTORY=dump_dir
DUMPFILE=expda1.dmp HR
創建參數文件后,為了導出HR模式,所需要做的就是用PARFILE參數調用:
$ expdp PARFILE=mytext.txt
ii. 數據泵導出的方式
可以使用下列幾種方式執行導出作業
1. 全導出方式(full export mode)。
當你想要在一個導出會話中導出整個數據庫時,使用FULL參數,但是要有EXPORT_FULL_DATABASE的權限。
2. 模式方式(schema mode)。
如果只想導出一個單獨用戶的數據或對象,必須使用SCHEMA參數
3. 表空間方式(tablespace mode)。
使用表空間方式可以導出一個或多個表空間中的全部表。如果使用TRANSPORT_TABLESPACE參數,則只導出包含在一個或多個表空間中的對象的元數據,你能夠通過先導出元數據,在講表空間的文件復制到目標服務器,然后再將元數據導入目標服務器。
4. 表方式(table mode)。
用TABLES參數,可以導出一個或多個表。 表模式是數據泵導出作業的默認方式,如果按以下命令執行,則數據泵將自動執行導出SYSTEM的對象 $ expdp system/123456
iii. 數據泵的導出參數
數據泵導出實用程序的使用主要是一些參數的使用,為了方便討論,將參數分成以下幾類:
- 與文件目錄有關的參數
- 與導出方式有關的參數
- 導出過濾的參數
- 與加密有關的參數
- 估算參數
- 網絡鏈接參數
- 交互方式參數
- 與作業有關的參數
下面分別討論
1. 與文件目錄有關的參數
可以在數據泵的導出參數中指定幾個與文件和目錄有關的參數,這些參數包括,DIRECTORY, DUMPFILE, FILESIZE, PARFILE, LOGFILE, NOLOGFILE和COMPRESSION參數
- DIRECTORY
Directory參數指向為轉儲文件和日志文件使用的目錄對象,見4.1。
- DUMPFILE
DUMPFILE參數提供應該寫入導出的轉儲文件的名字(或列表)。 通過指定%U替換變量,可創建多個轉儲文件,替換變量將從01到99,例如exp%U.dmp可以轉儲成exp01.dmp, exp02.dmp, exp03.dmp等文件名。用%U指定的多個轉儲文件,由參數PARALLEL決定。 在用逗號分隔的列表中提供多個文件 如果未指定默認的DUMPFILE,作業將使用默認的文件參數名expdat.dmp。
- FILESIZE
FILESIZE參數是可選的,它指定轉儲文件的大小,默認以字節為單位,可以用字節,KB,MB,GB為單位指定FILESIZE參數。若不指定,則轉儲文件沒有大小的限制,如果通過FILESIZE指定了轉儲文件的最大大小。倘若轉儲文件超過限制,導出作業將停止,待該問題解決后仍可以重新啟動它。
- PARFILE
PARFILE參數文件,如同前面介紹的內容。
- LOGFILE和NOLOGFILE
可以用LOGFILE指定導出作業的日志文件,如果使用NOLOGFILE則作業將不創建日志文件,但屏幕仍可看到日志信息。
- REUSE_DUMPFILES
可指定REUSE_DUMPFILES參數覆蓋一個導出的轉儲文件。默認是不覆蓋。可以指定值Y,覆蓋一個之前的轉儲文件,N是默認行為。
$expdp hr/hr DIRECTORY=dump_dir DUMPFILE=expdat.dmp TABLES=employees REUSE_DUMPFILES=y
當然必須保證不在使用之前的expdat.dmp文件了
- COMPRESSION
COMPRESSION參數允許用戶指定在將導出數據寫入轉儲文件時,壓縮哪些數據。默認時,所有被導出的元數據均被壓縮。可以指定all, data_only, metadata_only, none等參數:
all:允許對整個操作壓縮
data_only:只壓縮數據
metadata_only:只壓縮原數據,這是默認值
none:不壓縮
2. 與導出方式有關的參數
與導出方式有關的參數有FULL, SCHEMA, TABLESPACE, TABLES, TRANSPORT_TABLESPACE, TRANSPORT_FULL_CHECK。
除了TRANSPORT_FULL_CHECK參數外,其他參數已經在之前介紹過了。
TRANSPORT_FULL_CHECK參數檢查以確定試圖傳送的可移植表空間滿足可移植表空間作業限定的所有條件。使用此參數,可以檢查可移植集合內的對象和數據庫其他對象之間的相關性。例如索引完全依賴於表,因為沒有表,索引就沒有意義。
可設置TRANSPORT_FULL_CHECK為Y或N,如果設置TRANPORT_FULL_CHECK=Y,則數據泵導出作業將檢查雙向相關性,如果你有一個表在可移植表空間中,但索引不在其中,或者表空間只包含了索引還沒有表,則導出作業將失敗。
如果設置TRANSPORT_FULL_CHECK,則數據泵導出作業將檢查單向相關性。如果可移植表空間集合包含表而未包含索引,則導出將成功,但是如果只包含索引還沒有表,則導出作業將失敗。
3. 導出過濾參數
- CONTENT
使用CONTENT參數,可以過濾要寫入導出轉儲文件中的內容。
CONTENT參數可取以下三個值:
ALL:同時導出數據和元數據
DATA_ONLY:只導出數據
METADATA:只導出元數據
$ expdp hr/hr DUMPFILE=expdat1.dmp CONTENT=DATA_ONLY
- EXCLUDE和INCLUDE
EXCLUDE和INCLUDE是兩個對立的參數,可用來過濾元數據。 元數據的過濾允許在導出或導入過程中選擇去除或包含指定類型的對象。
注意:使用CONTENT=DATA_ONLY時,不能再使用EXCLUDE和INCLUDE。
簡單設置EXCLUDE參數,可在導出作業中排除特定的數據庫對象。另外INCLUDE允許只包括一組特定的對象,格式
EXCLUDE=object_type[:name_clause]
INCLUDE=object_type[:name_clause]
如:EXCLUDE=TABLE:”LIKE ‘EMP%’”它排除所有以EMP開頭的表。
EXCLUDE=index排除所有索引
EXCLUDE=SCHEMA:“=‘HR‘” 排除HR整個模式
INCLUDE正好和EXCLUDE相反,包含特定的對象,如:
INCLUDE=TABLE:”IN(‘tableA’, ‘tableB’)” 只導出tableA和tableB兩個表
INCLUDE=PROCEDURE 只導出模式中所有的存儲過程
INCLUDE=INDEX:“LIKE ‘EMP%’”只導出以EMP開頭的索引
注意EXCLUDE和INCLUDE是相對的兩個參數,不可同時使用。
- REMAP_DATA
REMAP_DATA允許用戶用一個新值替換某個列中的多個值,列的新值由重映射函數(remap function)指定。將數據從產品環境移動到測試環境,可能由於保密等原因而需要更改敏感信息,可使用此參數。你可以使用相同的重映射函數引用約束中的子列和父列。
如:$ expdp hr/hr DIRECTORY=dump_dir DUMPFILE=expdat1.dmp TABLES=employee
REMAP_DATA=hr.employee.employee_id:hr.remap.minux10
REMAP_DATA=hr.employee.first_name: hr.remap.plusx
程序包REMAP的兩個函數minux10和plusx d.
- DATA_OPTIONS
DATA_OPTIONS參數允許在導出過程中處理特定的數據類型指定選項。只能將此參數指定為XML_CLOBS
- QUERY
QUERY參數與它在傳統的導出實用程序中作用相同:借助於SQL語句選擇導出的表行數據。
QUERY參數允許用一個表名限定SQL語句,如:QUERY=hr.orders:”where order_id > 1000000”
訂單表中的order_id >1000000的訂單行被導出
- SAMPLE
使用SAMPLE參數,可以導出表的一個數據子集。SAMPLE參數允許指定的范圍從0.000001到100的一個百分數。語法如下: SAMPLE=schema_name.table_name:sample_percent
SAMPLE="hr"."employee":50
導出hr模式下的表employee百分之50的數據,可以不指定模式名,如不指定,則默認當前模式,如指定表名,則一般指定模式名,不然會導出所有表的百分比。
- TRANSPORTABLE
TRANSPORTABLE參數允許指定進行表模式導出時,是否想要數據庫導出特定的表的元數據,有ALWAYS和NEVER兩個值
4. 對導出數據進行加密
可使用后面的一個或多個與加密相關的參數指定數據寫到轉儲文件時是否加密:ENCRYPTION, EXCRYPTION_ALGORITHM , ENCRYPTION_MODE , ENCRYPTION_PASSWORD.
- ENCRYPTION
ENCRYPTION參數指定在將數據寫到轉儲文件時是否對其加密。
可給ENCRYTION參數指定以下值
ALL:加密所有數據和元數據
DATA_ONLY:只加密數據
ENCRYPTION_COLUMN_ONLY:只加密使用TDE特性的加密列
METADATA_ONLY:只加密元數據
NONE:不進行加密(默認)
注意:可通過指定ENCRYPTION或ENCRYPTION_PASSWORD參數,或者兩者都指定,實施加密。
如果指定了ENCRYPTION_PASSWORD參數,則ENCRYPTION參數默認ALL。
下面的例子只加密數據
$ expdp hr/hr DIRECROTY=dump_dir DUMPFILE=expdat1.dmp ENCRYPTION=data_only ENCRYPTION_PASSWORD=123456
- ENCRYPTION_ALGORIHM
ENCRYPTION_ALGORIHM參數指定數據使用的加密算法,默認為AES128,你也可以指定AES192,AES256
- ENCRYPTION_MODE
dual:
password:
transparent:
- ENCRYPTION_PASSWORD
在導出轉儲文件中,可以使用ENCRYPTION_PASSWORD參數加密數據,以防未授權的用戶從轉儲文件中讀取數據。
5. 估算參數
使用兩個有趣的估算參數可以估算導出作業將消耗多少無力空間: ESTIMATE和ESTIMATE_ONLY
- ESTIMATE
將指出新的導出作業將要消耗多少空間,空間總是以字節為單位進行估算,可以指定數據庫使用正在被導出的對象中的數據庫塊(BLOCK)的數量,或者表的優化程序統計數據(STATISTICS)進行空間估算
ESTIMATE=(BLOCKS|STATISTICS), BLOCKS是默認選項
- ESTIMATE_ONLY
雖然ESTIMATE參數只在導出作業中生效,但是可以使用ESTIMATE_ONLY參數而不啟動導出作業。
$ expdp hr/hr ESTIMATE_ONLY=y
6. 網絡鏈接參數
省略
7. 與作業有關的參數
- JOB_NAME:
可選參數,指出導出作業的名字,若未指定,oracle將默認。此名字與作業主表的名字相同。
- STATUS:
STATUS參數在運行長時間作業的時候非常有用。因為它可以按照指定的時間間隔提供更新的狀態,此參數以秒為單位取整數,默認是0,將在必要時顯示新的狀態。如果想每分鍾地確保有關正在運行中數據泵作業的更新狀態,指定STATUS=60
- FLASHBACK_SCN:
- FLASHBACK_TIME:
- PARALLEL:
PARALLEL是功能強大的參數,允許作業指定一個以上的活動執行線程,工作進程,使用PARALLEL參數意味着作業將使用多線程執行,可以使用ATTACH命令在運行中改變並行度。默認值是1。
不要忘記指定PARALLEL參數后,轉儲文件的命名要注意相同數量。
$ expdp hr/hr PARALLEL=3 DUMPFILE=expdat%U.dmp 或者
$ expdp hr/hr PARALLEL=3 DUMPFILE=(expdat01.dmp, expdat02.dmp, expdat03.dmp)
- ATTACH:
ATTACH參數將使你的數據泵客戶機會話加入到一個運行的作業中,並使你進入交互的方式,此參數只能與用戶名密碼組合使用。
$ expdp hr/hr ATTACH=job_name
8. 交互方式的導出參數
可以使用ATTACH命令或者CTRL+C命令交互地加入作業中,不會停止正在允許的作業。交互命令只停止在屏幕上顯示該作業消息並顯示提示符(export>) 常見的交互式命令
- ADD_FILE: 給轉儲文件集合增加一個轉儲文件
- CONTINUE_CLIENT:返回登陸方式, 作業將重新啟動
- EXIT_CLIENT:退出客戶機會話,並保持作業允許
- HELP:提供交換命令的幫助 KILL_JOB: 釋放並刪除作業
- PARALLEL: 更改當前作業的活動工作進程數量
- START_JOB:啟動並重新恢復當前作業 S
- TATUS: 設置作業的監控頻率
- STOP_JOB: 順序關閉作業的執行,並退出客戶機
八. 數據泵的導入
與數據泵導出實用程序的情形一樣, 調用impdp實用程序時,可以借助於各種參數控制數據的導入
- 與文件和目錄有關的參數
- 過濾參數
- 與作業有關的參數
- 與導入方式有關的參數
- 重映射參數
- TRANSFORM參數
- NETWORK_LINK參數
- 閃回參數
1. 與文件和目錄有關的參數
數據泵導入實用程序impdp與導出程序expdp以同樣的方式使用PARFILE, DIRECTORY, DUMPFILE, LOGFILE, NOLOGFILE命令。但是SQLFILE是一個唯一針對導入程序的文件。
在執行數據導入的過程中,有時希望從導出的轉儲文件中提取DDL,SQLFILE參數可以很輕易的做到這一點。 $impdp hr/hr DIRECTORY=dump_dir DUMP_FILE=expdat1.dmp SQLFILE=dump02_dir:finance.sql SCHEMA=scott
此命令會將與SCOTT模式相關的DDL語句寫入到SQLFILE。
要記住,SQLFILE參數只為特定的文件提取DDL,並不發生實際的數據導入。
使用此參數,可以從導出的轉儲文件中提取帶有全部DDL的SQL腳本。
另一個與導入相關的文件參數是REUSE_DATAFILES參數,指定在導入數據時是否使用已有的數據文件,
REUSE_DATAFILES=Y為使用。
2. 過濾參數
與數據泵的導出作業情形一樣
- 使用CONTENT參數確定是否裝載數據或者元數據。
- EXCLUDE和INCLUDE參數限制導入的對象
- TABLE_EXISTS_ACTION參數指定數據泵導入數據時若表已經存在,將做什么
SKIP: 默認值,跳過
APPEND:在已存在的表后面追加
TRUNCATE: 截取表並從轉儲文件中重新裝載
REPLACE: 刪除表,重新創建表,並導入數據
3. 與作業有關的參數
JOB_NAME, STATUS_PARALLEL
4. 與導入方式有關的參數
TABLES, SCHEMAS, TABLESPACES和FULL
5. 重映射參數
重映射參數增加了ORACLE在數據導入處理過程中重映射對象的能力,
參數有REMAP_TABLES, REMAP_SCHEMA, REMAP_DATAFILE和REMAP_TABLESPACE
- REMAP_TABLE:
REMAP_TABLE參數允許在使用可移植方式的導入操作中,重命名表
$impdp hr/hr DIRECTORY=dump_dir DUMPFILE=newdump.dmp TABLES=hr.employee REMAP_TABLE=hr.employee:emp
REMAP_TABLE參數在導入中,將HR.EMPLOYEE表更名為EMP表
- REMAP_SCHEMA:
使用REMAP_SCHEMA參數,可以將對象從一個模式移動到另一個模式。
$impdp hr/hr DIRECTORY=dump_dir DUMPFILE=newdump.dmp REMAP_SCHEMA=HR:OE
將HR模式的所有對象導入到OE模式中。導入程序甚至能創建OE模式,如果他不存在的話。
- REMAP_DATAFILE:
平台不同,可以使用此參數改變文件系統的名字
- REMAP_TABLESPACE
將一個表空間數據導入到另一個表空間中
- REMAP_DATA
- REMAP_OPTIONS
- TRANSPORTABLE
6. TRANSFORM參數
假如你正從一個模式甚至另一個數據庫中導入表,假設你想確保在導入過程中不導入對象的存儲屬性,而只導入表所包含的數據,則TRANSFORM參數允許指定數據泵導入作業不導入某些存儲屬性和其他屬性。
有幾個值:
- SEGMENT_ATTRIBUTES: 段屬性包括物理屬性,存儲屬性,表空間和日志。
通過指定SEGMENT_ATTRIBUTES=Y默認,指示導入作業包括上述屬性
- STORAGE: 可以使用STORAGE=Y默認,說明導入作業只包括對象的存儲屬性。
- OID:如果指定OID=Y默認,則導入過程中將分配一個新的OID給對象表
- PCTSPACE:通過給出一個正數作為該轉換的值,可增加對象的分配大小,並且數據文件大小等於PCTSPACE的值
TRANSFORM_NAME:VALUE:OBJECT TYPE
$impdp hr/hr TABLES=hr.employee DIRECTORY=dump.dir DUMPFILE=newdump.dmp TRANSFORM=segment_attributes:n:table
導入的數據不包括表的段屬性
7. NETWORK_LINK參數
使用新的NETWORK_LINK參數可以不通過轉儲文件,直接從遠程數據導入數據。
第一步:創建一個遠程數據庫的鏈接
CREATE DATABASE LINK remote CONNECT TO system IDENTIFIED BY password USING ‘remote.world’
第二步:若沒有的話創建一個目錄對象
CREATE DIRECTORY remote_dir AS ‘/u/app/oracle/dp_dir’;
第三步:
$EXPORT DATA_PUMP_DIR=remote_dir環境變量
第四步: 從數據庫remote中執行網絡導入
$ impdp system/password SCHEMA=scott NETWORD_LINK=remote
8. 閃回參數
九. 監控數據泵作業
有兩個視圖(DBA_DATAPUMP_JOBS和DBA_DATAPUMP_SESSIONS)對於監控數據泵作業至關重要。另外,可以使用視圖V$SESSION_LONGOPS和V$SESSION獲取會話信息。在大多數情況下,可以聯結兩個或更多的視圖來獲得作業進展的必要信息。
i. 瀏覽數據泵作業
DBA_DATAPUMP_JOBS視圖顯示所有當前運行的數據泵作業的概要信息。
如下:SELECT * FROM DBA_DATAPUMP_JOBS
由於動態DBA_DATAPUMP_JOBS視圖只顯示活動的作業,所以在該視圖中的查詢將顯示正在運行的重要JOB_NAME列值。如果想半路加入到正在運行的作業中,需要知道作業名,由於主表的名字與與JOB_NAME列值相同,所以可以通過該視圖確定主表的名字。
JOB_MODE列可以取值為FULL, TABLE, SCHEMA或TABLESPACE, 反映當前執行的導出或導入作業的方式。
STATE列根據執行查詢所在的導出或導入的階段,可以取值為UNDEFINED,DEFINING, EXCUTING和NOT RUNNING。
ii. 瀏覽數據泵會話
DBA_DATAPUMP_SESSIONS視圖顯示當前加入到數據泵導出或導入作業中的用戶會話,可以將此視圖中的SADDR列與V$SESSION視圖的SADDR列聯結,以獲取有關當前加入到作業中的用戶會話的有用信息。
SELECT SID, SERIAL# FROM V$SESSION S, DBA_DATAPUMP_SESSIONS D WHERE S.SADDR = D.SADDR
iii. 瀏覽數據泵作業的進度
在V$SESSION_LONGOPS視圖中,可以使用以下4個列的監控導出或導入作業的進展:
TOTALWORK: 顯示作業的以MB為單位的總估算量
SOFAR: 顯示作業中迄今為止移動的字節數量,以MB為單位
UNITS: 代表兆字節,以MB為單位
OPNAME: 顯示數據泵的作業名
以下是個典型的腳本,
SELECT OPNAME, TARGET_DESC, SOFAR, TOTALWORK FROM V$SESSION_LONGOPS
iv. 使用數據泵API
使用數據泵API來編寫PLSQL腳本以導出或導入數據,數據泵API在DBMS_DATAPUMP程序包中,他可以完成以下任務 啟動作業 監控作業 分解作業 停止作業
重新啟動作業
DBMS_DATAPUMP.OPEN()
DBMS_DATAPUMP.ADD_FILE()
DBMS_DATAPUMP.METADATA_FILEDIR()
DBMS_DATAPUMP.START_JOB()
十. 可移植表空間
Oracle的可移植表空間特性通過將數據簡單地從一個數據庫移動到另一個數據庫,提供了一種數據庫之間有效移動大數據的簡易方法。Oracle強烈推薦盡可能地使用可移植表空間特性,因為其在數據庫之間的移動數據特性超越了其他方法。
i. 移植表空間
主要有以下幾個步驟
a. 選擇要移動的表空間,確保與其他表空間的對象無任何依賴關系
b. 生成可移植表空間集
c. 執行表空間導入。這涉及將數據文件復制到目標服務器並將相關元數據導入到目標數據庫中
1. 選擇要移植的表空間
移植表空間必須滿足的主要條件是:候選的表空間集必須為自包含。在要移植的表空間內的對象的引用完整性約束一定不能指向表空間外的對象。檢驗表空間是否滿足自包含條件的一種方法是使用DBMS_TTS程序包 EXECUTE SYS.DBMS_TTS.TRANSPORT_SET_CHECK(‘TABLESPACE’, TRUE)
必須擁有EXECUTE_CATALOG_ROLE角色來執行TRANSPORT_SET_CHECK過程。如果執行這個過程沒有返回出錯信息,則表明在可移植集合中的表空間是自包含的,因而符合條件。
2. 生成可移植表空間集
在將表空間移植到目標數據庫之前,必須生產一個可移植表空間集。可移植表空間集由表空間中所有數據文件和導出轉儲文件組成。導出轉儲文件中包含了關於表空間的格式化數據目錄信息。 在移植表空間之前要做的一件事情就是將表空間設置為只讀方式。如果有活動的事務正在修改表,則不能移植表空間。
ALTER TABLESPACE TABLESPACE_NAME READ_ONLY
然后就是導出表空間的元數據
此步驟在執行過程中很快,因為沒有導出行數據,只是元數據。
$EXPDP OE/OE DIRECTORY=dump_dir DUMPFILE=sales.dmp TRANPORT_TABLESPACE=sales01
將導出的轉儲文件和數據文件復制到目標數據庫
復制之前要確保表空間的塊大小與目標表空間的標准塊大小相等,如果不等,目標數據泵必須在其init.ora文件中指定一個非標准的塊大小來充當要導出的表空間的塊大小。最后使用FTP,遠程復制或其他方法,將文件復制到目標數據庫
3. 執行表空間的導入
最后運行數據泵導入實用程序(在目標數據庫中)。由於導出轉儲文件沒有任何數據,將要導入的只是對象的元數據。目標數據庫將簡單的使用從源數據庫復制過來的數據文件作為可移植表空間的數據文件。所需要做的就是把表空間插入目標數據庫中 IMPDP system/password DUMPFILE=sales.dmp TRANSPORT_DATAFILES='sales01.dbf' directory=dump_dir
可移植表空間功能強大同時非常高效,可跨平台。