expdp導出時報錯ora-16000

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方式進行數據導出。

相關文章
相關標籤/搜索