Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

94

积分

0

好友

1

主题
1#
发表于 2012-12-14 16:26:45 | 查看: 5438| 回复: 7
本帖最后由 lixz_2008 于 2012-12-14 16:30 编辑

测试环境:
              primary database:11.2.0.3 rac+asm
              standby database:11.20.3  single node+filesystem
              dataguard的保护模式:MAXIMUM PERFORMANCE
              重做日志传输模式:LGWR ASYNC
              应用方法:redo apply

          我的疑问是:11G对重做日志传输功能加强了,使用LNS进程直接读取SGA的redo buffer然后发从给备份库的RFS进程,我的问题是LGWR是3秒写一次ORL或者redo buffer超过3分之1,那么LNS是如何读取重做日志缓冲区的条目的?频率是怎样的?
         我做了些测试如下:
         主库上创建一张表:
  1. SQL> create table test(num number,name varchar2(10));
  2. Table created.
  3. SQL> insert into test values(1,'lucy');
  4. 1 row created.
  5. SQL> insert into test values(2,'lily');
  6. 1 row created.
  7. SQL> commit;   
  8. Commit complet
复制代码
过了很长时间,但是备库上并没有查到这个表:

  1. SQL> select * from test;
  2. select * from test
  3.               *
  4. ERROR at line 1:
  5. ORA-00942: table or view does not exist
复制代码
查看备库的standby log状态:
  1. SQL>  select status ,first_change#, next_change# from v$standby_log;

  2. STATUS     FIRST_CHANGE# NEXT_CHANGE#
  3. ---------- ------------- ------------
  4. ACTIVE          10993846     11077746
  5. UNASSIGNED
  6. UNASSIGNED
  7. UNASSIGNED
  8. ACTIVE          11062159     11077747
  9. UNASSIGNED
复制代码
从主库的alert日志上看:LNS: Standby redo logfile selected for thread 1 sequence 43 for destination LOG_ARCHIVE_DEST_2
  1. SQL> select process,status,thread#,sequence#,client_pid from v$managed_standby;

  2. PROCESS   STATUS          THREAD#  SEQUENCE# CLIENT_PID
  3. --------- ------------ ---------- ---------- ----------------------------------------
  4. ARCH      CLOSING               1         41 2082
  5. LNS       WRITING               1         43 2092
  6. ARCH      CLOSING               1         42 2084
  7. ARCH      CLOSING               1         14 2086
  8. ARCH      CLOSING               1         40 2088
复制代码
LNS在等待日志sequence 43,手工切换日志:
  1. SQL> alter system switch logfile;
  2. System altered.
  3. SQL> alter system switch logfile;
  4. System altered.
  5. SQL> alter system switch logfile;
  6. System altered.
复制代码
此时备库收到了主库的日志,能查询表test;
  1. SQL> select * from test;

  2.        NUM NAME
  3. ---------- ----------
  4.          1 lucy
  5.          2 lily
复制代码
从测试上看,LNS并不是实时的去读取重做日志缓冲区,求大神指点!谢谢!
2#
发表于 2012-12-14 17:43:47
兄弟你没看错吧,是 WRITING  不是WAITING
show parameter log_archive_dest 看下
另外传输模式是LGWR ASYNC,LNS在11G是直接读redo buffer的吗?不是读online redo log file吗??
求lns读redo buffer的资料出处。

回复 只看该作者 道具 举报

3#
发表于 2012-12-14 18:55:49
kaertiger 发表于 2012-12-14 17:43
兄弟你没看错吧,是 WRITING  不是WAITING
show parameter log_archive_dest 看下
另外传输模式是LGWR ASYN ...

sequence 43当时还没产生的。
  1. SQL> show parameter log_archive_dest

  2. NAME                                 TYPE        VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. log_archive_dest                     string
  5. log_archive_dest_1                   string      location=USE_DB_RECOVERY_FILE_
  6.                                                  DEST VALID_FOR=(ALL_LOGFILES,A
  7.                                                  LL_ROLES) DB_UNIQUE_NAME=rac
  8. log_archive_dest_10                  string
  9. log_archive_dest_11                  string
  10. log_archive_dest_12                  string
  11. log_archive_dest_13                  string
  12. log_archive_dest_14                  string
  13. log_archive_dest_15                  string
  14. log_archive_dest_16                  string

  15. NAME                                 TYPE        VALUE
  16. ------------------------------------ ----------- ------------------------------
  17. log_archive_dest_17                  string
  18. log_archive_dest_18                  string
  19. log_archive_dest_19                  string
  20. log_archive_dest_2                   string      SERVICE=dgtest LGWR ASYNC VALI
  21.                                                  D_FOR=(ONLINE_LOGFILES,PRIMARY
  22.                                                  _ROLE) DB_UNIQUE_NAME=dgtest
复制代码
lns读redo buffer我是在<<Oracle Data Guard 11g Handbook>>这本书里看到的

回复 只看该作者 道具 举报

4#
发表于 2012-12-15 13:43:13

回复 只看该作者 道具 举报

5#
发表于 2012-12-15 14:43:32
既然是max performance模式,个人认为ARCH aSYNC AFFIRM会比较好,用archive log,别影响性能。

刘大侠怎么看?

回复 只看该作者 道具 举报

6#
发表于 2012-12-17 10:12:59
Liu Maclean(刘相兵 发表于 2012-12-15 13:43
请先参考这个帖子 http://t.askmaclean.com/thread-928-1-1.html

刘大,这个帖子我看过了,从Oracle Data Guard 11g Handbook这本书里介绍11g LNS是直接读取log buffer的,而不是由LGWR 发给LNS;仍然不明白LNS如何读取redo record?

回复 只看该作者 道具 举报

7#
发表于 2012-12-17 11:30:11
sorry,我好像犯了个很低级的错误,在备库开启redo apply的时候忘记加 'USING CURRENT LOGFILE'开启实时应用了!
redo apply.jpg

回复 只看该作者 道具 举报

8#
发表于 2012-12-17 11:59:05
下下来了,好好看看。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-11-16 04:52 , Processed in 0.053974 second(s), 23 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569