12c 資料泵常用功能總結
一. 保持伺服器端環境變數和資料庫字符集一致
SYS@cdb >select userenv('language') from dual;
USERENV('LANGUAGE')
----------------------------------------------------
AMERICAN_AMERICA.AL32UTF8
[oracle@snow ~]$ echo $LANG
en_US.UTF-8
如果需要調整環境變數可以使用下面的命令
[oracle@snow ~]$ export LANG=AMERICAN_AMERICA.AL32UTF8
二. 建立作業的準備工作
1, 目錄
儘量不要使用ORACLE_HOME掛載點,防止匯出檔案過大導致掛載點空間不足使資料庫掛起。
create or replace dp_dir as ‘/oradump’;
select owner,directory_name,directory_path from dba_directories;
grant read,write on directory dp_dir to dp
2, pdb所需環境
1,登入cdb,檢視pdb。如果此時pdb1是mount狀態可以切換到pdb1下執行alter database open命令和普通資料庫一樣。或者使用alter pluggable database all open開啟所有的pdb。
SYS@cdb >show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 PDB1 READ WRITE NO
2,切換到pdb1
SYS@cdb >alter session set container=pdb1;
3,單獨建立一個dba許可權的資料泵使用者
SYS@cdb >grant dba to dp identified by dp;
4,建立一個資料泵目錄dp_dir,路徑為oracle家目錄
SYS@cdb >create or replace directory dp_dir as '/home/oracle';
5,設定tnsnames.ora,增加pdb1的連結。HOST按照自己主機的地址新增,SERVICE_NAME為pdb的示例名,這裡為pdb1
[oracle@snow ~]$ cd $ORACLE_HOME/network/admin
[oracle@snow admin]$ cat tnsnames.ora
pdb1=
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.228.12)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = pdb1)
)
)
呼叫方法為:expdp dp/dp@pdb1 directory=dp_dir dumpfile=hr_pdb1.dmp logfile=hr_pdb1.log schemas=hr
三. 引數檔案的使用
某些資料泵命令含有引號,比如ogg表級別同步時經常用到的FLASHBACK_TIME或者使用sys使用者的/as sysdba字據。當命令中含有引號時,最好使用引數檔案。
[oracle@snow ~]$ vi hrexp.par
userid="/ as sysdba"
directory=dp_dir
dumpfile=hr.dmp
logfile=hr.log
schemas=hr
$ expdp parfile=hrexp.par
四. OGG表級初始化需要注意的一致性問題
1, 取得當前的scn
SYS@ora12c >select current_scn from v$database;
CURRENT_SCN
-----------
2096937
2,使用FLASHBACK_SCN引數一致性匯出資料
由於語句比較長,在employees 後面採用了換行符號\,注意employee與\之間有空格。下一行的>是回車後自動生成的,表示後面的內容和前面的是一行的。
[oracle@snow ~]$ expdp dp/dp directory=dp_dir dumpfile=20150226.dmp tables=hr.employees \
> flashback_scn=2096937
3,使用FLASHBACK_TIME引數一致性匯出資料
在這裡建議使用引數檔案的方式,這樣會省去很多轉移符
[oracle@snow ~]$ vi flashback.par
userid=dp/dp
directory=dp_dir
dumpfile=20150226_1.dmp
logfile=20150226_1.log
tables=hr.employees
flashback_time="to_timestamp('2015-02-09 16:00:00','yyyy-mm-dd hh24:mi:ss')"
[oracle@snow ~]$ expdp parfile=flashback.par
五. 匯出資料庫後設資料
[oracle@snow ~]$ expdp dp/dp@pdb1 directory=dp_dir dumpfile=tbs.dmp full=y include=tablespace content=metadata_only
[oracle@snow ~]$ impdp dp/dp@pdb1 directory=dp_dir dumpfile=tbs.dmp sqlfile=tbs.sql content=metadata_only
如果expdp中include=table,在到處作業時資料泵會匯出所有相關依存物件,比如與表相關的index,constrain,triggerexpdp dp/dp@pdb1 directory=dp_dir dumpfile=tbs.dmp full=y include=table content=metadata_only
看看生成的sql語句全貌
[oracle@snow ~]$ more tbsp.sql
單個物件的提取DDL可以使用dbms_metadata.get_ddl
SYS@cdb >alter session set container=pdb1;
SYS@cdb >set long 9999
SYS@cdb >set pages 100
SYS@cdb >select dbms_metadata.get_ddl('TABLE','EMPLOYEES','HR') from dual;
六. include/exclude
include: 我們只需要的內容
include=tablespace:只對表空間作業,其它的表、索引、統計資訊等等都不關心。
exclude: 我們不想要的內容
exclude=index: 作業中不包含index,其它的都保留。
七. remap異構複製
有時候需要將使用者及其物件和資料移動到其他資料庫時候,可能會需要重新命名。這時候可以採用資料泵中remap_schema引數來處理。
匯出schema為HR的所有內容
[oracle@snow ~]$ expdp dp/dp directory=dp_dir dumpfile=hr.dmp logfile=hr.log schemas=hr
匯入schema為HR的所有內容,並且重名為hr_new。 如果此時資料庫中沒有hr_new使用者,資料泵會自動建立。
[oracle@snow ~]$ impdp dp/dp directory=dp_dir dumpfile=hr.dmp remap_schema=hr:hr_new
如果只需要後設資料,並不需要資料可以使用content=metadata_only引數來實現
[oracle@snow ~]$ impdp dp/dp directory=dp_dir dumpfile=hr.dmp remap_schema=hr:hr_new_2 content=metadata_only
八. 估算作業大小
使用estimate_only=y來計算匯出檔案的大小。這裡可以估算全庫full=y,可以估算schemas,也可以估算某些表
[oracle@snow ~]$ expdp dp/dp estimate_only=y full=y logfile=n
九. 匯出檔案已經存在、匯入物件已經存在
[oracle@snow ~]$ expdp dp/dp@pdb1 directory=dp_dir dumpfile=full_pdb1.dmp logfile=full_pdb1.log full=y reuse_dumpfiles=y
[oracle@snow ~]$ vi tables_imp.par
userid=dp/dp
directory=dp_dir
dumpfile=tables.dmp
logfile=tables.log
tables=
HR.REGIONS,
HR.LOCATIONS,
SH.PROMOTIONS,
SH.CUSTOMERS,
SH.COUNTRIES
table_exists_action=replace
十. 關於效能最佳化的幾個用法
1. 並行
[oracle@snow ~]$ expdp dp/dp@pdb1 directory=dp_dir dumpfile=full_%U.dmp parallel=2 logfile=full.log full=y reuse_dumpfiles=y
Oracle建議並行度不要大於伺服器上CPU數量的兩倍,這一點和rman的通道不同,rman的每一個通道基本上會耗盡一顆cpu(啟用壓縮)。
2. 壓縮
[oracle@snow ~]$ expdp dp/dp@pdb1 directory=dp_dir dumpfile=hr_cb.dmp logfile=hr.log schemas=hr reuse_dumpfiles=y compression=all compression_algorithm=basic
壓縮比例分為:BASIC , LOW , MEDIUM, HIGH
下面的測試分別將各種壓縮引數執行了一遍,對比一下結果發現即使最小壓縮low也能節省將近50%的空間!
[oracle@snow ~]$ du -sh hr*
196K hr_ch.dmp
220K hr_cm.dmp
240K hr_cb.dmp
240K hr_c.dmp
280K hr_cl.dmp
568K hr.dmp
十一. 空間不足的救命稻草
如果在expdp匯出時候目錄空間不夠了可以進入互動模式,向其它目錄空間追加資料泵檔案
[oracle@snow ~]$ expdp dp/dp@pdb1 directory=dp_dir dumpfile=full_%U.dmp parallel=2 logfile=full.log full=y reuse_dumpfiles=y
...
...
Ctrl+c進入互動模式
Export> add_file=:data.dmp
十二. 12c新特性
1. 將檢視匯出為表
$ expdp dp/dp@pdb1 directory=dp_dir dumpfile=vm.dmp views_as_tables=sales_rockies
$ impdp dp/dp@pdb1 directory=dp_dir dumpfile=vm.dmp tables=sales_rockies
2. 匯入資料時開啟transform=disable_archive_logging:Y 避免生成redo日誌
[oracle@snow ~]$ impdp dp/dp directory=dp_dir dumpfile=hrc.dmp \
> transform=disable_archive_logging:Y
十三. 監控資料泵執行狀態
開啟兩個並行通道匯出全庫資料
[oracle@snow ~]$ expdp dp/dp@pdb1 directory=dp_dir dumpfile=full_%U.dmp parallel=2 logfile=full.log full=y reuse_dumpfiles=y
1. 在sqlplus中透過檢視監控
[oracle@snow ~]$ sqlplus / as sysdba
col owner_name for a10
col opration for a10
col job_name for a20
col state for a10
col operation for a20
正在執行的job名稱
SYS@cdb >select owner_name,operation,job_name,state from dba_datapump_jobs;
OWNER_NAME OPERATION JOB_NAME STATE
---------- -------------------- -------------------- ----------
DP EXPORT SYS_EXPORT_FULL_03 EXECUTING
col usernmae for a10
col process for a10
set line 120
正在執行的job sid,serial#
SYS@cdb >select sid,serial#,username,process,program from v$session s,dba_datapump_sessions d where s.saddr=d.saddr;
SID SERIAL# USERNAME PROCESS PROGRAM
---------- ---------- ------------------------------ ---------- ------------------------------------------------
272 1079 DP 85198 ude@snow.oracle.com (TNS V1-V3)
254 2395 DP 85204 oracle@snow.oracle.com (DM00)
30 339 DP 85206 oracle@snow.oracle.com (DW00)
21 1657 DP 85208 oracle@snow.oracle.com (DW01)
2. OS程式,ora_dmNN為主程式,ora_dwNN為工程式,多個並行就會有相對應的工程式
[oracle@snow ~]$ ps -ef | egrep 'ora_dm|ora_dw' | grep -v egrep
oracle 6326 1 7 01:09 ? 00:00:01 ora_dm00_cdb
oracle 6328 1 89 01:09 ? 00:00:22 ora_dw00_cdb
oracle 6330 1 93 01:09 ? 00:00:17 ora_dw01_cdb
3. 追蹤警告日誌
[oracle@snow trace]$ tail -200f alert_cdb.log
…
Mon Feb 09 20:09:17 2015
DM00 started with pid=53, OS id=85204, job DP.SYS_EXPORT_FULL_03
Mon Feb 09 20:09:18 2015
DW00 started with pid=56, OS id=85206, wid=1, job DP.SYS_EXPORT_FULL_03
Mon Feb 09 20:09:21 2015
Thread 1 cannot allocate new log, sequence 28
Private strand flush not complete
Current log# 3 seq# 27 mem# 0: /u01/app/oracle/oradata/cdb/redo03.log
Mon Feb 09 20:09:23 2015
DW01 started with pid=64, OS id=85208, wid=2, job DP.SYS_EXPORT_FULL_03
Mon Feb 09 20:09:24 2015
Thread 1 advanced to log sequence 28 (LGWR switch)
Current log# 1 seq# 28 mem# 0: /u01/app/oracle/oradata/cdb/redo01.log
Mon Feb 09 20:09:24 2015
Archived Log entry 16 added for thread 1 sequence 27 ID 0x767a0947 dest 1:
十四. 後臺執行安全第一
資料泵作業、rman作業都是比較耗時的工作,而且依賴執行命令的視窗。如果視窗被關閉,作業很可能就掛掉了,所以最好使用後臺執行方式,並且透過tail日誌來跟蹤輸出。當然這樣做就不能使用互動方式來中斷資料泵了。
後臺執行方式
nohup expdp \'/ as sysdba\' directory=dp_dir dumpfile=para_%u.dmp parallel=5 schemas=scott; &
資料泵是DBA經常使用的一個工具,總結一下記錄下來以備不時之需。
全文完!
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29047826/viewspace-1443034/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 【12C】Oracle 12c 可插拔資料庫之資料泵功能體驗Oracle資料庫
- 使用Oracle資料泵問題總結Oracle
- 12c 使用資料泵複製資料庫結構的注意事項資料庫
- 12c 資料泵克隆使用者
- 12c 資料泵傳輸表空間
- Oracle 12C 資料泵新特性測試Oracle
- 12c 資料泵命令列互動模式命令列模式
- 12c 資料泵匯入匯出級別
- Oracle 資料庫12c新特性總結(一)Oracle資料庫
- Oracle 資料庫12c 16大新特性總結Oracle資料庫
- 12c 資料泵一致性匯出
- Oracle10g 資料泵匯出命令impdp 使用總結Oracle
- Oracle10g 資料泵匯出命令 expdp 使用總結Oracle
- 資料分析-pandas資料處理清洗常用總結
- Java刷題常用的資料結構總結Java資料結構
- 史上最全Oracle資料泵常用命令Oracle
- Oracle 資料庫12c 16大新特性總結(轉)Oracle資料庫
- 12C RAC 常用檢查命令,持續總結中
- oracle10g 常用資料字典總結Oracle
- 資料泵
- python實現oracle資料泵匯出功能PythonOracle
- 11gr2資料泵REMAP_TABLE功能REM
- Oracle 12C新特性-資料泵新引數(LOGTIME)Oracle
- Oracle 12C新特性-資料泵新引數(VIEWS_AS_TABLES)OracleView
- 12c pdb的資料泵匯入匯出簡單示例
- 運維中資料泵匯出常用的細節小功能兩例運維
- 使用 Oracle 資料庫 10g 資料泵重新啟動功能Oracle資料庫
- Oracle 常用資料字典表、檢視的總結Oracle
- oracle10g 常用資料字典總結 (zt)Oracle
- Oracle 常用資料字典檢視、表的總結Oracle
- LLM大模型: 常用的資料清洗方法總結大模型
- 12c 資料泵作業啟動後相關程式和表
- 分享運維中資料泵匯出常用的細節小功能兩例運維
- Oracle中的資料字典技術及常用資料字典總結Oracle
- ORACLE 資料泵Oracle
- oracle資料泵Oracle
- 12c 資料庫管理 小結資料庫
- 利用資料泵匯出查詢結果(二)