欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页  >  IT编程

expdp导出时报错ora-16000

程序员文章站 2022-06-06 21:59:02
一、问题现象:在对数据库进行expdp导出时发生报错ora-16000,脚本如下: 报错如下: 由上报错可知,数据库read—only,查看数据库状态: 果然,数据库是只读状态。 二、expdp研究 将数据库设置为读写状态,观察expdp 重新执行expdp导出脚本,观察执行情况 通过plsql查看 ......

一、问题现象:在对数据库进行expdp导出时发生报错ora-16000,脚本如下:

nohup expdp "'/ as sysdba'" schemas=shp directory=data_pump_dir dumpfile=shp1.dmp logfile=shp1.log &

expdp导出时报错ora-16000

报错如下:

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,查看数据库状态:

sql> select open_mode from v$database;

open_mode
--------------------
read only

expdp导出时报错ora-16000

果然,数据库是只读状态。

二、expdp研究

将数据库设置为读写状态,观察expdp

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

expdp导出时报错ora-16000

重新执行expdp导出脚本,观察执行情况

sql> select job_name,state from dba_datapump_jobs;

job_name               state
------------------------------ ------------------------------
sys_export_schema_01           executing

通过plsql查看dba_datapump_jobs这个视图的详细信息,发现

expdp导出时报错ora-16000

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_01

在导出数据的过程中可以看到其表结构(截取了部分列名称)

expdp导出时报错ora-16000

查看这张表的数据,发现这张表记录了字符集,路径,导出的对象,时间,并行度等信息

expdp导出时报错ora-16000

在导出结束后,这张表将会自动清除。

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

expdp导出时报错ora-16000

三、总结

在使用expdp导出数据时,系统会自动创建数据泵主表(data pump master table)并插入相关数据,如果数据库是只读模式,无法创建失败,无法导出数据。在expdp导出完毕后,系统会自动删除数据泵主表,注意此表默认表空间为system表空间,在数据量大并行度高的导出需要关注一下表空间使用情况。

 

四、建议

在对只读库进行数据导出的时候可以采用exp导出,或者使用expdp+network_link方式进行数据导出。


本文转载自文章:https://www.cnblogs.com/penggepiaopiao/p/10743502.html