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

时间:2020-12-08 07:46:12

    将exp逻辑备份文件导入到备库中时出现了错误,相关错误信息如下:

IMP-00017: 由于 ORACLE 错误 6550, 以下语句失败:
"DECLARE SREC DBMS_STATS.STATREC; BEGIN SREC.MINVAL := '00730068006F0075006"
"C0075'; SREC.MAXVAL := '9F9A00200020514B'; SREC.EAVS := 4; SREC.CHVALS := D"
"BMS_STATS.CHARARRAY(utl_raw.cast_to_varchar2('00730068006F0075006C0075'),'N"
"fS[',utl_raw.cast_to_varchar2('4E5400200020664B'),utl_raw.cast_to_varchar2"
"('4ED8002000204FCA'),'N貍*',utl_raw.cast_to_varchar2('4EFB002000205170'),'N"
"鸒','O
……
IMP-00003: 遇到 ORACLE 错误 6550
ORA-06550: 第 1 行, 第 4836 列:
PLS-00103: 出现符号 "朒ag?"在需要下列之一时:
( - + case mod new not
null others <an identifier>
<a double-quoted delimited-identifier> <a bind variable> avg
count current exists max min prior sql stddev sum variance
execute forall merge time timestamp interval date
<a string literal with character set specification>
<a number> <a single-quoted SQL string> pipe
<一个带有字符集说明的可带引号的字符串文字>
<一个可带引号的 SQL 字符串>


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

连接到: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options


经由常规路径由 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')


查询:

select d.window_name,d.repeat_interval,d.duration
from DBA_SCHEDULER_JOBS a,DBA_SCHEDULER_WINDOW_GROUPS b,DBA_SCHEDULER_WINGROUP_MEMBERS c,DBA_SCHEDULER_WINDOWS d
where a.job_name='GATHER_STATS_JOB'
and a.schedule_name=b.window_group_name
and b.window_group_name=c.window_group_name
and c.window_name=d.window_name
union all
select d.window_name,d.repeat_interval,d.duration
from DBA_SCHEDULER_JOBS a,DBA_SCHEDULER_WINDOWS d
where a.job_name='GATHER_STATS_JOB'
and a.schedule_name=d.window_name;