一、搭建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' #自动管理主备库数据文件的修改
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)
)
)
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;
参考资料:
http://www.cnblogs.com/tippoint/archive/2013/04/18/3029019.html
http://www.5ienet.com/note/html/dg/index.shtml
二、dataguard相关理论
1、用于构建高可用的企业数据库应用环境。同一个Data Guard配置包含一个 Primary 数据库和最多九个 Standby 数据库。
Standby数据库初始可以通过primary数据库的备份创建。创建并配置成standby后,dg负责传输primary数据库redo data到
standby数据库,standby数据库通过RFS进程接收primary数据库的redo,保存在本地,就是Standby redo logs保持与primary
数据库的事务一致。
2、同步的机制:
逻辑standby是通过接收primary数据库的redo log并转换成sql语句,然后在standby数据库上执行SQL语句(SQL Apply)实现同步;
物理standby是通过接收并应用primary数据库的redo log以介质恢复的方式(Redo Apply)实现同步。
3、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数据库。
4、DG的保护模式
DG默认是最大性能模式(maximize performance),主库的redo只有归档后才会传输到备库,如果主库归档前down掉会丢失
未归档数据,备库的日志不可达不会影响主库的可用性。
最大保护模式(maximize protection),备库一旦无法接收日志,主库的所有操作都会被挂起,备库日志恢复时才会恢
复,不会丢失数据,需要standby redo文件,生产库很少使用;
最大可用模式(maximize availability),当与备库的日志传输断开时,主库会自动切换到最大性能模式,正常不会丢失数据
除非刚降至最大性能模式,在standby不可用时主库会自动降为最大性能模式,standby恢复后会自动切换回最大可用模式,需要
standby redo file。
三、日常维护
1、正确打开,先开备库再开主库
备库:
startup nomount;
alter database mount standby database;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; #启动备用模式
主库:
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;
2、正确关闭顺序(先关主库,再管备库)
主库
SHUTDOWN IMMEDIATE;
备库:
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; #停止日志恢复模式
SHUTDOWN IMMEDIATE;
3、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;
四、模式切换
1、切换保护模式
根据切换模式需要给主备库增加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;
2、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;
3、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/