最近遇见如下问题
【问题背景】备库抽数报错回滚记录版本太旧,涉及表为日志表(含有两个text列),主库undo_retention=90 备库undo_retention=3600,主库每分钟有这个表的写入(insert update),备机会话执行20min后触发回滚记录版本太旧
【问题描述】备机undo_retention=3600 下应该在1h后才报错,实际情况下备机会话执行20min后触发回滚记录版本太旧
经测试后,达梦主备环境中的备机不维护回滚记录,回滚记录由主机维护并同步到备机,因此主备集群中某个节点报错回滚记录版本太旧,undo_retention只能在主库进行修改
回滚相关视图在主备环境的查询结果对对比
其中备机的回滚表空间的大小于主机的大小保持一致
视图名 | 说明 | 主库 | 备库 |
---|---|---|---|
v$pseg_items | 显示回滚系统中当前回滚项信息(回滚线程的工作信息) | 总行数=WORKER_THREADS+1 | 查询 no rows |
v$pseg_sys | 显示当前回滚段信息(概览) | 总行数为1 | 总行数为1 只有extent_size tab_hash_size obj_hash_size 非0 |
v$pseg_commit_trx | 显示回滚项中已提交但未 PURGE 的事务信息(需要PSEG 的事务信息) | 需要排除fpa_file_id = -1 and fpa_page_no = -1 的情况,屏蔽没有修改数据的事务,update 大字段列 fpa_file_id = -1 and fpa_page_no = -1 | 查询 no rows |
V$PSEG_PAGE_INFO | |||
V$PURGE | 显示当前 PURGE 回滚段信息(待PURGE 的事务总个数) | V P U R G E . o b j n u m = v PURGE.obj_num= v PURGE.objnum=vpseg_sys.obj_count | obj_num= 0 |
V$PURGE_PSEG_OBJ | 显示 PURGE 系统中,待 PURGE 的所有 PSEG 对象信息(待PURGE 的事务号) | 总行数= V P U R G E . o b j n u m = v PURGE.obj_num= v PURGE.objnum=vpseg_sys.obj_count | 查询 no rows |
V$PURGE_PSEG_TAB | 显示待 PURGE 表信息(待PURGE 的事务和表的关联信息) | 查询 no rows | |