一段正常的sql,在执行中,是像下图那样,在管理工具里有长时间操作分页的
可是我这段sql,却始终如下图:好像一直在等待,也不执行,几个小时后,就抛出ORA-1555的错误了。
怎样才能让它开始执行呢?请大家帮忙!

解决方案 »

  1.   

    优化sql语句,或者加大 undo 表空间,或者加大 retention 的时间长度
      

  2.   

    ora-1555的根本原因,多数是你的sql执行太慢导致。
    在你这里估计是insert into ....select 中的select时间太长导致。
      

  3.   

    分段commit;
    释放系统资源跟undo表空间;
    我之前也遇到过大量的insert导致死锁。
    分时间段或其他分段commit;就可以了。
      

  4.   

    分段commit;
    释放系统资源跟undo表空间;
    我之前也遇到过大量的insert导致死锁。
    分时间段或其他分段commit;就可以了。
      

  5.   

    那我就把sql贴出来:
    Insert /*+append*/ into T_ZS_YZMX select /*+all_rows*/ PZ_XH,                  
               YZMX_XH,                
               NSRNBM,                 
               SFSSQ_QSRQ,             
               SFSSQ_ZZRQ,             
               JK_QX,                  
               ZSXM_DM,                
               ZSPM_DM,                
               YZFS_RQ,                
               YZSF_JE,                
               YSFPBL_DM,              
               SKSX1_DM,               
               SKSX2_DM,               
               TZLX_DM,                
               ZCLX_DM,                
               HY_DM,                  
               ZF_BJ,                  
               YKP_BJ,                 
               GLJG_DM,                
               JCJG_DM,                
               LR_SJ,                  
               NVL(XG_SJ, LR_SJ) XG_SJ, 
               JS_YJ,                  
               SL                
        from T_ZS_YZMX@DBL_DJZ
       where gljg_dm like '24401%'
         and 1 = 1 
         and NVL(XG_SJ, LR_SJ)>=date'2007-1-1'
         and NVL(XG_SJ, LR_SJ)<date'2007-6-1'  and NVL(XG_SJ, LR_SJ)<=TO_DATE('2008-11-03 10:22:17','YYYY-MM-DD HH24:MI:SS')
    就这一段sql,无法分段commit了,而且 undotbs 加到了100G,retention 数值为10800 也没有等待传入的参数。
      

  6.   

    可以按时间分段插入啊 分一个月一个月或者更少的插入
    .....and NVL(XG_SJ, LR_SJ) <date'2007-6-1'  and NVL(XG_SJ, LR_SJ) <=TO_DATE('2007-07-01 10:22:17','YYYY-MM-DD HH24:MI:SS') ;
    commit;
    .....and NVL(XG_SJ, LR_SJ) <date'2007-07-1'  and NVL(XG_SJ, LR_SJ) <=TO_DATE('2007-07-01 10:22:17','YYYY-MM-DD HH24:MI:SS') ;
    commit;
    .....and NVL(XG_SJ, LR_SJ) <date'2007-08-1'  and NVL(XG_SJ, LR_SJ) <=TO_DATE('2007-09-01 10:22:17','YYYY-MM-DD HH24:MI:SS') ;
    commit;
    ........
      

  7.   

    上面的举个例子。你的语句需要很好的优化阿。其次再把时间段分段写多个sql每段执行后commit;
      

  8.   

    创建index后试试:
    CREATE INDEX i_test1 ON T_ZS_YZMX(NVL(XG_SJ, LR_SJ),GLJG_DM) NOLOGGING;
      

  9.   

    数据库是archive模式?
    表T_ZS_YZMX设了nologging了吗?sql>alter table T_ZS_YZMX nologging;
      

  10.   

    创建索引对insert没有好处吧,远程的T_ZS_YZMX表是不能动的。
      

  11.   


    --将所有nvl处的都改了一下:Insert /*+append*/
    into T_ZS_YZMX
      select /*+all_rows*/
       PZ_XH,
       YZMX_XH,
       NSRNBM,
       SFSSQ_QSRQ,
       SFSSQ_ZZRQ,
       JK_QX,
       ZSXM_DM,
       ZSPM_DM,
       YZFS_RQ,
       YZSF_JE,
       YSFPBL_DM,
       SKSX1_DM,
       SKSX2_DM,
       TZLX_DM,
       ZCLX_DM,
       HY_DM,
       ZF_BJ,
       YKP_BJ,
       GLJG_DM,
       JCJG_DM,
       LR_SJ,
       NVL(XG_SJ, LR_SJ) XG_SJ,
       JS_YJ,
       SL
        from T_ZS_YZMX@DBL_DJZ
       where gljg_dm like '24401%'
         and 1 = 1
         and NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')) >= '2007-01-01'
         and NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')) < '2007-01-01'
       NVL(to_char(XG_SJ, 'yyyy-mm-dd HH24:MI:SS'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-ddHH24:MI:SS'), '00-00-00 00:00:00')) <=
             '2008-11-03 10:22:17';
      

  12.   


    --将所有nvl处的都改了一下:Insert /*+append*/
    into T_ZS_YZMX
      select /*+all_rows*/
       PZ_XH,
       YZMX_XH,
       NSRNBM,
       SFSSQ_QSRQ,
       SFSSQ_ZZRQ,
       JK_QX,
       ZSXM_DM,
       ZSPM_DM,
       YZFS_RQ,
       YZSF_JE,
       YSFPBL_DM,
       SKSX1_DM,
       SKSX2_DM,
       TZLX_DM,
       ZCLX_DM,
       HY_DM,
       ZF_BJ,
       YKP_BJ,
       GLJG_DM,
       JCJG_DM,
       LR_SJ,
       NVL(XG_SJ, LR_SJ) XG_SJ,
       JS_YJ,
       SL
        from T_ZS_YZMX@DBL_DJZ
       where gljg_dm like '24401%'
         and 1 = 1
         and NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')) >= '2007-01-01'
         and NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')) < '2007-06-01'
       NVL(to_char(XG_SJ, 'yyyy-mm-dd HH24:MI:SS'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-ddHH24:MI:SS'), '00-00-00 00:00:00')) <=
             '2008-11-03 10:22:17';
      

  13.   


    --对不起,还是漏改了一处nvl,再试一下:Insert /*+append*/
    into T_ZS_YZMX
      select /*+all_rows*/
       PZ_XH,
       YZMX_XH,
       NSRNBM,
       SFSSQ_QSRQ,
       SFSSQ_ZZRQ,
       JK_QX,
       ZSXM_DM,
       ZSPM_DM,
       YZFS_RQ,
       YZSF_JE,
       YSFPBL_DM,
       SKSX1_DM,
       SKSX2_DM,
       TZLX_DM,
       ZCLX_DM,
       HY_DM,
       ZF_BJ,
       YKP_BJ,
       GLJG_DM,
       JCJG_DM,
       LR_SJ,
       NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
           nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')),
       JS_YJ,
       SL
        from T_ZS_YZMX@DBL_DJZ
       where gljg_dm like '24401%'
         and 1 = 1
         and NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')) >= '2007-01-01'
         and NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')) < '2007-06-01'
       NVL(to_char(XG_SJ, 'yyyy-mm-dd HH24:MI:SS'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-ddHH24:MI:SS'), '00-00-00 00:00:00')) <=
             '2008-11-03 10:22:17';
      

  14.   


    --最后定稿:Insert /*+append*/
    into T_ZS_YZMX
      select /*+all_rows*/
       PZ_XH,
       YZMX_XH,
       NSRNBM,
       SFSSQ_QSRQ,
       SFSSQ_ZZRQ,
       JK_QX,
       ZSXM_DM,
       ZSPM_DM,
       YZFS_RQ,
       YZSF_JE,
       YSFPBL_DM,
       SKSX1_DM,
       SKSX2_DM,
       TZLX_DM,
       ZCLX_DM,
       HY_DM,
       ZF_BJ,
       YKP_BJ,
       GLJG_DM,
       JCJG_DM,
       LR_SJ,
       NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
           nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')),
       JS_YJ,
       SL
        from T_ZS_YZMX@DBL_DJZ
       where gljg_dm like '24401%'
         and 1 = 1
         and NVL(to_char(XG_SJ, 'yyyy-mm-dd'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-dd'), '00-00-00')) >= '2007-01-01'
         and NVL(to_char(XG_SJ, 'yyyy-mm-dd HH24:MI:SS'),
                 nvl(to_char(LR_SJ, 'yyyy-mm-ddHH24:MI:SS'), '00-00-00 00:00:00')) <=
             '2008-11-03 10:22:17';