oracle 备份恢复 09dataguard搭建与维护

1、搭建dataguard
结构规划
    主库:ipemsdb  备库:standby  实例:ipemsdb
1.主库打开Forced Logging模式和归档模式
    alter database [no] force logging;
    select log_mode,force_logging from v$database;
2.查询redo,增长standby日志(主库增长,拷贝至备库,均增长方便主备切换,默认比redo多一组,大小同样)
    select member from v$logfile;
    Alter database add standby logfile Group 10 '/u01/app/oracle/oradata/ipemsdb/onlinelog/redo10.log' size 50M;
    Alter database add standby logfile Group 11 '/u01/app/oracle/oradata/ipemsdb/onlinelog/redo11.log' size 50M;
    Alter database add standby logfile Group 12 '/u01/app/oracle/oradata/ipemsdb/onlinelog/redo12.log' size 50M;
    Alter database add standby logfile Group 13 '/u01/app/oracle/oradata/ipemsdb/onlinelog/redo13.log' size 50M;
    select group#, type, member from v$logfile where type = 'STANDBY';
    SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;
3.建立备库控制文件
    alter database create standby controlfile as '/u01/app/oracle/standby.ctl';
4.建立密码文件(在$ORACLE_HOME/dbs目录下建立)
    orapwd file=orapwipemsdb password=oracle entries=3 force=y
5.修改主库参数文件,主要关注如下内容
    create pfile from spfile;
*.remote_login_passwordfile='EXCLUSIVE'  #保证相同Data Guard配置中全部db服务器sys密码相同,默认便可
*.db_name='ipemsdb'     #同一个dg中全部的db_name要相同
*.DB_UNIQUE_NAME='ipemsdb'     #主备不一样,惟一标识各库
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=( ipemsdb, standby)'  #经过DG_CONFIG属性罗列同一个DG中全部DB_UNIQUE_NAME,以逗号分隔
*.log_archive_dest_1='LOCATION=/u01/arc_dir  DB_UNIQUE_NAME=ipemsdb'  #设置传输日志
*.log_archive_dest_2='SERVICE=standby  lgwr async noaffirm  DB_UNIQUE_NAME=standby'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE   #数值为ENABLE,标识对应的LOG_ARCHIVE_DEST_n参数是否有效
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_CLIENT='ipemsdb'   #指定本机的链接服务名
*.FAL_SERVER='standby'    #指定链接备库的链接服务名
*.service_names='ipemsdb'
*.STANDBY_FILE_MANAGEMENT='AUTO'   #自动管理主备库数据文件的修改html

    lgwr async noaffirm 参数下主库的模式保护级别为 RESYNCHRONIZATION 推荐方式
    lgwr sync affirm 参数下主库的模式保护级别为 MAXIMUMAVAILABILITY
6.修改主库监听listener.ora,修改主库网络服务tnsnames.ora
listener.ora
SID_LIST_LISTENER =
  (SID_LIST =
    (SID_DESC =
      (SID_NAME = PLSExtProc)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      (PROGRAM = extproc)
    )
    (SID_DESC =
      (GLOBAL_DBNAME =ipemsdb)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      ( SID_NAME = ipemsdb)
    )
    (SID_DESC =
      (GLOBAL_DBNAME =standby)
      (ORACLE_HOME = /u01/app/oracle/product/10.2.0/db_1)
      ( SID_NAME = standby)
    )
  )sql

LISTENER =
  (DESCRIPTION_LIST =
    (DESCRIPTION =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))
    )
  )
  
tnsnames.ora
standby =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.200)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ipemsdb)
    )
  )数据库

ipemsdb =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.100)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = ipemsdb)
    )
  )服务器

EXTPROC_CONNECTION_DATA =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
    )
    (CONNECT_DATA =
      (SID = PLSExtProc)
      (PRESENTATION = RO)
    )
  )网络

7.拷贝主库参数文件,密码文件,生成的备库控制文件,监听及网络文件至备库
    scp initipemsdb.ora orapwipemsdb 192.168.0.200:/u01/app/oracle/product/10.2.0/db_1/dbs
    scp standby.ctl 192.168.0.200:/u01/app/oracle/
    scp tnsnames.ora  listener.ora  192.168.0.200:/u01/app/oracle/product/10.2.0/db_1/network/admin/
8.修改备库参数文件(控制文件能够修改路径,也能够复制多份,放到指定路径)
*.control_files='/u01/app/oracle/oradata/ipemsdb/controlfile/controlfile_standby.ctl'#Restore Controlfile
*.db_name='ipemsdb'
*.DB_UNIQUE_NAME='standby'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=( ipemsdb, standby)'
*.log_archive_dest_1='LOCATION=/u01/arc_dir  DB_UNIQUE_NAME=standby'
*.log_archive_dest_2='SERVICE=ipemsdb   DB_UNIQUE_NAME=ipemsdb'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.FAL_CLIENT='standby'
*.FAL_SERVER='ipemsdb'
*.service_names='standby'
*.STANDBY_FILE_MANAGEMENT='AUTO'
9.参照参数文件,在备库建立必要目录,将主库数据文件,日志文件拷贝至备库
    mkdir -p /u01/app/oracle/admin/ipemsdb/adump
    scp -r oradata 192.168.0.200:/u01/app/oracle
10.修改备库的listener.ora主机IP,测试主备网络互连
启动主备监听
    lsnrctl stop
    lsnrctl start
    tnsping  ipemsdb
    tnsping  standby
11.主备分别经过pfile建立spfile
    create spfile from pfile;
主库:
    startup mount;
    alter database archivelog;
    alter database open;
备库:
    startup mount;
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
12.测试
a.主库归档日志,查询确认主从库的归档目录是否更新
    alter system archive log current;
    select max(sequence#) from v$archived_log;
    select * from (select RECID,NAME,SEQUENCE#,APPLIED from v$archived_log order by RECID desc) where rownum<5;
b.若是从库未更新
    alter database recover managed standby database cancel;
    alter database recover managed standby database disconnect from session;
c.DML操做对象,确认主备是否一致(主库建立表,插入数据,提交,归档,从库read only打开,查看确认一致性)
    insert into scott.dg2(3);
    alter system archive log current;
    alter database recover managed standby database cancel;
    alter database open read only;
再次开启日志同步redo模式
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;session

参考资料:
http://www.cnblogs.com/tippoint/archive/2013/04/18/3029019.html
http://www.5ienet.com/note/html/dg/index.shtmloracle

2、dataguard相关理论
一、用于构建高可用的企业数据库应用环境。同一个Data Guard配置包含一个 Primary 数据库和最多九个 Standby 数据库。
Standby数据库初始能够经过primary数据库的备份建立。建立并配置成standby后,dg负责传输primary数据库redo data到
standby数据库,standby数据库经过RFS进程接收primary数据库的redo,保存在本地,就是Standby redo logs保持与primary
数据库的事务一致。
二、同步的机制:
逻辑standby是经过接收primary数据库的redo log并转换成sql语句,而后在standby数据库上执行SQL语句(SQL Apply)实现同步;
物理standby是经过接收并应用primary数据库的redo log以介质恢复的方式(Redo Apply)实现同步。
三、dg的服务
a、REDO 传输服务(Redo Transport Services):控制redo数据的传输到一个或多个归档目的地。
b、Log 应用服务(Log Apply Services):应用redo数据到standby数据库,以保持与primary数据库的事务一致。redo数据便可以
从standby数据库的归档文件读取,也可直接应用standby redo log文件(若是实时应用打开了的话)。
c、角色转换服务(Role Transitions):Dg 中只有两种角色:primary和standby。所谓角色转换就是让数据库在这两个角色中切
换,切换也分两种:switchover和failover
    switchover :转换primary数据库与standby数据库。switchover能够确保不会丢失数据。
    failover:当primary数据库出现故障而且不能被及时恢复时,会调用failover将一个standby数据库转换为新的primary数据库。
四、DG的保护模式
    DG默认是最大性能模式(maximize performance),主库的redo只有归档后才会传输到备库,若是主库归档前down掉会丢失
未归档数据,备库的日志不可达不会影响主库的可用性。
    最大保护模式(maximize protection),备库一旦没法接收日志,主库的全部操做都会被挂起,备库日志恢复时才会恢
复,不会丢失数据,须要standby redo文件,生产库不多使用;
    最大可用模式(maximize availability),当与备库的日志传输断开时,主库会自动切换到最大性能模式,正常不会丢失数据
除非刚降至最大性能模式,在standby不可用时主库会自动降为最大性能模式,standby恢复后会自动切换回最大可用模式,须要
standby redo file。app

3、平常维护 
一、正确打开,先开备库再开主库
备库:
    startup nomount;
    alter database mount standby database; 
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;  #启动备用模式
主库: 
    STARTUP MOUNT; 
    ALTER DATABASE ARCHIVELOG;
    ALTER DATABASE OPEN;
二、正确关闭顺序(先关主库,再管备库) 
主库 
    SHUTDOWN IMMEDIATE;
备库: 
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;  #中止日志恢复模式
    SHUTDOWN IMMEDIATE;
三、DG启动后主备信息状态查询
查出日志归档路径
    select DEST_NAME,STATUS,DESTINATION,error from v$archive_dest;
查询主备库归档日志归档状况(主库每组有两条)
    select name,SEQUENCE#,APPLIED from v$archived_log order by recid asc;
在备库检查是否有日志缺失
    select * from v$archive_gap;
丢失日志的手动注册
    将主库归档文件拷贝至备库(10G拷贝后会自动注册)
    alter database register physical logfile '/u01/arc_dir/1_12_895613678.dbf';
    alter database recover automatic standby database;
查询主备库上的进程信息
    select process,status from v$managed_standby;
查看dataguard的状态信息
    select message_num,message from v$dataguard_status;    
查询主备状态
    select database_role,PROTECTION_MODE,PROTECTION_LEVEL from v$database;
    主:PRIMARY          SESSIONS ACTIVE 
    备:PHYSICAL STANDBY NOT ALLOWED
查询备库进程信息,RFS - 远程文件接收进程,MRP0 -日志应用进程
    select process,status from v$managed_standby;async

4、模式切换
一、切换保护模式
根据切换模式须要给主备库增长standby redo files,修改pfile中日志同步方式
在主库处于mount状态下切换保护模式
    ALTER DATABASE SET STANDBY DATABASE TO maximize protection[|maximize performance|maximize availability];
最大可用或最大保护模式下的实时同步
    alter database recover managed standby database using current logfile disconnect from session;
二、switchover主备人工切换,先主后从
主库:
    select DATABASE_ROLE from v$database;   --PRIMARY
    select SWITCHOVER_STATUS from v$database;
若是是to standby表能够正常切换.直接执行
    alter database commit to switchover to physical standby;
不然执行
    alter database commit to switchover to physical standby with session shutdown;
    shutdown immediate;
    startup nomount;
    alter database mount standby database;
    alter database recover managed standby database disconnect from session;    
    select DATABASE_ROLE from v$database;       --PHYSICAL STANDBY
    select SWITCHOVER_STATUS from v$database;   --TO PRIMARY
备库
    select DATABASE_ROLE from v$database;       --PHYSICAL STANDBY
    select switchover_status from v$database;
若是是to_primary表能够正常切换.执行
    alter database commit to switchover to primary;
不然执行
    alter database commit to switchover to primary with session shutdown;
    shutdown immediate;
    startup;
三、failover切换
判断主数据库确实出现严重的硬件故障或其余缘由致使主数据库没法启动。
    SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;
消除archive redo log gaps从主数据库上或其余备份的地方把没有传到物理备用数据库的archive redo log传到物理备
用数据库上,并注册到物理备用数据库的controlfile中。重复2,3步骤直到V$ARCHIVE_GAP视图无记录存在。
    ALTER DATABASE REGISTER PHYSICAL LOGFILE 'archive redo log文件名称';
在物理备用数据库上发起failover操做
    ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE;
把物理备用数据库转化成主用角色
    ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;
把新的主用数据库从新启动
    SHUTDOWN IMMEDIATE;
    STARTUP;
对新的主用数据库作全备份性能

参考资料: http://blog.csdn.net/lenovouser/article/details/7516582 http://blog.163.com/scott_guo/blog/static/18102608320121111113518691/

相关文章
相关标签/搜索