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研究code

  將數據庫設置爲讀寫狀態,觀察expdp對象

SQL> shutdown immediate
SQL> startup mount
SQL> alter database open read write;

從新執行expdp導出腳本,觀察執行狀況blog

SQL> select job_name,state from dba_datapump_jobs;

JOB_NAME               STATE
------------------------------ ------------------------------
SYS_EXPORT_SCHEMA_01           EXECUTING

經過plsql查看dba_datapump_jobs這個視圖的詳細信息,發現it

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_01table

在導出數據的過程當中能夠看到其表結構(截取了部分列名稱)ast

查看這張表的數據,發現這張表記錄了字符集,路徑,導出的對象,時間,並行度等信息

在導出結束後,這張表將會自動清除。

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

相關文章
相關標籤/搜索