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工作模式是什么这一问题有了更深刻的体会,具体使用情况还需要大家实践验证。这里是创新互联,小编将为大家推送更多相关知识点的文章,欢迎关注!


文章标题:Oracle中DG备库undo工作模式是什么
链接地址:http://scyanting.com/article/jpdjis.html