暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

报错ORA-31693 ORA-02354 ORA-01555 ORA-22924

晟数学院 2021-04-16
2185

点击“蓝字”关注我们


在使用expdp导出的时候报错:

此时的导出是按用户导出,只有其中一张表有此报错并导出失败,其他均正常导出,所以当时就怀疑是否有LOB字段导致。


一般从这么几个方面进行分析:


  • undo表空间使用率是否过高

  • undo_retention是否设置过小

  • 表中是否有LOB字段,看一下表结构(desc table_name)


一、首先查询一下数据库undo表空间是否快被占满

    #查看数据库表空间使用情况:
    set linesize 160
    set pagesize 9999
    column tablespace_name format a20
    select tablespace_name, count(*) fnt, round(sum(bytes)/1024/1024) size_mb, round(sum(maxbytes)/1024/1024) max_size_mb from dba_data_files group by tablespace_name;

    但是查询结果显示undo表空间利用率并不高。


    二、查询undo_retention

      #查询数据库中undo_retention大小:
      SQL> show parameter undo;


      NAME TYPE VALUE
      ------------------------------------ ----------- ------------------------------
      undo_management string AUTO
      undo_retention integer 86400
      undo_tablespace string UNDOTBS2


      #检查undo中最长查询时间:
      SQL> select max(maxquerylen) from v$undostat;


      MAX(MAXQUERYLEN)
      ----------------
      26000


      #按表查询retention:
      SQL> select retention from dba_lobs where owner='<SCHEMA_NAME>' and table_name='<TABLE_NAME>';


      RETENTION
      ----------
      86400
      #我这个库里面查询的结果显示retention值已经大于了undo最大查询时间,但是还是有问题报错,
      #于是将retention参数在改大一点进行尝试


      三、修改undo_retention与LOB字段保留参数

        1、修改undo_retention:
        SQL> ALTER SYSTEM SET UNDO_RETENTION = 186400 scope=both sid='*';


        2、修改LOB retention,使其大于“过小保留”参数
        #LOB字段有自己的retention,虽然已经全局修改了undo_retention但是LOB字段还是更改单独设置
        SQL> alter table <SCHEMA_NAME>.<TABLE_NAME> modify lob(<LOB_COLUMN_NAME>) (pctversion 5);


        SQL> alter table <SCHEMA_NAME>.<TABLE_NAME> modify lob(<LOB_COLUMN_NAME>) (retention);


        3、修改后再次查询lob保留,以验证更改已经生效:
        SQL> select retention from dba_lobs where owner='<SCHEMA_NAME>' and table_name='<TABLE_NAME>';


        RETENTION
        ----------
        186400


        问题解决,执行导出,又有了新的报错:

        ORA-02354,ORA-01466,ORA-31693


        因为之前对表中LOB字段进行了操作(DDL操作),就相当于改变了表结构,所以这时候还用之前获取数据库的scn号已经失效,需要重新获取。

          #获取数据库scn,下边的是查询数据库长事务的scn号,一般那个小用哪个
          set linesize 200
          col current_scn for 99999999999999999999
          col start_scn for 99999999999999999999


          select 'exp_scn' item, current_scn ||' scn' value from v$database
          union all
          select 'Min_start_scn' item,min(start_scn)||' scn' value from gv$transaction;


          再次执行expdp导出命令即可正常运行数据泵导出数据。

            #查看数据泵任务状态详情的信息(job_name为你编辑导出文件脚本中,job_name的名字)
            expdp \'/ as sysdba\'  attach=job_name


            至此结束,有什么问题欢迎结束。

            详情参阅官方文档ID 1507116.1


            推荐阅读

            Greenplum数据同步方案

            2021-04-13

            控制文件删除恢复实验

            2021-04-18

            点击“阅读原文”

            文章转载自晟数学院,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

            评论