DBMS_REDEFINITION。START_REDEF_TABLE ora - 42008 ora - 22060报错的处理

  

  数据库环境为:rhel6.8 64位oracle 11.2.0.3.11   

  

  
  

  

  凌晨1点起的床,执行计划内的数据库操作。将几个大表在线重定义为分区表,以便于空间释放。在执行CAN_REDEF_TABLE是正常,但是在执行START_REDEF_TABLE时报错了,错误信息如下:   

  

  ora - 42008:实例化重新定义时出的错   
  ora - 22060:参数[]是一个无效或未初始化的数的值   
  ora - 06512:在“SYS.DBMS_SNAPSHOT_UTL", 1613行   
  ora - 06512:在1号线   
  ora - 06512:在“SYS.DBMS_REDEFINITION"、线56   
  ora - 06512:在“SYS.DBMS_REDEFINITION", 1490行   
  ora - 06512:在第2行   

  

  
  

  

  当时第一反应是难道表有问题,以前遇到过表上注释太长导致重定义报错的错误。我换了个表再次执行这些操作,在START_REDEF_TABLE时还是报错了。   

  

  
  

  

  没法了,情况紧急,先去百度搜索了一番,又去谷歌搜索了一番,金属氧化物半导体也找了,毛都没找到一根,,单独的ora - 42008, ora - 22060这两个错误多,但是连在一起的时候几乎没有。   

  

  
  

  

  不过网上搜索还是有点收获,借鉴了别人的排查错误的方法。有人用10046来跟踪会话来发现报的错,我也采用试试。   

  

  
  

  

  不过情况有变,别人的都是有明确的报错信息,但是在我10046年的报告里面没有……没办法了,我根据这个报错信息ora - 06512:   在“SYS.DBMS_SNAPSHOT_UTL"线   1613年在10046年去查找,找是哪儿执行了DBMS_SNAPSHOT_UTL。最后找到了这个地方sys.dbms_snapshot_utl.get_log_name,我将这个存储过程的参数补全,测试了下,报错就是ora - 22060,到此可以确定是DBMS_SNAPSHOT_UTL的问题了。但是在系统中没有看到任何失效对象,所以在数据库内部的这个包本身是没问题的。   

  

  
  

  

  最后的解决方法是经验,这个库以前遇到过dbms_stats运行报错的情况,说一个bug补丁不存在,http://blog.itpub.net/29822273/viewspace-2139924/5笔辈楣鹗粞趸锇氲继?说是因为数据库中的包与实际程序不匹配,比如打补丁后没有运行catbundle   事业单位   申请,因为这个库是从windows平台迁移至linux平台的,两个平台当时没有完全匹配的小版本,所以只能找了一个与windows版本最接近的linux版本来作为迁移的目标版本。然后升级完了也没运行catbundle   事业单位申请。   

  

  
  

  

  由此想到的办法是重新安装这个包,甲骨文的安装某些包是有特定步骤的,我怕踩雷,到处搜索了一番,还是没找到重建dbms_snapshot_utl的方法。最后,时间越来越到约定的3点锁表时间了,心一横,直接用grep方法在管理里面去找,发现了两个脚本:   

  

  prvtsnap。拉钮:创建或替换包身体dbms_snapshot_utl包装   
  prvtsnps。拉钮:创建或替换包dbms_snapshot_utl包装   
  

  

  一个是包,一个是包体。注意要先运行包脚本,再运行身体脚本,否者会报的错。   

  

  执行完了,在线重定义操作未报错了。   

  

  
  

  

  定于凌晨1点执行的在线重定义普通表为分区表的操作,一直延迟到了凌晨3点才正式开始……   

  

  
  

  

  最后闲下来还是在金属氧化物半导体找到了一篇相关文章,之前死活找不到…搜索还是一门技艺…   

  

  
  

  

           到下               
               DBMS_REDEFINITION。START_REDEF_TABLE ora - 42008 ora - 22060报错的处理               

  
  

  

   DBMS_REDEFINITION。START_REDEF_TABLE ora - 42008 ora - 22060报错的处理   

  

   DBMS_REDEFINITION。START_REDEF_TABLE ora - 42008 ora - 22060报错的处理   

              
        错误的属性         
              

DBMS_REDEFINITION。START_REDEF_TABLE ora - 42008 ora - 22060报错的处理