1、問題現象:在對數據庫進行expdp導出時發生報錯ora-16000,腳本以下:sql
nohup expdp "'/ as sysdba'" schemas=shp DIRECTORY=DATA_PUMP_DIR dumpfile=shp1.dmp logfile=shp1.log &
報錯以下:數據庫
ORA-31626: job does not exist ORA-31633: unable to create master table "SYS.SYS_EXPORT_SCHEMA_05" ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95 ORA-06512: at "SYS.KUPV$FT", line 1038 ORA-16000: database open for read-only access
由上報錯可知,數據庫read—only,查看數據庫狀態:oracle
SQL> select OPEN_MODE from v$database; OPEN_MODE -------------------- READ ONLY
果真,數據庫是隻讀狀態。spa
2、expdp研究3d
將數據庫設置爲讀寫狀態,觀察expdpcode
SQL> shutdown immediate SQL> startup mount SQL> alter database open read write;
從新執行expdp導出腳本,觀察執行狀況對象
SQL> select job_name,state from dba_datapump_jobs; JOB_NAME STATE ------------------------------ ------------------------------ SYS_EXPORT_SCHEMA_01 EXECUTING
經過plsql查看dba_datapump_jobs這個視圖的詳細信息,發現blog
SQL> col COMMENT$ for a50 SQL> select * from sys.com$ c WHERE SUBSTR (c.comment$, 1, 22) = 'Data Pump Master Table'; OBJ# COL# COMMENT$ ---------- ---------- -------------------------------------------------- 91600 Data Pump Master Table EXPORT SCHEMA
經過object_id找到對應的表,其實就是SYS.SYS_EXPORT_SCHEMA_01it
在導出數據的過程當中能夠看到其表結構(截取了部分列名稱)table
查看這張表的數據,發現這張表記錄了字符集,路徑,導出的對象,時間,並行度等信息
在導出結束後,這張表將會自動清除。
Master table "SYS"."SYS_EXPORT_SCHEMA_01" successfully loaded/unloaded ****************************************************************************** Dump file set for SYS.SYS_EXPORT_SCHEMA_01 is: /oracle/admin/orcl/dpdump/shp1.dmp Job "SYS"."SYS_EXPORT_SCHEMA_01" successfully completed at Sat Mar 16 03:14:49 2019 elapsed 0 00:00:18
3、總結
在使用expdp導出數據時,系統會自動建立數據泵主表(Data Pump Master Table)並插入相關數據,若是數據庫是隻讀模式,沒法建立失敗,沒法導出數據。在expdp導出完畢後,系統會自動刪除數據泵主表,注意此表默認表空間爲system表空間,在數據量大並行度高的導出須要關注一下表空間使用狀況。
4、建議
在對只讀庫進行數據導出的時候能夠採用exp導出,或者使用expdp+network_link方式進行數據導出。