物理备库的搭建过程:
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
| 注: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/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/25960404/viewspace-1104237/