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方式进行数据导出。

相关文章
相关标签/搜索