expdp,impdp導出導入遠程數據庫到本地


建議:若備份數據庫較大遠程導入導出比較容易出錯,建議先備份表結構,再導入表數據
1.本地數據庫新建一個用戶test,並授予以下基本權限
grant connect to test;
grant resource to test;
grant create table, create database link to test;
grant create session to test;
2.創建遠程dblink
create public database link linkname_xxx connect to 遠程username identified by 遠程password 
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS = (PROTOCOL = TCP)
(HOST = IP)(PORT = 端口)))(CONNECT_DATA =(SERVICE_NAME
服務名)))';
3 .創建導出文件目錄,本地要存在該路徑,並授權給test
create directory expdir as 'e:\expdir';
grant read,write on directory expdir to test;
4.參數解釋
參數名 說明 使用示例
network_link 指定遠程dblink network_link=linkname
directory 指定導出目錄 directory=directoryname
dumpfile 指定備份文件名 dumpfile=remoteDB.dmp
logfile 指定日志文件名 logfile=logname.log
schemas 指定導出/導入某一個用戶 schemas=remoteDBUername
content
指定要導出的內容,默認值為ALL,語法如下:content={all| data_only | metadata_only}
content=metadata_only
remap_schema 只在導入時使用,實現將一個用戶的的數據遷移到另外一個用戶 remap_schema=localDBuername:remoteDBUername
remap_tablespace 只在導入時使用,把冒號前面的表空間對象導入到冒號后面的表空間
remap_tablespace=sourceTablespace:target Tablespace
table_exists_action 只在導入時使用,導入時,假如目標庫中已存在對應的表,對於這種情況,提供三種不同的處理方式:append,truncate,skip,replace
append :   追加數據到表中
truncate:  將目標庫中的同名表的數據truncate掉。
skip:遇到同名表,則跳過,不進行處理,注意:使用此參數值時,與該表相關的所有操作都會skip掉。
replace:導入過程中,遇到同名表,則替換到目標庫的那張表(先drop,再創建)。
table_exists_action=replace
ATTACH 當我們使用ctrl+C 退出交互式命令時,可使用attach參數重新進入到交互模式,
語法:ATTACH=[schema_name.]job_name
Schema_name用戶名,job_name任務名
Expdp scott/tiger ATTACH=scott.export_job
EXCLUDE 此參數用於排除不需要導出的內容,如我們進行全庫導出,但是不需要導出用戶scott,此時需要在exlude后先指定排除類型為schema,再指定具體的schema。具體使用方法見include參數. EXCLUDE與include的使用方法是一樣的
語法
    EXCLUDE=object_type[:name_clause] [,object_type[:name_clause] ]
    name_clause
        "='object_name'"
        "in ('object_name'[,'object_name',....])"
        "in (select_clause) "
    Object_type對象類型,如:table,view,procedure,schema等
    name_clause指定名稱的語句,如果不具體指定是哪個對象,則此類所有對象都不導出, select 語句中表名不要加用戶名。用戶名,通過schemas 指定。
expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd.dup EXCLUDE=VIEW
expdp scott/tiger DIRECTORY=dump_dir DUMPFILE=halberd.dup EXCLUDE=TABLE:\" IN\(\'TEMP\',\'GRADE\'\)\" EXCLUDE=TABLE:"='APPLICATION_AUDIT'"
INCLUDE 限制范圍,指定自己想要的內容,比如要導出某個用戶的某張表。
語法:
INCLUDE=object_type[:name_clause],object_type[:name_clause]
impdp dbmon/dbmon_123 directory=dump_dir network_link=zjzwb2 SCHEMAS=AICBS remap_schema=aicbs:aicbsb include=table:\"IN\(SELECT TABLE_NAME FROM dbmon.TABLES_TOBE_MASKED\)\"  LOGFILE=zjzwb.log transform=segment_attributes:n
    PARFILE中設置:
        INCLUDE=table:"in(select table_name from dba_tables where owner='AA')"
        INCLUDE=TABLE:"IN('TEST1','TEST2')"
    SHELL環境設置:
        INCLUDE=TABLE:\"IN\(SELECT TABLE_NAME FROM DBA_TABLES WHERE OWNER=\'AA\'\)\"
        INCLUDE=TABLE:\"IN\(\'TEST1\',\'TEST2\'\)\"
TRANSFORM 此參數只在導入時使用,是一個用於設定存儲相關的參數,有時候也是相當方便的。假如數據對應的表空間都存在的話,就根本用不到這個參數,但是,假如數據存儲的表空間不存在,使用此參數導入到用戶默認表空間就可以了。更靈活的,可以使用remap_tablespace參數來指定。
格式:
transform=transform_name:value[bject_type]
    transform_name = [OID | PCTSPACE | SEGMENT_ATTRIBUTES | STORAGE]:[Y|N]
segment attributes:段屬性包括物理屬性、存儲屬性、表空間和日志,Y 值按照導出時的存儲屬性導入,N時按照用戶、表的默認屬性導入
storage:默認為Y,只取對象的存儲屬性作為導入作業的一部分
oid:  owner_id,如果指定oid=Y(默認),則在導入過程中將分配一個新的oid給對象表,這個參數我們基本不用管。
pctspace:通過提供一個正數作為該轉換的值,可以增加對象的分配尺寸,並且數據文件尺寸等於pctspace的值(按百分比)
transform=segment_attributes:n --表示將用戶所有對象創建到用戶默認表空間,而不再考慮原來的存儲屬性。
FULL 指定導出內容為全庫導出。這里需要特別注意的是,expdp 不能導出sys用戶對象。即使是全庫導出也不包含sys用戶。
語法:FULL={Y | N}
expdp \'\/ as sysdba\' directory=dump_dir full=y
5.導出dmp文件
expdp localDBuername/localDBpasswd network_link =  linkname_xxx directory = expdir  dumpfile = remoteDB.dmp logfile = expdp.log schemas = remoteDBUername
例:expdp yl_etyy/yl_etyy@127.0.0.1:1521/orcl network_link = linkname_xxx directory = expdir dumpfile = remoteDB.dmp logfile = expdp.log schemas = remoteDBUername
只導出標結構,增加content參數:
例:expdp yl_etyy/yl_etyy@127.0.0.1:1521/orcl network_link = linkname_xxx directory = expdir dumpfile = remoteDB.dmp logfile = expdp.log schemas = remoteDBUername content=metadata_only
6.將dmp文件導入到數據庫
建議目標數據庫和源數據庫的表空間、臨時表空間、索引表空間名字一致,否則會出現表空間找不到的錯誤
1)impdp username / pwd @ IP : 端口 / 服務名 dumpfile= 數據備份.dmp
例:impdp NCC2020_0609/1@127.0.0.1:1521/orcl dumpfile=NCC2020_0609.dmp
2)impdp localDBuername/localDBpasswd directory = expdir  dumpfile = remoteDB.dmp logfile = impremoteDB.log remap_schema=localDBuername:remoteDBUername
7.直接用 impdp導入遠程數據庫到本地,不生成dmp文件
impdp username/pwd@IP:端口/服務名 directory=expdir logfile=impdp.log network_link=linkname_xxx schemas=remoteDBUername
8.impdp導入數據時數據表已經存在或者只想導入數據的情況
當使用impdp導入數據時,如果遇到表已經存在或者已經導入過表結構只想導入表數據,Oracle提供了以下四種方式:
  • SKIP:跳過已經存在的表,繼續導入下一個對象,如果CONTENT設置了DATA_ONLY參數,則不能使用SKIP
  • APPEND:不會影響已存在的數據,在原有數據表的基礎上繼續增加數據
  • REPLACE:先刪除掉表,然后創建表,最后完成數據插入
  • TRUNCATE:刪除已存在的行,然后插入所有的數據
我們需要在導入語句中使用TABLE_EXISTS_ACTION參數指定導入數據方式,方法如下
例:impdp zcgl/system dumpfile=GUIDONG.DMP directory=data_pump_dir REMAP_TABLESPACE=ASSETS:ZCGL REMAP_SCHEMA=TESTUSER:ZCGL TABLE_EXISTS_ACTION=APPEND logfile=TEST20191111.log
9.異常情況
在執行過程中可能會出現卡住不動,並且備份文件也不增長的情況,可以按以下步驟進行嘗試:
1)查詢dba_datapump_jobs表查看job狀態
運行狀態為EXECUTING
2)進入 Export狀態
Ctrl+C組合鍵,
若進入Export>,則直接進行3)停止job
若進入C:\Users\Administrator>,需要執行Expdp username/pwd ATTACH=job_name(通過查詢dba_datapump_jobs得到),進入Export>
3)停止job
在 “Export> ”提示符下輸入命令:stop_job=immediate ,回車后,再輸入yes確定結束當前任務,即可正確終止正在進行expdp導出數據的任務。
如何終止正在進行expdp導出數據的任務
正確停止后按照第一步查詢dba_datapump_jobs表狀態為NOT RUNNING, 或者 IDLING
4)恢復執行job
控制台執行Expdp username/pwd ATTACH=job_name(通過查詢dba_datapump_jobs得到),進入Export狀態
C:\Users\Administrator>Expdp username/pwd ATTACH=job_name
執行start_job:
Export> start_job --打開暫停的JOB(並未開始重新執行)
執行continue_client:
Export> continue_client      --通過此命令重新啟動job
5)按照第一步查詢job狀態,並且檢查備份文件是否重新開始增長





免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM