将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 创建的导出文件
解决办法,就是在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;