ITPub博客

首页 > 数据库 > Oracle > 物理备库的搭建过程

物理备库的搭建过程

原创 Oracle 作者:wmsok 时间:2014-03-09 23:18:53 0 删除 编辑

物理备库的搭建过程:
SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE    10.2.0.1.0      Production
TNS for 32-bit Windows: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

一、简单DG搭建:默认为最大性能,可以不用创建standby redo log
   主库:
      1、确认数据库在归档模式(配置好归档路径)、FORCE LOGGING模式。
      2、启动到NOMOUNT下,生成initDGDH.ora,修改初始化参数文件,生成两份initDGDH.ora和initDGDHSTB.ora,主要参数如下:
.......
.......
.......
*.db_name='DGDH'
.......
.......
*.DB_UNIQUE_NAME=DGDH
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(DGDH,DGDHSTB)'
*.LOG_ARCHIVE_DEST_1= 'LOCATION=d:\dir\DGDH VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DGDH'
*.LOG_ARCHIVE_DEST_2= 'SERVICE=DGDHSTB SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGDHSTB'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE

*.fal_server='DGDHSTB'
*.fal_client='DGDH'
*.log_file_name_convert=("D:\oracle\product\10.2.0\oradata\DGDHSTB","D:\oracle\product\10.2.0\oradata\DGDH")
*.db_file_name_convert=("D:\oracle\product\10.2.0\oradata\DGDHSTB","D:\oracle\product\10.2.0\oradata\DGDH") --用于RMAN复制时重建redo文件
*.standby_file_management=auto   #裸设备,必须将该参数设置为manual。

----该参数文件里面除了db_name参数值相同,必须取主库的名字,其它参数都要把DGDH和DGDHSTB互换
  
3、在MOUNT下,生成备库控制文件:以上面配置好的参数文件为基础,启动到MOUNT下,这样数据库才能知道备库的SID
   alter database create standby controlfile as 'c:\control01.ctl'
4、配置好主库和备库的静态监听和网络服务

   备库:
     1、在备库服务器上,创建实例 oradim -NEW -SID DGDHSTB -STARTMODE manual
     2、配置好主库和备库的静态监听和网络服务。        
     3、创建目录:admin、oradata下创建对应的目录
     4、复制(initDGDHSTB.ora、standby控制文件、数据文件、日志文件、密码文件)到备份服务器相应目录,备库上的控制文件要和主库数量一致
     5、启动备库到MOUNT下
        后台自动应用日志 alter database recover managed standby database disconnect from session;
        取消后台自动应用日志 alter database recover managed standby database cancel;
        打开数据库:alter database open [read only]
    验证:
     1、select name,switchover_status,open_mode,protection_mode,database_role  from v$database;
name      switchover_status    open_mode  protection_mode      database_role
--------- -------------------- ---------- -------------------- ----------------
dgdh        to standby         read write  maximum performance  primary
2、SELECT STATUS,DESTINATION, ERROR FROM V$ARCHIVE_DEST;   ----如果有错误,要排查原因。
3、alter system switch logfile;
    select max(sequence#) from v$archived_log;  -----主备查询结果一致,Data Guard 搭建结束。
     4、验证archive log是否接收和 applied.
        alter session set nls_datE_format='YYYY-MM-DD HH24:MI:SS';
    select SEQUENCE#,DEST_ID,ARCHIVED,APPLIED,DELETED,STATUS,FIRST_TIME from v$archived_log order by SEQUENCE#;
5、select process,status,thread#,sequence#,client_pid from v$managed_standby;   ----查看当前备库里面的进程有哪些
    这里需要明确的是,当没有开启recover managed standby database,则备库会关掉MRPn进程的。但是RFS进程还是开启的,还在能不停的接受日志写日志。
     重:SQL>select process,client_process from v$managed_standby;

PROCESS   CLIENT_PROCESS
--------- --------------
ARCH      ARCH   
ARCH      ARCH
RFS       LGWR
RFS       ARCH
MRP0      N/A

从上面的对应关系可以看出LGWR-->RFS和ARCH-->RFS

  注意:如果在主库执行 alter database clear unarchived logfile或alter database open resetlogs , 则dataguard要重建。
相关视图:
v$archive_dest
v$archive_dest_status
v$log_history
v$archvied_log
v$managed_standby
v$archive_gap

       
二、最大性能、最大可用、最大保护
    前提:必须创建standby redo log,数量=(maximum number of logfiles for each thread + 1) * maximum number of threads
命令:ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;     ----最大性能,默认,无法同步日志时不影响主库
          ALTER DATABASE SET STANDBY DATABASE TO MAXISIZE AVAILABILITY;    ----最大可用,无法同步日志时自动切换到最大性能,待可同步时再切换到最大保护
          ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;      ----最大保护,无法同步日志时主库会shutdown
         
           ***11G里面怎么是MAXISIZE,而非MAXIMIZE

  alter database add standby logfile group 5 ('d:\oracle\product\oradata\dgdhicu\stbredo01.log') size 50M; 
  alter database add standby logfile group 4 ('/oracle/dbs/log1c.rdo') size 500m;      ---一主一备的话就应该要创建4个standby redo log
另:*.LOG_ARCHIVE_DEST_2= 'SERVICE=DGDH LGWR SYNC AFFIRM REOPEN=10 VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGDH'
  以上红色参数也要加上,以后再研究,现在要考试了
  
   
   
三、日志发送方式
    可分为三种:ARCH进程发送日志、LGWR进程的SYNC发送日志、LGWR进程的ASYNC发送日志
     参数文件中在此处指定:*.LOG_ARCHIVE_DEST_2= 'SERVICE=DGDHSTB SYNC AFFIRM VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DGDHSTB'
     ARCH 进程:
Primary DB àRedo log àOnline redo log àArch redo log àRFS à>Arch redo log àMRP/LSPàStandby DB
|<-----------------------------primary------------------------------------->|<----standby---->|
注:ARCH进程发送日志,发送的都是归档日志,所以很容易丢失redo log,不建议使用

LGWR进程的SYNC:
                                  
  
注:1、LGWR 必须等待写入本地日志文件操作和通过LNSn进程的网络传送都成功,Primary DB上的事务才能提交,这也是SYNC的含义所在;
        2、Primary DB的日志切换也会触发Standby DB上的日志切换,即Standby DB对Standby Redo Log的归档,然后触发Standby DB的MRP或者LSP进程恢复归档日志;
3、实时应用(Real-Time Apply):只要RFS把日志写入Standby Redo Log 就会立即进行恢复;归档应用:在完成对Standby Redo Log 归档才触发恢复,默认的恢复方式。
   alter database recover managed standby database using current logfile disconnect from session; 把归档恢复转换为实时应用
4、实时恢复,时可以添加time_out参数,alter system set log_archive_dest_2 = 'SERVICE=ST  LGWR  SYNC  NET_TIMEOUT=30' scope=both;

LGWR进程的ASYNC: 同LGWR(SYNC),主要区别是在于redo log传输为异步

   ☆☆☆上面讲的三种日志发送方式的具体解释见Data Guard 理论知识
   *****这时有同学要问AFFIRM是什么意思了,其实它决定归档日志写磁盘的方式,AFFIRM同步方式,noAFFIRM异步方式

1)利用LGWR SYNC和时实应用,实现redo(不是日志文件)时实传输与应用
   按照上面的理论,只要主库上配置为LGWR SYNC,那么完成事务后,也即commit后,LGWR会把redo写到online redo log里面,同时会把redo发送到standby,standby的
   RFS进程接收到这个日志后写入standby online redo log,再由MRPn进程立即应用到Standby DB中,这样就OK,不过在主库commit后,要等10s多的样子才能在备库看到
2)前人支招:
1、ARCH方式传送日志时,如果主备库密码文件不一致,在重新设置密码文件后,必须重启主库才能使日志传送恢复正常。
2、LGWR方式传送日志时,如果主备库密码文件不一致,在重新设置密码文件后,只需可以重启主库或重启备库就可使日志传送恢复正常。

 
注意事项:
    Arch:传统的日志传送方式。现在只有在最大性能模式时才能采用。归档日志通过primary上的arch进程传送给standby的RFS进程。
    LGWr:oracle9i开始可以使用LGWR即时将日志传送到standby,而不再需要等到归档操作时才传送,已减少可能的数据丢失。在三种保护模式下都可使用该方式传送日志。
          使用LGWR方式传送,在standby必须先建立standby redo logfile
    

Maximum Availability Maximum Performance Maximum Protection   
AFFIRM NOAFFIRM AFFIRM   
SYNC ASYNC SYNC   
DB_UNIQUE_NAME DB_UNIQUE_NAME DB_UNIQUE_NAME

注意Data Guard 启动顺序:
启动顺序:先standby ,后primary;
闭顺序:先primary 后standby;


四、利用RMAN搭建DG
    区别于COPY,不需求创建STANDBY控制文件,RMAN复制会自动创建。
    然后,再执行duplicate复制
    1)在主库上先进行来个全备
   RMAN> backup full database include current controlfile for standby plus archivelog FORMAT '/u02/backup/orcl_%U_%T'
          skip inaccessible filesperset 5 ;
   备库在NOMOUNT下,执行duplicate
   SQL> rman target system/medical@DGDH auxiliary system/medical@DGDHSTB;
2)不用duplicate的RMAN
   主库:
   rman>backup database format='/data/backup/rman_backup/%d_%s.bak';
   备库:
   rman>restore database;
   sys>alter database recover managed standby database disconnect from session;

五、常见的主库备库上的操作
    备库:
SQL>startup nomount;
SQL>alter database mount standby database ;
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
SQL>alter database recover managed standby database disconnect from session;



七、主备切换switchover
    主备切换的检查 
        SQL> select switchover_status from v$database;
主库需要注意事项
A 如果switchover_status为TO_STANDBY说明可以转换   直接转换:alter database commit to switchover to physical standby;
B 如果switchover_status为SESSIONS ACTIVE 则关闭会话   alter database commit to switchover to physical standby with session shutdown;

备库需要注意事项
A 如果switchover_status为TO_PRIMARY 说明标记恢复可以直接转换为primary库   alter database commit to switchover to primary
B 如果switchover_status为SESSION ACTIVE 就应该断开活动会话  alter database commit to switchover to primary with session shutdown;
C 如果switchover_status为NOT ALLOWED 说明切换标记还没收到,此时不能执行转换。

切换时如果不满足条件,请检查:   
确认主库和从库间网络连接通畅;
确认没有活动的会话连接在数据库中;
PRIMARY数据库处于打开的状态,STANDBY数据库处于MOUNT状态;
确保STANDBY数据库处于ARCHIVELOG模式;
如果设置了REDO应用的延迟,那么将这个设置去掉;
确保配置了主库和从库的初始化参数,使得切换完成后,DATA GUARD机制可以顺利的运行;
如果是最大保护模式,先变成最大性能模式。

切换的顺序:先从主库到备用,再从备库到主库

****注:10.2.0.1备库老是在not allowed状态,可能是BUG吧

八、failover

         
 


来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/25960404/viewspace-1104237/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2011-07-07

  • 博文量
    24
  • 访问量
    117411