• expdp导出时报错ora-16000


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

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

    SQL> select OPEN_MODE from v$database;
    
    OPEN_MODE
    --------------------
    READ ONLY

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

    二、expdp研究

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

    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这个视图的详细信息,发现

    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

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

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

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

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

     

    四、建议

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

  • 相关阅读:
    nginx各版本全自动编译安装脚本
    kubernetes里面有时候centos源用不了
    centons6升级gcc和glibc版本
    容器下载的是centos8的镜像,scp出现packet_write_wait: Connection to **** port 22: Broken pipe 问题解决
    MNIST数据集手写体识别(MLP实现)
    BP 算法手动实现
    Python直接调用C库的printf()函数打印一条消息
    C/C++与Python实现混编(详细注释)
    MNIST数据集手写体数据还原为图片
    TensorFlow初识(MNIST数据集识别手写体)
  • 原文地址:https://www.cnblogs.com/penggepiaopiao/p/10743502.html
Copyright © 2020-2023  润新知