设为首页 收藏本站
查看: 620|回复: 0

[经验分享] Oracle DG 最大保护模式的实现

[复制链接]

尚未签到

发表于 2018-9-14 10:21:57 | 显示全部楼层 |阅读模式
  实现最大保护模式,可以先实现最大性能模式,然后再转换为最大保护模式。
  一、三种保护模式
  最大性能(maximize performance):这是data guard默认的保护模式。primay上的事务commit前不需要从standby上收到反馈信息,该模式在primary故障时可能丢失数据,但standby对primary的性能影响最小。
  最大可用(maximize availability):在正常情况下,最大可用模式和最大保护模式一样;在standby不可用时,最大可用模式会自动降低成最大性能模式,所以standby故障不会导致primay不可用。只要至少有一个standby可用的情况下,即使primary down机,也能保证不丢失数据。
  最大保护(maximize protection):最高级别的保护模式。primay上的事务在commit前必须确认redo已经传递到至少一个standby上,如果所有standby不可用,则primary会挂起。该模式能保证零数据丢失。
  二、查看当前保护模式
  SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
  DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
  ---------------- -------------------- --------------------
  PRIMARY MAXIMUM PERFORMANCE MAXIMUM PERFORMANCE
  三、两种日志传输方式
  Arch:传统的日志传送方式。现在只有在最大性能模式时才能采用。归档日志通过primary上的arch进程传送给standby的RFS进程。
  LGWr:oracle9i开始可以使用LGWR即时将日志传送到standby,而不再需要等到归档操作时才传送,已减少可能的数据丢失。在三种保护模式下都可以使用该方式传送日志。使用LGWR方式传送,在standby库上必须先建立standby redo logfile
  四、查看日志传送方式
  SQL> select dest_name,archiver from v$archive_dest;
  DEST_NAME ARCHIVER
  -------------------- ----------
  LOG_ARCHIVE_DEST_1 ARCH
  LOG_ARCHIVE_DEST_2 LGWR
  LOG_ARCHIVE_DEST_3 ARCH
  LOG_ARCHIVE_DEST_4 ARCH
  LOG_ARCHIVE_DEST_5 ARCH
  LOG_ARCHIVE_DEST_6 ARCH
  LOG_ARCHIVE_DEST_7 ARCH
  LOG_ARCHIVE_DEST_8 ARCH
  LOG_ARCHIVE_DEST_9 ARCH
  LOG_ARCHIVE_DEST_10 ARCH
  10 rows selected.
  五、添加standby redo logfile
  首先停止standby的自动恢复状态

  SQL>>
  Database>  如果没有停止自动恢复状态就添加standby logfile,会报错:
  ORA-01156: recovery in progress may need access to files

  SQL>>
  04.redo')>
  Database>
  SQL>>
  05.redo')>
  Database>
  SQL>>
  06.redo')>
  Database>  注意standby logfile的group名不能和primary的redo logfile group重复,因为我的primay已经有3组日志了,这里添加的三组standby logfile从group 4开始。同时standby redo logfile的大小和primary的redo logfile保持一致。
  六、设置standby的归档路径
  log_archive_dest_1='location=/free/oracle/orabak '
  standby_archive_dest='/free/oracle/orabak '
  七、在primary上修改为用LGWR传送日志

  SQL>>
  System>  在primary上swith logfile

  SQL>>
  System>  在primary的alter中可以看到成功的记录
  Thu Nov 23 12:41:28 2006
  ALTER SYSTEM SET log_archive_dest_2='service=standby lgwr async' SCOPE=BOTH;
  Thu Nov 23 12:43:12 2006
  LGWR: Setting 'active' archival for destination LOG_ARCHIVE_DEST_2
  ***********************************************************
  Creating archive destination LOG_ARCHIVE_DEST_2: 'standby'
  LNS0 started with pid=13
  Thu Nov 23 12:43:16 2006
  LGWR: Beginning to archive log 3 thread 1 sequence 102
  Thread 1 advanced to log sequence 102
  Current log# 3 seq# 102 mem# 0: D:ORACLEORADATANINGREDO03.LOG
  Thu Nov 23 12:43:16 2006
  ARC0: Evaluating archive log 2 thread 1 sequence 101
  ARC0: LGWR is actively archiving destination LOG_ARCHIVE_DEST_2
  ARC0: Beginning to archive log 2 thread 1 sequence 101
  Creating archive destination LOG_ARCHIVE_DEST_2: 'standby'
  Creating archive destination LOG_ARCHIVE_DEST_1: 'D:ORACLEARCHNINGARC00101.001'
  ARC0: Completed archiving log 2 thread 1 sequence 101
  八、切换standby的保护模式
  切换保护模式的操作必须在primay执行,且primay必须处于mount状态
  如果在open状态执行,则报错:
  ORA-01126: database must be mounted EXCLUSIVE and not open for this operation
  SQL> shutdown immediate;
  Database closed.
  Database dismounted.
  ORACLE instance shut down.
  SQL> startup mount;
  ORACLE instance started.
  Total System Global Area 134814580 bytes

  Fixed>
  Variable>  Database Buffers 25165824 bytes
  Redo Buffers 143360 bytes
  Database mounted.

  SQL>>
  Database>
  SQL>>  alter database open
  *
  ERROR at line 1:
  ORA-03113: end-of-file on communication channel
  注意,这时需要先修改日志传送方式为lgwr同步方式,否则,数据库是无法open,可以在初始化参数文件中定义。
  SQL> conn / as sysdba

  Connected to an>  SQL> startup mount;
  ORACLE instance started.
  Total System Global Area 134814580 bytes

  Fixed>
  Variable>  Database Buffers 25165824 bytes
  Redo Buffers 143360 bytes
  Database mounted.

  SQL>>
  System>
  SQL>>
  Database>  再来看看当前保护模式
  SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
  DATABASE_ROLE PROTECTION_MODE PROTECTION_LEVEL
  ---------------- -------------------- --------------------
  PHYSICAL standby maximize protection maximize protection
  切换成maximize availability也需要类似的步骤,不再演示。
  注:在10gR2的data guard中,按照上述步骤切换保护模式的时候却不成功。主库完成切换语句后再open就报错:ORA-03113: end-of-file on communication channel。看alert文件,报错ORA-16072: a minimum of one standby database destination is required。但实际上备库的standby logfile都已经建好了,解决方法如下:
  解决方法:
  将主备库的flashback打开:
  启动到mount
  SQL> select FLASHBACK_ON from v$database;
  FLASHBACK_ON
  ------------------------------------
  NO

  SQL>>  数据库已更改。
  然后再切换到最大可用或者最大保护模式就ok了,切换前注意备库已经处于mount状态,并且主库原有的归档日志都已经全部复制到备库对应的归档目录下了,否则传送方式由arch改成lgwr后这些差异日志就无法自动传过去了。
  九、  有次在做10gR2试验,将主库切换到maximize availability正常open,但是如果切换到Maximum protection就直接报错ORA-03113: end-of-file on communication channel,检查归档日志主备库都已经同步了,FLASHBACK_ON也已经是yes,但是就是不能open主数据库。
  后来查看资料发现 Maximum protection模式必须满足以下条件:
  Redo Archival Process: LGWR
  Network Tranmission mode: SYNC
  Disk Write Option: AFFIRM
  Standby Redo Logs: Yes
  standby database type: Physical Only
  但是我的主库参数设置为:
  *.LOG_ARCHIVE_DEST_2= 'SERVICE=STANDBY VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBY LGWR SYNC REOPEN=10'
  缺少了AFFIRM参数:增加后,如下
  *.LOG_ARCHIVE_DEST_2= 'SERVICE=STANDBY VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=STANDBY LGWR SYNC AFFIRM REOPEN=10'
  这样,切换到Maximum protection就ok了。
  在最大保护模式下,直接关闭备库是不行的,如果在备库上关闭数据库,会有如下提示:
  SQL> shutdown immediate
  ORA-01154: database busy. Open, close, mount, and dismount not allowed now
  SQL>
  看来在最大保护模式下,备库是不允许关闭的,此时首先关闭主库,然后备库就可以顺利关闭了。
  十、打开standby数据库以read only方式

  SQL>>  SQL> SHUTDOWN;
  SQL> STARTUP MOUNT;

  SQL>>  对比主库与standby数据库中的表记录,应该是一样的。
  把standby数据库重新变成recovery状态:
  SQL> SHUTDOWN IMMEDIATE
  SQL> STARTUP NOMOUNT

  SQL>>
  SQL>>  oracle视频教程请关注:http://u.youku.com/user_video/id_UMzAzMjkxMjE2.html


运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.iyunv.com/thread-582208-1-1.html 上篇帖子: oracle 存储过程导出数据 下篇帖子: ORACLE RAC 日常管理[10g,11g]
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表