您好,登錄后才能下訂單哦!
這篇文章主要介紹“Oracle數據泵技術常用操作有哪些”,在日常操作中,相信很多人在Oracle數據泵技術常用操作有哪些問題上存在疑惑,小編查閱了各式資料,整理出簡單好用的操作方法,希望對大家解答”Oracle數據泵技術常用操作有哪些”的疑惑有所幫助!接下來,請跟著小編一起來學習吧!
1. 為什么選擇數據泵
數據泵是Oracle 10g開始引入的新技術,對現在來說已經不是新技術了,11g都已經結束標準支持期了。技術更新
從10g版本開始,數據泵技術跟隨新版本進行不斷的完善,對新版本的Oracle數據庫具有更強的適應性。BUG更少
數據泵可以使用直接路徑、并行等特性,對大數據量的遷移來說,具有更好的性能,可以減少大量導入導出時間。性能更好
exp/imp不能導出空表,而且由于從10g開始停止更新,后面版本引入的新對象都不支持導出,如自定義對象。功能更強
1.1. 與exp/imp的主要區別
? exp/imp是客戶端工具,可以在客戶端使用;數據泵是服務端工具,只能在服務端使用。
? exp/imp不能導出空表;數據泵可以。
? exp/imp跟數據泵導出的文件不能通用。
2. 基本概念
數據泵的命令行命令是expdp/impdp,是一種數據庫之間移動數據的工具。
目錄(directory)是Oracle的一種對象類型,可以認為是一個指向物理存儲路徑的指針,用來指定數據泵導出導入文件使用的路徑。
模式(schema)是一組數據庫對象的集合,一般一個用戶對應一個schema。
3. 基本步驟
3.1 創建目錄
SQL> create directory dump_dir as '/home/oracle/dump'; |
dump_dir 是目錄名稱;可以根據實際情況自己定義,不重復即可,如果系統中已經存在,可以直接使用;
/home/oracle/dump 是操作系統物理路徑;必須保證該路徑真實存在,并具有足夠空間存放備份文件;
3.2 授權
SQL> grant read,write on directory dump_dir to public; |
dump_dir 是上面創建得目錄名稱;
public 表示這個目錄是公開的;也可以針對某個用戶授權;
3.3 執行導入導出
$ expdp system/dbmanager directory=dump_dir full=Y dumpfile=full_20190101.dmp logfile=full_expdp_20190101.log |
$ impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log |
system 是導出命令所用的用戶;
dbmanager 是system用戶的密碼;
dump_dir 是上面創建得目錄名稱;
full=Y 表示全庫導出;
dumpfile/logfile 根據實際情況命名即可;該命名需要能夠描述備份的內容及時間等基本信息;該命名重復的話會覆蓋;
4. 常用方式
4.1 expdp 導出
##導出一張表,例: expdp system/dbmanager directory=dump_dir dumpfile=emp_20190101.dmp logfile=emp_expdp_20190101.log tables=scott.emp ##導出多張表,例: expdp system/dbmanager directory=dump_dir dumpfile=empdept_20190101.dmp logfile=empdept_expdp_20190101.log tables=\(scott.emp,scott.dept\) ##導出一個用戶(導出這個用戶的所有對象),例: expdp system/dbmanager directory=dump_dir dumpfile=scott_20190101.dmp logfile=scott_expdp_20190101.log schemas=scott ##導出多個用戶,例: expdp system/dbmanager directory=dump_dir dumpfile=scotthr_20190101.dmp logfile=scotthr_expdp_20190101.log schemas=\(scott,hr\) ##導出整個數據庫(sys的用戶數據不會被導出),例: expdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_expdp_20190101.log full=y ##并行導出,例: expdp system/dbmanager directory=dump_dir dumpfile=scott_20190101_%U.dmp logfile=scott_expdp_20190101.log schemas=scott parallel=8 ##導出用戶元數據(包含表定義、存儲過程、函數等等),例: expdp system/dbmanager directory=dump_dir dumpfile=scott_20190101.dmp logfile=scott_expdp_20190101.log schemas=scott content=metadata_only ##導出用戶存儲過程,例: expdp system/dbmanager directory=dump_dir dumpfile=scott_20190101.dmp logfile=scott_expdp_20190101.log schemas=scott include=procedure ##導出用戶函數和視圖,例: expdp system/dbmanager directory=dump_dir dumpfile=scott_20190101.dmp logfile=scott_expdp_20190101.log schemas=scott include=\(function,view\) ##導出一個用戶,但不包括索引,例: expdp system/dbmanager directory=dump_dir dumpfile=scott_20190101.dmp logfile=scott_expdp_20190101.log schemas=scott exclude=index |
4.2 impdp導入
##導入dmp文件中的所有數據,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log full=y ##導入一張表,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log tables=scott.emp ##導入多張表,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log tables=\(scott.emp,scott.dept\) ##導入一個用戶,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log schemas=scott ##導入多個用戶,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log schemas=\(scott,hr\) ##并行導入,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101_%U.dmp logfile=full_impdp_20190101.log parallel=5 ##導入元數據(包含表定義、存儲過程、函數等等),例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log content=metadata_only ##導入存儲過程,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log include=procedure ##導入函數和視圖,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log include=\(function,view\) ##導入數據,但不包括索引,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log exclude=index ##重命名表名導入,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log remap_table=scott.emp:emp1 ##重命名schema名導入,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log remap_schema=scott:tim ##重命名表空間名導入,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log remap_tablespace=users:pams ##將dmp文件的ddl語句導入到一個文件,不導入數據庫,例: impdp system/dbmanager directory=dump_dir dumpfile=full_20190101.dmp logfile=full_impdp_20190101.log sqlfile=import.sql |
5. 常用參數
5.1 expdp參數說明
attach=[schema_name.]job_name 說明:nodefault。連接到作業,進入交互模式。 ##導出模式,以下五個參數互斥: full=[ Y | N ] 說明:導出所有數據和元數據。要執行完全導出,需要具有datapump_exp_full_database角色。 schemas=schema_name[,...] 說明:導出用戶。 tables=[schema_name.]table_name[:partition_name][,...] 說明:導出表。 tablespaces=tablespace_name[,...] 說明:導出表空間。 transport_tablespaces=tablespace_name[,...] 說明:導出可移動表空間。 ##過濾條件,以下三個參數互斥: query=[schema.][table_name:] query_clause 說明:按查詢條件導出。 exclude=object_type[:name_clause][,...] 說明:排除特定的對象類型。 include=object_type[:name_clause][,...] 說明:包括特定的對象類型。 ##其他參數: directory=directory_object 說明:導出路徑。 dumpfile=file_name[,...] 說明:導出的文件名。 logfile=file_name 說明:導出的日志文件名。 content=[ all | data_only | metadata_only] 說明:指定要導出的數據。 parallel=integer 說明:并行度,該值應小于等于dmp文件數量,或可以為'dumpfile='使用替換變量'%U'。RAC環境中,并行度大于1時,注意目錄應該為共享目錄。 compression=[ all | data_only | metadata_only | none ] 說明:壓縮。 parfile=[directory_path]file_name 說明:指定導出參數文件名稱。 filesize=integer[b|kb|mb|gb|tb] 說明:指定每個dmp文件的最大大小。如果此參數小于將要導出的數據大小,將報錯ORA-39095。 |
5.2 impdp參數說明
attach=job_name 說明:連接到作業,進入交互模式。 導入模式,以下五個參數互斥。 full=[ Y | N ] 說明:導入dmp文件的所有數據和元數據。 schemas=schema_name[,...] 說明:導入用戶。 tables=[schema_name.]table_name[:partition_name][,...] 說明:導入表。 tablespaces=tablespace_name[,...] 說明:導入表空間。 transport_tablespaces=tablespace_name[,...] 說明:導入可移動表空間。 過濾條件,以下三個參數互斥: query=[schema.][table_name:] query_clause 說明:按查詢條件導入。 exclude=object_type[:name_clause][,...] 說明:排除特定的對象類型。 include=object_type[:name_clause][,...] 說明:包括特定的對象類型。 其他參數: directory=directory_object 說明:導入路徑。 dumpfile=file_name[,...] 說明:導入的文件名。 logfile=file_name 說明:導入的日志文件名。 content=[ all | data_only | metadata_only ] 說明:指定要導入的數據。 parallel=integer 說明:并行度,該值應小于等于dmp文件數量,或可以為'dumpfile='使用替換變量'%U'。 parfile=[directory_path]file_name 說明:指定導入參數文件名稱。 REMAP_TABLE=[schema.]old_tablename[.partition]:new_tablename 說明:允許導入期間重命名表名。 REMAP_SCHEMA=source_schema:target_schema 說明:允許導入期間重命名schema名。 REMAP_TABLESPACE=source_tablespace:target_tablespace 說明:允許導入期間重命名表空間名。 SQLFILE=[directory_object:]file_name 說明:根據其他參數,將所有的 SQL DDL 寫入指定的文件。 TABLE_EXISTS_ACTION=[ SKIP | APPEND | TRUNCATE | REPLACE ] 說明:default:skip(if content=data_only is specified,then the default is append) |
6. 注意事項
6.1 directory相關SQL語句:
##查看目錄 select * from dba_directories; ##創建目錄 create directory dump_dir as '/home/oracle/tmp'; ##目錄授權 grant read,write on directory my_dir to public; |
6.2 expdp導出
1、導數的數據庫用戶需要擁有對directory_object的讀寫權限。 2、操作系統中需要已經存在directory_object指定的路徑。 3、oracle用戶擁有對directory_object指定路徑的讀寫權限。 4、system用戶導出用戶,會將創建用戶和授予系統權限的元數據也導出,普通用戶不能導出這些元數據。 |
6.3 impdp導入
1、expdp導出的文件不能使用imp導入,只能通過impdp導入數據庫。 2、導入時遇到已存在的對象,默認會跳過這個對象,繼續導入其他對象。 3、導入時應確認dmp文件和目標數據庫的tablespace、schema是否對應。 4、導入dmp文件時,應確定dmp文件導出時的命令,以便順利導入數據。 |
6.4 交互模式
進入交互可以操作導入導出作業。 進入交互模式的方法: 1、導入導出命令行執行期間按Ctrl + c 2、expdp attach=jobname或impdp attach=jobnam 查看導入導出日志可以看到jobname,也可以通過查詢dba_datapump_jobs找到jobname。 |
6.5 常見報錯
系統目錄未建立,報錯: ORA-39002: invalid operation ORA-39070: Unable to open the log file. ORA-29283: invalid file operation ORA-06512: at "SYS.UTL_FILE", line 536 ORA-29283: invalid file operation impdp導入exp導出的dmp文件,報錯: ORA-39000: bad dump file specification ORA-39143: dump file "/orabak/pams_20190101.dmp" may be an original export dump file 如果導出的數據庫版本比導入的數據版本高,需要在導出時加上參數version=要導入的數據庫版本。否則報錯: ORA-39001: invalid argument value ORA-39000: bad dump file specification ORA-31640: unable to open dump file "/orabak/pams_20190101.dmp" for read ORA-27037: unable to obtain file status |
到此,關于“Oracle數據泵技術常用操作有哪些”的學習就結束了,希望能夠解決大家的疑惑。理論與實踐的搭配能更好的幫助大家學習,快去試試吧!若想繼續學習更多相關知識,請繼續關注億速云網站,小編會繼續努力為大家帶來更多實用的文章!
免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。