zoukankan      html  css  js  c++  java
  • RAC+ASM环境配置DataGuard

     

    RAC、DATAGUARD、Stream作为ORACLE高可用体系中的三辆马车,每种模式都有自己独特的功能,根据不同的需求可以根据各个功能侧重点进行搭配。

    RAC主要特点在于,对外服务的高可用性,在多个实例对外服务的环境下可以避免单实例故障带来的停机,并且多个实例可以有效地解决单点负责均衡。RAC方案在7*24小时的核心系统很常见。RAC模式下,虽然解决了单实例下因故障而带来的停机问题,但RAC模式下数据库只有一份。虽然可以通过存储RAID方式对数据进行镜像冗余,但却解决不了整个数据库出现故障后迅速恢复可用问题,也解决不了数据库容灾问题。

    DATAGUARD通过日志同步机制来同步主数据库和备数据库之间的同步,这种同步可以是实时的、延时的、同步、异步方式。DATAGUARD常用于异地容灾方案和小企业单实例备库的高可用方案。DATAGUARD模式下,主数据库正常处理各种在线事务,但备数据库只可以出于恢复模式,数据库仅为只读模式。个别对数据库仅查询事务的应用也可迁移到备数据库上来,但DATAGUARD设计的初衷并不为了解决性能问题。Stream方案是以ORACLE ADVANCED QUEUE为基础实现数据同步的,由于是数据应用层面的同步,所以可以灵活地进行配置,如除了系统表空间的数据库级别、表空间级别、表级别等。关于Stream模式我在以后搭建完实验环境后再进行学习和分享。

    在DATAGUARD模式中,至少有两个数据库,其中一个数据库出于OPEN状态,正常对外进行服务,我们把这个数据库叫primary database,另一个数据库则处于恢复模式下,叫standby database。primary database数据库在线事务处理所产生的联机重做日志和归档日志都会传送到standby database,standby database在接收到日志之后将对这些日志进行重演来达到与primary database同步。primary database 和standby database只是个角色概念并不固定在某个数据库当中,在日常软件硬件升级中,可以对它们进行切换。

    在上面的描述当中,DATAGUARD模式下实现同步主要围绕着以下三点:

    1.primary database日志发送,redo send。

    2.standby database日志接收,redo receive。

    3.日志应用,redo apply。

    下面引用一张框架图:

                           

    简单介绍一下配置的环境:

    RAC

    RAC1:

    PUBLICE IP:192.168.1.111/24

    private IP:10.10.10.31/24

    service_names :devdb_rac, devdb

    INSTANCE:devdb1

    DB_NAME:devdb

    datafile、controlfile、redofile: ASM

    RAC2:

    PUBLICE IP:192.168.1.122/24

    private IP:10.10.10.32/24

    service_names :devdb_rac, devdb

    INSTANCE:devdb2

    DB_NAME:devdb

    datafile、controlfile、redofile: ASM

    SINGLE

    IP:192.168.1.133/24

    INSTANCE:devdb3

    service_names:devdb_single

    DB_NAME:devdb

    datafile、controlfile、redofile: OS FILESYSTEM

    single为单机数据库,并且安装了和RAC一样的数据库版本,只安装数据库软件,不建库。好了,在准备好环境情况下,我们开始一步一配置,具体要点在建设时进行说明。

    一, 配置RAC和SINGLE的tnsname.ora文件。

    也就是配置节点1,节点2,单机的上共3个tnsname.ora文件,并且这3个文件配置基本一样。# tnsnames.ora.rac2 Network Configuration File: /u01/oracle/product/10.2.0/db_1/network/admin/tnsnames.ora.rac2
    # Generated by Oracle configuration tools.

    DEVDB2 =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = devdb)
    (INSTANCE_NAME = devdb2)
    )
    )

    DEVDB1 =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = devdb)
    (INSTANCE_NAME = devdb1)
    )

    )

    devdb_single =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = devdb3_single)(PORT = 1521))
    (CONNECT_DATA =
    (SERVER = DEDICATED)
    (SERVICE_NAME = devdb_single)
    (INSTANCE_NAME = devdb3)
    )
    )

    LISTENERS_DEVDB =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
    )

    EXTPROC_CONNECTION_DATA =
    (DESCRIPTION =
    (ADDRESS_LIST =
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1))
    )
    (CONNECT_DATA =
    (SID = PLSExtProc)
    (PRESENTATION = RO)
    )
    )

    二. 接着修改listener.ora,由于RAC本身就已经启用监听,所以不需要作修改。single数据库能启动监听程序的话,使用默认配置也可以。

    single的listener.ora文件如下:

    # listener.ora Network Configuration File: /u01/oracle/product/10.2.0/db_1/network/admin/listener.ora
    # Generated by Oracle configuration tools.

    SID_LIST_LISTENER =
    (SID_LIST =
    (SID_DESC =
    (SID_NAME = PLSExtProc)
    (ORACLE_HOME = /u01/oracle/product/10.2.0/db_1)
    (PROGRAM = extproc)
    )
    )

    LISTENER =
    (DESCRIPTION_LIST =
    (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost.localdomain)(PORT = 1521))
    (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    )
    三.修改RAC主数据库为归档模式。

    RAC数据库必须在归档模式下。

    关闭RAC所有节点,必须滴。

    SQL> shutdown immediate

    Database closed.

    Database dismounted.

    ORACLE instance shut down.

    启动其中一个节点
    SQL> startup mount
    SQL> alter database archivelog;

    SQL> alter database open;

    10GR2以前,在RAC环境下修改归档必须先把设置参数cluster_database=false,把数据库设置为归档后再把该参数设置为true,但这个步骤在10GR2可以省略。

    由于RAC归档模式在之前搭建RAC环境时已配置完,所以这里没有太详细进行说明。原来配置占用了“LOG_ARCHIVE_DEST_1”,“LOG_ARCHIVE_DEST_2”。

    四. 在RAC各个节点中添加和修改参数文件。

    可以通过直接的在线修改或者把spfile创建为pfile再慢慢修改。下面介绍spfile创建为pfile:

    SQL> create pfile='/u01/pfile831' from spfile;

    File created.

    rac-> more /u01/pfile831
    devdb1.__db_cache_size=100663296
    devdb2.__db_cache_size=62914560
    devdb1.__java_pool_size=4194304
    devdb2.__java_pool_size=4194304
    devdb1.__large_pool_size=4194304
    devdb2.__large_pool_size=4194304
    devdb1.__shared_pool_size=96468992
    devdb2.__shared_pool_size=134217728
    devdb1.__streams_pool_size=0
    devdb2.__streams_pool_size=0
    *.audit_file_dest='/u01/oracle/admin/devdb/adump'
    *.background_dump_dest='/u01/oracle/admin/devdb/bdump'
    *.cluster_database_instances=2
    *.cluster_database=TRUE
    *.compatible='10.2.0.1.0'
    *.control_files='+DG1/devdb/controlfile/current.260.756332873','+RECOVERYDEST/devdb/controlfile/current.256.756332873'
    *.core_dump_dest='/u01/oracle/admin/devdb/cdump'
    *.db_block_size=8192
    *.db_create_file_dest='+DG1'
    *.db_domain=''
    *.db_file_multiblock_read_count=16
    *.db_file_name_convert='/u01/oradata/devdb3/devdb3data','+DG1/devdb/datafile','/u01/oradata/devdb3/devdb3temp','+DG1/devdb/tempfile'

    --由于RAC使用的文件系统为ASM,SINGLE使用的文件系统为操作系统文件系统。所以两边的文件路径不相同,所以db_file_name_convert参数就可以翻译两边路径了。
    *.db_name='devdb'
    *.db_recovery_file_dest='+RECOVERYDEST'
    *.db_recovery_file_dest_size=1572864000
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=devdbXDB)'
    devdb1.fal_client='devdb1'
    devdb2.fal_client='devdb2'
    *.fal_server='devdb_single'

    --由于在日志传输过程中可能会出现传输失败导致日志缺裂,这叫做传说中的“裂缝”,这时候就发生了"归档裂缝(archive Gap)",DATAGUARD能够自动检测,并修复。从上面参数看出,如果当某天进行切换后,RAC数据库为standby database,而当发生归档裂缝时,如RAC节点1就是fal_client='devdb1',然后向fal_server='devdb_single'取日志。以上参数配置的是ORACLE NET NAME,所以tnsname.ora务必配置准确。
    devdb2.instance_number=2
    devdb1.instance_number=1
    *.job_queue_processes=10
    *.log_archive_config='DG_CONFIG=(devdb,devdb_single)'

    --这个参数非常重要,配置错误也会导致重做日志传输失败,主要配置primary database和private database 两个数据库的DB_UNIQUE_NAME
    devdb2.log_archive_dest_1='location=/u01/archive2'
    devdb1.log_archive_dest_1='location=/u01/archive1'
    devdb2.log_archive_dest_2='service=devdb1'
    devdb1.log_archive_dest_2='service=devdb2'

    --这些归档路径参数是配置归档模式时配置的,可选。
    *.log_archive_dest_3='service=devdb_single VALID_FOR=(online_LOGFILES,primary_ROLES) DB_UNIQUE_NAME=devdb_single'

    --这个归档路径主要用于传输DATAGUARD传输归档日志用的主要路径。devdb_single通过tnsname指定。VALID_FOR定义primary database和private database 两个数据库转换时角色的转换。
    *.log_archive_format='%t_%s_%r.arc'
    *.log_file_name_convert='/u01/oradata/devdb3/devdb3log','+DG1/devdb/onlinelog'

    --由于RAC使用的文件系统为ASM,SINGLE使用的文件系统为操作系统文件系统。所以两边的文件路径不相同,所以db_file_name_convert参数就可以翻译两边路径了。
    *.open_cursors=300
    *.pga_aggregate_target=60817408
    *.processes=150
    *.remote_listener='LISTENERS_DEVDB'
    *.remote_login_passwordfile='EXCLUSIVE'
    *.service_names='devdb_rac'
    *.sga_target=209715200
    devdb1.standby_archive_dest='/u01/archive2'
    devdb2.standby_archive_dest='/u01/archive1'

    --指定从primary database传送到standby database的归档日志路径。
    *.standby_file_management='AUTO'

    --如果有新的datafile在primary database上创建,standby会自动创建相同的datafile。
    devdb2.thread=2
    devdb1.thread=1
    *.undo_management='AUTO'
    devdb1.undo_tablespace='UNDOTBS1'
    devdb2.undo_tablespace='UNDOTBS2'
    *.user_dump_dest='/u01/oracle/admin/devdb/udump'

    db_unique_name=devdb

    修改完参数后,把参数文件复制到各节点,然后关闭各个节点数据库:

    SQL>shutdown immediate

    然后使用新修改的pfile启动各个节点数据库。

    SQL>startup pfile='/u01/pfile831';

    然后创建spfile保证下次启动数据库这些参数都被加载。

    SQL>create spfile from pfile='/u01/pfile831';

    完毕!

    五.创建standby database 的参数文件

    [root@localhost u01]# more pfile830_2
    devdb3.__db_cache_size=134217728
    devdb3.__java_pool_size=4194304
    devdb3.__large_pool_size=4194304
    devdb3.__shared_pool_size=62914560
    devdb3.__streams_pool_size=0
    *.audit_file_dest='/u01/oracle/admin/devdb/adump'
    *.background_dump_dest='/u01/oracle/admin/devdb/bdump'
    *.compatible='10.2.0.1.0'
    *.control_files='/u01/oracle/controlfile/devdb3.ctl'#Restore Controlfile
    *.core_dump_dest='/u01/oracle/admin/devdb/cdump'
    *.db_block_size=8192
    *.db_domain=''
    *.db_file_multiblock_read_count=16
    *.db_file_name_convert='+DG1/devdb/datafile','/u01/oradata/devdb3/devdb3data','+DG1/devdb/tempfile','/u01/oradata/devdb3/devdb3temp'

    --配置要跟RAC反过来。
    *.db_name='devdb'
    *.db_recovery_file_dest='+RECOVERYDEST'
    *.db_recovery_file_dest_size=1572864000
    *.db_unique_name='devdb_single'

    --注意修改
    *.dispatchers='(PROTOCOL=TCP) (SERVICE=devdbXDB)'
    *.fal_client='devdb_single'
    *.fal_server='devdb1','devdb2'

    --注意修改
    *.job_queue_processes=10
    *.LOG_ARCHIVE_CONFIG='DG_CONFIG=(devdb,devdb_single)'
    *.log_archive_dest_1='location=/u01/archive1'

    --归档路径1用于自己归档
    *.log_archive_dest_2='service=devdb1 VALID_FOR=(online_LOGFILES,primary_ROLES) DB_UNIQUE_NAME=devdb'

    --归档路径2用于DATABUARD重做日志传输
    *.log_archive_format='%t_%s_%r.arc'
    *.log_file_name_convert='+DG1/devdb/onlinelog','/u01/oradata/devdb3/devdb3log'

    --注意修改
    *.open_cursors=300
    *.pga_aggregate_target=60817408
    *.processes=150
    *.remote_login_passwordfile='EXCLUSIVE'
    *.service_names='devdb_single'
    *.sga_target=209715200
    *.standby_archive_dest='/u01/archive'
    *.standby_file_management='AUTO'
    *.thread=1

    --注意修改
    *.undo_management='AUTO'
    *.undo_tablespace='UNDOTBS1'

    --注意修改,否则出错!
    *.user_dump_dest='/u01/oracle/admin/devdb/udump'

    以上是用过修改RAC参数文件所得的,可以通过对比删去RAC相关的参数,修改SINGLE数据库独有配置。

    然后复制到传输文件的位置。

    参考位置:/u01/oracle/product/10.2.0/db_1/dbs/initdevdb3.ora

    注意,文件名要参考当初安装实例时起的名字!init<SID>.ora

    六.创建备份

    在RAC其中一个节点执行。

    rac2-> rman target /

    Recovery Manager: Release 10.2.0.1.0 - Production on Wed Aug 31 15:54:54 2011

    Copyright (c) 1982, 2005, Oracle. All rights reserved.

    connected to target database: DEVDB (DBID=661062857)

    RMAN> run
    2> {
    3> allocate channel c1 device type disk format '/soft/%U';
    4> backup database plus archivelog delete all input;
    5> }

    然后再备份控制文件:

    RMAN> run
    2> {
    3> allocate channel c1 device type disk format '/soft/con%U';
    4> backup current controlfile for standby;
    }

    查看备份集:

    rac1-> ll
    total 732824
    -rw-r----- 1 oracle oinstall 15532032 Aug 29 14:59 10ml7d3a_1_1
    -rw-r----- 1 oracle oinstall 15532032 Aug 29 15:01 12ml7d5e_1_1
    -rw-r----- 1 oracle oinstall 703037440 Aug 29 15:08 16ml7dhv_1_1
    drwxr-xr-x 2 oracle oinstall 4096 Aug 22 01:21 archivelog
    -rw-r----- 1 oracle oinstall 15532032 Aug 29 15:08 con18ml7dk5_1_1

    复制到SINGLE主机上:

    rac1-> scp 10ml7d3a_1_1 12ml7d5e_1_1 16ml7dhv_1_1 con18ml7dk5_1_1 192.168.1.133:/soft/

    SINGLE主机务必创建相应的文件路径。

    七.在SINGLE主机上恢复备份集

    localhost-> rman target /

    Recovery Manager: Release 10.2.0.1.0 - Production on Fri Jan 1 08:22:50 1988

    Copyright (c) 1982, 2005, Oracle. All rights reserved.

    connected to target database: DEVDB (DBID=661062857, not open)

    RMAN> restore controlfile from '/soft/con18ml7dk5_1_1';

    接下来恢复数据库,由于控制文件已经恢复了,相关的RMAN备份信息已经在控制文件里面了,所以直接使用命令:

    RMAN> restore database;

    恢复完毕!

    八.在备库添加standby redo log

    把single主机设成恢复状态。

    SQL> alter database recover managed standby database disconnect from session;

    Database altered

    注意,logfile文件size必须与日志文件大小一致!

    可以查看RAC数据库日志大小:

    SQL> select bytes/1024/1024 from v$log;

    BYTES/1024/1024
    ---------------
    50
    50
    50
    50

    得知日志文件为50m.

    然后可以在single主机上创建standby redo log

    在本例,每一个thread的联机日志都是2组,所以,需要添加6组standby redo log:

    SQL> alter database recover managed standby database cancel;

    alter database add standby logfile thread 1 group 5 ('//u01/oradata/devdb3/devdb3log/st_1_5.log') size 50m;
    alter database add standby logfile thread 1 group 6 ('//u01/oradata/devdb3/devdb3log/st_1_6.log') size 50m;
    alter database add standby logfile thread 1 group 7 ('//u01/oradata/devdb3/devdb3log/st_1_7.log') size 50m;
    alter database add standby logfile thread 2 group 8 ('//u01/oradata/devdb3/devdb3log/st_2_8.log') size 50m;
    alter database add standby logfile thread 2 group 9 ('//u01/oradata/devdb3/devdb3log/st_2_9.log') size 50m;
    alter database add standby logfile thread 2 group 10 ('//u01/oradata/devdb3/devdb3log/st_2_10.log') size 50m;

    九.检查运行情况

    在RAC节点上各个节点查看:SQL> select dest_name,status,error from v$archive_dest;

    DEST_NAME
    --------------------------------------------------------------------------------
    STATUS ERROR
    --------- -----------------------------------------------------------------
    LOG_ARCHIVE_DEST_1
    VALID

    LOG_ARCHIVE_DEST_2
    BAD PARAM ORA-16052: DB_UNIQUE_NAME attribute is required

    LOG_ARCHIVE_DEST_3
    VALID

    这个路径没报错的话证明传输没问题,如果报错的话,尝试查看所有参数是否有配置错误的,如果确定没有配置错误,重启RAC所有节点操作系统和SINGLE主机操作系统再看看。本人在配置的时候就出现这种情况,后来重启操作系统后就好了,唉,折腾了我大半天!

    启动同步命令:alter database recover managed standby database disconnect from session;

    取消同步命令:alter database recover managed standby database cancel;

    十.总结

    本人刚刚接触DATAGUARD时虽然有比较好的参考资料帮助搭建,但由于很多DATAGUARD的参数都不太熟悉,配置错误也不知道,所以不断不断尝试。从最开始的tnsname和listener配置就出现连接错误了,由于这一块的知识是大学的时候学习的,只记得概念而忘记了很多细节,摸索摸索解决了问题。我参考资料中,备份这一块使用的是auxiliary功能,但由于在远程连接的时候出现BUG,死活恢复不了standby数据库,最后自己摸索方法。恢复standby数据库后,由于参数配置有点错误,经过不断的调试,终于敲定准确无误。但死活还是归档日志传输错误。后来重启操作系统后就好了,唉,折腾了我大半天!总之还得感谢这些不平坦的路,倘若一切顺顺利利弄完我就不会再刻意去研究各个参数,倘若我不耐烦放弃了我就不可能完成这次的实验。哲理呀。。哲理呀。。。

  • 相关阅读:
    ajax 上传文件
    在linux服务器centos上使用svn同步代码到项目中
    css3 选择器 权重问题 (第二部分)
    css3 选择器 权重问题 (第一部分)
    css3 文本模型
    (java)剑指offer题三
    (java)剑指0ffer题二
    (java)剑指offer题一
    java程序入口main()方法浅析
    jar命令浅析
  • 原文地址:https://www.cnblogs.com/weixun/p/3089657.html
Copyright © 2011-2022 走看看