千家信息网

Oracle中DG备库undo工作模式是什么

发表于:2026-11-02 作者:千家信息网编辑
千家信息网最后更新 2026年11月02日,这篇文章主要讲解了"Oracle中DG备库undo工作模式是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Oracle中DG备库undo工作模式是
千家信息网最后更新 2026年11月02日Oracle中DG备库undo工作模式是什么

这篇文章主要讲解了"Oracle中DG备库undo工作模式是什么",文中的讲解内容简单清晰,易于学习与理解,下面请大家跟着小编的思路慢慢深入,一起来研究和学习"Oracle中DG备库undo工作模式是什么"吧!

一:修改主库备库undo表空间

1.在主库创建undo表空间(会自动同步到备库)

SYS@prod>create undo tablespace smallundo datafile '/u01/app/oracle/oradata/prod/smallundo.dbf' size 2M;

修改undo表空间

SYS@prod>alter system set undo_tablespace=smallundo;

2.在备库修改undo表空间 //由于备库处于redo only模式,无法在线修改undo_tablespace

SYS@stddb>shutdown immediate

[oracle@service2 dbs]$ cd $ORACLE_HOME/dbs

修改参数文件 *.undo_tablespace='smallundo'

SYS@stddb>create spfile from pfile

SYS@stddb>startup

主库:

SYS@prod>show parameter undo;

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management string AUTO

undo_retention integer 900

undo_tablespace string SMALLUNDO

备库:

SYS@stddb>show parameter undo

NAME TYPE VALUE

------------------------------------ ----------- ------------------------------

undo_management string AUTO

undo_retention integer 900

undo_tablespace string smallundo

二 :测试

1.在主库创建test表:

SYS@prod>create table test (id number);

SYS@prod>insert into test(id) values(1);

SYS@prod>commit;

2.在备库模拟长时间的查询操作:

SYS@stddb>variable rfc refcursor

SYS@stddb>execute open :rfc for select * from test;

3.在主库执行循环更新操作:

SYS@prod>

begin

for i in 1..20000 loop

update test set id = 3;

commit;

end loop;

end;

4.在备库获取查询结果:

SYS@stddb>print :rfc

ERROR:

ORA-01555: snapshot too old: rollback segment number 13 with name"_SYSSMU13_2332596898$" too small

三:结论

在备库执行查询语句出现的ORA-01555与主库出现的ORA-01555原因是没区别的,主备的undo块是实时同步的,

本次测试中,采用的非自动扩展的undo表空间,由于表空间无法自动扩展,会优先保留Active有可用空间,会将已经提交事务的undo data覆盖掉,即使没有满足undo retention的保留时间,所以会出现ORA-01555错误

当长时间查询的SQL语句,无法从undo中获得前映像构造CR块就会出现ORA-01555错误

例如:

A会话执行一条查询语句,查询数据行数为10亿行,B会话执行一条delete语句,删除1亿行数据,然后进行提交,当B会话事务提交成功后,A数据才查询到这1亿行数据,此时需要undo data来构造一致性读,如果此时undo date被覆盖,那么就会出现Ora-01555错误。

备库CR块构造:

主备同步时,如果主库进行一个事务,但是这个未提交,在备库查询,需要构造CR块满足查询,结合当前块和undo块生成CR块。

//与主库构造CR模式相同,也可以理解为在备库上查询和在主库上查询使用的undo是没区别的

测试:

SYS@prod>select * from test;

ID

----------

3

SYS@stddb>select object_name,object_id from dba_objects where object_name='TEST' and owner='SYS';

//查询test表的object_id

OBJECT_NAME OBJECT_ID

-------------------- ----------

TEST 88641

在主库进行一次修改操作:

SYS@prod>update test set id = 1;

1 row updated.

在主库备库查询块状态:

SYS@prod>select obj,state from x$bh where state = 3 and obj=88641;

No rows selected.

SYS@stddb>select obj,state from x$bh where state = 3 and obj=88641;

No rows selected.

执行查询操作:

SYS@stddb>select * from test;

ID

----------

3

在主备库查询test表构造CR块情况:

SYS@prod>select obj,state from x$bh where state = 3 and obj=88641;

OBJ STATE

---------- ----------

88641 3

88641 3

SYS@stddb>select obj,state from x$bh where state = 3 and obj=88641;

OBJ STATE

---------- ----------

88641 3

88641 3

3是CR模式

备库的redo工作模式:

主库的redo日志进行日志切换时,备库的redo日志也会随之切换,但是没有任何意义,仅仅算是同步,也不记录警告日志。

SYS@stddb>select group#,status from v$log;

GROUP# STATUS

---------- ----------------

1 CURRENT

2 CLEARING

3 CLEARING

备库的redo只有current与clearing两种状态。

感谢各位的阅读,以上就是"Oracle中DG备库undo工作模式是什么"的内容了,经过本文的学习后,相信大家对Oracle中DG备库undo工作模式是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是,小编将为大家推送更多相关知识点的文章,欢迎关注!

查询 模式 空间 工作 数据 日志 语句 同步 事务 错误 学习 测试 内容 情况 状态 长时 切换 相同 一致 成功 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 手磨咖啡 互联网科技有限公司 哈尔滨大商圈互联网科技有限公司 四川狮子座互联网科技 中国互联网金融科技基金 科技赋能互联网健康 宁波青枫互联网科技有限公司 湖南诚度互联网科技有限公司 洛阳共同富裕互联网科技有限公司 南博望互联网科技有限公司 合肥互联网科技公司公章图片 怎样加入科技互联网 江苏互联网智能科技软件 广州互联网高科技取餐柜 中国新注册互联网科技 湖北辰鑫科技互联网 互联网金融运营模式中的金融科技 科技互联网公司两年变化 东风日产互联网科技公司叫什么 知域互联网科技有限公司官网 互联网科技工作委员会主任 麻工互联网科技 北京互联网络科技有限公司 深圳卡尔迅互联网科技有限公司怎么样 银川新华互联网科技学校地址 互联网科技热点资讯 互联网科技实习生岗位职责 互联网科技如何创业 九思连强互联网电子科技有限公司 利用互联网等科技手段
0