imp导入时出现imp-00017 ora-06550的解决办法


将exp逻辑备份文件导入到备库中时出现了错误,相关错误信息如下:
  1. IMP-00017: 由于 Oracle 错误 6550, 以下语句失败:  
  2.  "DECLARE  SREC DBMS_STATS.STATREC; BEGIN SREC.MINVAL := '00730068006F0075006"  
  3.  "C0075'; SREC.MAXVAL := '9F9A00200020514B'; SREC.EAVS := 4; SREC.CHVALS := D"  
  4.  "BMS_STATS.CHARARRAY(utl_raw.cast_to_varchar2('00730068006F0075006C0075'),'N"  
  5.  "fS[',utl_raw.cast_to_varchar2('4E5400200020664B'),utl_raw.cast_to_varchar2"  
  6.  "('4ED8002000204FCA'),'N貍*',utl_raw.cast_to_varchar2('4EFB002000205170'),'N"  
  7.  "鸒','O  
  8. ……  
  9. IMP-00003: 遇到 ORACLE 错误 6550  
  10. ORA-06550: 第 1 行, 第 4836 列:   
  11. PLS-00103: 出现符号 "朒ag?"在需要下列之一时:  
  12.  ( - + case mod new not  
  13.    null others <an identifier>  
  14.    <a double-quoted delimited-identifier> <a bind variable> avg  
  15.    count current exists max min prior sql stddev sum variance  
  16.    execute forall merge time timestamp interval date  
  17.    <a string literal with character set specification>  
  18.    <a number> <a single-quoted SQL string> pipe  
  19.    <一个带有字符集说明的可带引号的字符串文字>  
  20.    <一个可带引号的 SQL 字符串>  

    这是个很常见的导入警告,通常与数据库/客户端版本有关。比如这里,源数据库和目标数据库版本都是10.2.0.4,但导出的时候使用了10.2.0.1的客户端:

  1. 连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production  
  2. With the Partitioning, Real Application Clusters, OLAP, Data Mining  
  3. and Real Application Testing options  
  4.   
  5.   
  6. 经由常规路径由 EXPORT:V10.02.01 创建的导出文件  
    在别的项目中,还遇到过从10.2.0.2数据库中导入到10.2.0.4目标库时出现了同样的问题,不管imp/exp使用了什么版本。


    解决办法,就是在exp或imp时加上一个参数来禁用统计信息的导出/导入:  statistics=none    

    那么,不导入统计信息会有什么影响呢。其实在oracle 10g以后,默认定时采集统计信息,可以在dba_scheduler_jobs视图中查询到该任务:GATHER_STATS_JOB。并且可以在dba_scheduler_job_run_details中看到相应的执行情况。

    手动采集统计信息:在sys用户中执行dbms_scheduler.run_job('GATHER_STATS_JOB') 存储过程(等价于执行dbms_stats.gather_database_stats_job_proc);使用dbms_stats包中的gather_xxx_stats来采集。停用定时采集统计信息的任务:DBMS_SCHEDULER.DISABLE('GATHER_STATS_JOB')

    oracle 10g中修改自动采集统计信息的时间策略:通过sys用户登录执行存储过程dbms_scheduler.set_attribute来修改,例如

dbms_scheduler.set_attribute('GATHER_STATS_JOB','SCHEDULE_NAME','MAINTENANCE_WINDOW_GROUP') 

dbms_scheduler.set_attribute('WEEKEND_WINDOW','DURATION','+000 05:00:00')

查询:

  1. select d.window_name,d.repeat_interval,d.duration  
  2. from DBA_SCHEDULER_JOBS a,DBA_SCHEDULER_WINDOW_GROUPS b,DBA_SCHEDULER_WINGROUP_MEMBERS c,DBA_SCHEDULER_WINDOWS d  
  3. where a.job_name='GATHER_STATS_JOB'  
  4.   and a.schedule_name=b.window_group_name  
  5.   and b.window_group_name=c.window_group_name  
  6.   and c.window_name=d.window_name  
  7. union all  
  8. select d.window_name,d.repeat_interval,d.duration  
  9. from DBA_SCHEDULER_JOBS a,DBA_SCHEDULER_WINDOWS d  
  10. where a.job_name='GATHER_STATS_JOB'  
  11.   and a.schedule_name=d.window_name;  

相关内容