某一天,ogg 抽取进程产生大量.dsc日志,很快就达到了2G的上限,抽取进程abended。
查看discard文件,发现显示信息如下:
Inconsistent row image for row in XXXX.table_name
record op = 135 timestamp = 2020-11-26 13:42:15.000000
Oracle ROWID=AAA35UAL3AA09I2AAB
.......
检查这个表正常,但不知道问什么会产生如此大量的告警信息,清空discard文件后,重新启动抽取进程。
到下午5点左右,突然监控告警该服务器oracle警告日志中爆发大量ORA-01555错误,检查告警信息如下:
ORA-01555 caused by SQL statement below (SQL ID: 415z3g9r6r1c7, Query Duration=0 sec, SCN: 0x0006.37709561): SELECT x."Q_NAME",x."MSGID",x."CORRID",x."PRIORITY",x."STATE"······
但此时抽取和投递进程并没有延迟。停掉抽取进程,该告警消失,一旦启动抽取进程,马上就会爆发该告警。
undo_retention 10800 相当于3个小时,undo表空间700G,也没有用满,怎么会出现01555错误?
检查原因是由于改变频繁的进行插入删除 操作,从快照中抽取的方式可能会导致找不到数据,oracle日志中显示1555错误,实际上没有去undo表空间中查询,
解决方法。
源端ogg抽取进程设置
--fetchoptions nousersnapshot
fetchoptions fetchpkupdatecols
discardfile ./dirrpt/xxxxx.dsc, append, megabytes 2048
discardrollover at 02:30
说明: 第一行,抽取信息不从快照中抽取。
第二行, 设定discard文件目录,追加方式,大小为2G
第三行, 每天2:30清空discard文件。
此时目标段复制进程也发生了abended, 同样是discard文件写满。告警信息如下:
Discard record on fetch result = INCONSISTENTROW [11]
(op: 135 table: 'XXXXXX.table' seqno: 6357
应该是源端抽取的信息,同步到目标段之后也同样的报出告警信息。
配置目标端复制进程配置文件:
REPRETCHEDCOLOPTIONS INCONSISTENTROW ignore
discardfile ./dirrpt/xxxxx.dsc, append, megabytes 2048
discardrollover at 02:30
说明: 第一行,复制的时候忽略INCONSISTENTROW信息
第二行, 设定discard文件目录,追加方式,大小为2G
第三行, 每天2:30清空discard文件。
源端配置文件如何设置?忽略该告警。oracle工程师说不影响抽取和复制,问题是大量的告警谁也受不了啊。