ORACLE數據庫EXPDP/IMPDP常用參數

    本文主要介紹如何使用EXPDP/IMPDP也就是數據泵方式導入導出Oracle數據庫。


導庫權限管理

備份恢復數據庫可以設置一個專門的用戶賦予導出導入權限,導出:exp_full_database導入:imp_full_database權限。(本文後面使用的是system默認就有權限)

    查看scott是否有導入導出權限

select * from dba_role_privs where grantee='SCOTT';

    賦予scott用戶導入導出權限

grant exp_full_database,imp_full_database to scott;

    回收scott導入導出權限

revoke select on dba_directories from scott;


directory管理

在介紹Oracle導入導出之前先介紹一下directory目錄,directory主要用來指定存儲路徑。查看DBA_directories視圖可以查看到目錄信息。這裏我也簡單介紹一下directory目錄的管理命令。

    創建名爲zhanky的directory,對應的路徑G:\zhanky

create or replace directory zhanky as 'G\zhanky';

    查看所有directory

select * from dba_directories;

    刪除指定的directory

drop directory zhanky;


爲了方便大家的理解,這裏簡單做了DIRECROEY和EXPDP/IMPDP的對應關係圖,創建directory是爲了在導入到處時引用。

圖片.png


前面講解了導庫前準備操作,首選需要確定導出用戶要有exp_full_database權限(如果使用system或sys默認就有),導入用戶需要imp_full_database權限。然後需要創建directory供存放備份文件。

開始進入正題了,導入導出的日常常用參數通過測試來了解。


EXPDP導出

常用日常備份,導出全庫到zhanky目錄中,備份文件命名zhanky.dmp,日誌文件命名zhanky_out.log。

expdp system/manager@zhanky directory=zhanky dumpfile=zhanky.dmp logfile=zhanky_out.log full=y

DIRECTORY:用於轉儲文件和日誌文件的目錄對象。
DUMPFILE:指定導出備份文件的命名。
LOGFILE:指定導出備份日誌的命名。裏面記錄了備份中的信息。
FULL:導出整個數據庫 (默認是N,就是默認只會導出登錄用戶的所有數據)。


將sh和scott用戶下除去sales和emp表以外百分之四十的數據導出到zhanky目錄中,備份文件命名zhanky2.dmp。

expdp system/manager@zhanky directory=zhanky dumpfile=zhanky2.dmp schemas=sh,scott exclude=table:\"IN\(\'SALES\',\'EMP\'\)\" sample=40

SCHEMAS:要導出的方案的列表 [登錄方案]。

EXCLUDE:排除特定對象類型。(表名要大寫)

SAMPLE:要導出的數據的百分比。


將users和example表空間導出到zhanky目錄中版本爲11.2.0.1,導出使用兩個進程備份,文件分別命名zhanky1.dmp、zhanky2.dmp。如果文件存在,直接覆蓋目標轉儲文件。

expdp system/manager@zhanky directory=zhanky dumpfile=zhanky1.dmp,zhanky2.dmp tablespaces=users,example version=11.2.0.1 parallel=2 reuse_dumpfiles=y

TABLESPACES:標識要導出的表空間的列表。

VERSION:指定導出數據庫的版本,一般用於高版本數據庫的數據要導入到低版本數據庫中時用到。

PARALLEL:更改當前作業的活動 worker 的數量。

REUSE_DUMPFILES:覆蓋目標轉儲文件 (如果文件存在) [N]。


將sh.selas表中cust_id列值爲987的數據導出到zhanky目錄中,備份文件命名爲zhanky3.dmp,備份任務名叫zhankycs

expdp system/manager@zhanky directory=zhanky dumpfile=zhanky3.dmp tables=sh.selas QUERY=selas:"where cust_id=987"  JOB_NAME=zhankycs

TABLES:標識要導出的表的列表。例如, TABLES=HR.EMPLOYEES,SH.SALES:SALES_1995。

QUERY:用於導出表的子集的謂詞子句。例如, QUERY=employees:"WHERE department_id > 10"。

JOB_NAME:要創建的導出作業的名稱。


更多導出參數可以通過 expdp -hlep獲得



IMPDP導入

        IMPDP的大概過程:首先會驗證用戶名、密碼、庫等參數信息,然後創建表空間、用戶、角色等,最後導入表、索引等對象。在這個步驟中創建表空間用戶最重要,如果創建表空間或用戶失敗,那這個表空間或用戶的數據在新庫中就沒了。創建用戶失敗的原因一般都是表空間不存在,所以表空間創建的是否成功事關重要。在導入過程自動創建表空間時會按照備份文件(也就是備份文件數據源庫)中的參數信息。所有參數正確那麼就可以出問題的地方就只有存儲空間和路徑了。所以我們只需要確認服務器空間是否足夠和源庫中數據文件的路徑在服務器上是否存在。而單實例環境從windows導入到linux這種情況,路徑肯定沒法保證一致,所以建議在導入之前先創建表空間。一般如果是生產環境公司都會有創建表空間腳本。


常用日常恢復,將zhanky目錄下zhanky.dmp備份文件中所有數據導入到zhanky庫中導出日誌命名爲zhanky_in.log。

impdp system/manager@zhanky directory=zhanky dumpfile=zhanky.dmp logfile=zhanky_in.log full=y

DIRECTORY             供轉儲文件, 日誌文件和 sql 文件使用的目錄對象。

DUMPFILE              要從 (expdat.dmp) 中導入的轉儲文件的列表,
LOGFILE               日誌文件名 (import.log)。

FULL                  從源導入全部對象 (Y)。


將zhanky目錄下zhanky.dmp備份文件中sh和scott用戶下除去sales和emp表以外的所有數據導入到zhanky庫中。並將導入作業命名zhankycs_in

impdp system/manager@zhanky directory=zhanky dumpfile=zhanky.dmp schemas=sh,scott exclude=table:\"IN\(\'SALES\',\'EMP\'\)\" job_name=zhankycs_in

SCHEMAS               要導入的方案的列表。

EXCLUDE               排除特定的對象類型, 例如 EXCLUDE=TABLE:EMP。

JOB_NAME              要創建的導入作業的名稱。


將zhanky目錄下zhanky1.dmp、zhanky2.dmp備份文件中users和example表空間導入到zhanky庫中,導入使用兩個進程導入。

expdp system/manager@zhanky directory=zhanky dumpfile=zhanky1.dmp,zhanky2.dmp tablespaces=users,example reuse_datafiles=y parallel=2

TABLESPACES           標識要導入的表空間的列表。
REUSE_DATAFILES       如果表空間已存在, 則將其初始化 (N)

PARALLEL              更改當前作業的活動 worker 的數目。


將zhanky目錄下zhanky.dmp備份文件中sh.selas表裏cust_id列值爲987的數據指定爲10.2.0.4版本導入到zhanky庫中,如果指定庫種sh.selas表則將數據附加到表中

impdp system/manager@zhanky directory=zhanky dumpfile=zhanky.dmp tables=sh.selas QUERY=selas:"where cust_id=987" version=10.2.0.4 TABLE_EXISTS_ACTION=REPLACE

QUERY                 用於導入表的子集的謂詞子句。

VERSION               要導出的對象的版本, 其中有效關鍵字爲:

TABLES                標識要導入的表的列表。

TABLE_EXISTS_ACTION   導入對象已存在時執行的操作。 有效關鍵字: (SKIP)跳過, APPEND附加, REPLACE 替換和 TRUNCATE清空表後在添加。


將zhanky目錄下zhanky.dmp備份文件中所有數據導入到zhanky庫中,但是將users表空間中的數據導入到cs表空間中,scott用戶的數據導入到zhanky用戶中,sh.selas表的數據導入到system.cstable中。

impdp system/manager@zhanky directory=zhanky remap_tablespace=users:cs remap_schema=scott:zhanky remap_table=sh.selas:cstable full=y

REMAP_TABLESPACE     將表空間對象重新映射到另一個表空間。

REMAP_SCHEMA          將一個方案中的對象加載到另一個方案。

REMAP_TABLE    將表名重新映射到另一個表。例如, REMAP_TABLE=EMP.EMPNO:REMAPPKG.EMPNO。


其實數據泵的導入導出很簡單,主要就是理解各個參數的用途,然後各種搭配之用。這次的內容就寫到這裏,如果有問題歡迎留言指出。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章