故障解决:oracle10g 数据库复制同步
呵呵。oracle我是个菜鸟,没花功夫研究它,但我还是兼任dba,目前oracle全部是由以前的dba创建的,oracle确实好。基本没有出过问题,我也就基本不管它了,可是由于自己粗心大意,在一次修改服务器地址时候,数据库里的tns...这个配置文件忘了修改,结果导致同步失败,等我发现的时候,发现已经失效,结果我花了2天时间,才得以解决。。。
先说说问题的发现
我有2台服务器,分别放置于不同机房,系统都为linux,数据库都为oracle10g,俩台数据库之间定时同步数据,有一次我更改了一台服务器地址,后来发现oracle同步出现故障,故障为broken 的值为Y,FAILURES=16,经过google ,说是broken =Y,FAILURES=16就是表示此job 失效,就是不再执行。
故障解决:
经过了无数次的google。。。。。我解决过程如下:
首先用oracle帐号登陆进数据库
sqlplus / as sysdba
然后查询dba_jobs情况
select job,next_date,next_sec,failures,broken from dba_jobs;
于是我运行
execute dbms.job.run(这里是停止了的job-id号)
发现无法运行。
这时发现failures 为16 , broken 为 Y
经过google,job如果由于某种原因未能成功之行,oracle将重试16次后,还未能成功执行,将被标记broken为Y(说明此工作将标记为破,而FLASE说明此工作将标记为未破)
现在看来这个job为破了,那就先将它改为未破
execute dbms.job_broken(id号,false,next_date);
说明一下:
id号:是停止了job所标示的唯一号
false:表示将broken 设置为false,意思就是未破啦
next_date:表示下一次此job运行的时间。
运行以上命令后,发现提示一下:
提示错误如下:
ORA-23421: job number 109 is not a job in the job queue
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 86
ORA-06512: at "SYS.DBMS_IJOB", line 529
ORA-06512: at "SYS.DBMS_JOB", line 258
ORA-06512: at line 2
通过查询,才明白,如果你是以sys登录数据库的话,如果运行其他用户的job,必须使用SYS.DBMS_IJOB,如果是当前用户登录运行当前用户的job,就用SYS.DBMS_JOB,这我才明白。重新输入上述代码::
execute sys.dbms_ijob.broken(id号,false,next_date);
输入后完成,显示成功
然后提交 commit;
这时在查询job表的broken,发现那个为破的job,现在以改为未破 N。
接下来在运行execute dbms_ijob.run(id)
发现自动停止,在察看又发现broken 又变为