原创 转载请注明出处
一、目标:
建立ORACLE DATAGUARD最大性能模式,能够在主库出现故障或者某些突发事件的情况下,进行平滑的切换,现将以团险的生产环境为列进行描述,主要描述搭建过程和切换过程。
二、规划:
主库:
IP:192.168.8.19
端口:1522
DB_NAME:GBIMSPRO
DB_UNIQUE_NAME:GBIMSSH
TNSNAME:GBIMSCQ
备库:
IP:192.168.31.130
端口:1521
DB_NAME:GBIMSPRO
DB_UNIQUE_NAME:GBIMSCQ
TNSNAME:GBIMSSH
三、配置
配置图
主库
1、 在/oradata目录下新建目录oragims用来存在新数据库的数据文件,控制文件等文件。
2、 准备主库的参数DB_NAME,用DBCA以主库的DB_NAME参数来建立数据库,建立初始化实例。
3、 创建PFILE,shutdown 数据库
4、 进行参数设置
主要设置的参数如下:
DB_UNIQUE_NAME:用来区分在DG环境中不同的数据库
LOG_ARCHIVE_CONFIG:用来说明DG环境中所有的数据库
LOG_ARCHIVE_DEST_1:一般用来设置为主库本地归档和备库接收远程归档的位置
LOG_ARCHIVE_DEST_2:一般用来设置为进行主库到备库传输的方式(主库必须)
LOG_ARCHIVE_DEST_STATE_n:用来指定LOG_ARCHIVE_DEST_n的状态
STANDBY_FILE_MANAGEMENT:设置为AUTO用来指定当主库增加数据文件的时候备库也同时增加。
ARCHIVE_LAG_TARGET:用来指定日志必须在指定的秒数切换。(主库必须)
FAL_SERVER:用来指定出现GAP的时候重哪里取归档日志。(备库可选)
FAL_CLENT:用来制动把GAP发送到哪里。(备库可选)
所以这里设置如下:
*.DB_UNIQUE_NAME='gbimssh'
*.log_archive_config='DG_CONFIG=(gbimssh,gbimscq)'
*.log_archive_dest_1='location=/home/oracle/archive_log VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=gbimssh'
*.log_archive_dest_2='service=gbimscq VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=gbimscq'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.FAL_SERVER=gbimscq
*.FAL_CLIENT=gbimssh
5、 启动主库并且使用ALTER DATABASE FORCE LOGGING来强制归档
6、 使用RMAN 进行全备份
7、 使用ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/boston.ctl';来创建备控制文件
备库
8、 在/oradata目录下新建目录oragims用来存在新数据库的数据文件,控制文件等文件。
9、 准备备库的参数DB_NAME,用DBCA以备库的DB_NAME参数建立数据库,建立初始化实例。
10、 创建PFILE,shutdown 数据库
11、 删除备库中所有的数据文件控制文件
12、 通过FTP传递RMAN备份集和备控制文件到备库中,目录要和主库相同。
13、 修改PFILE,为备库配置参数
设置如下:
*.DB_UNIQUE_NAME='gbimscq'
*.log_archive_config='DG_CONFIG=(gbimssh,gbimscq)'
*.log_archive_dest_1='location=/home/oracle/archive_log VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=gbimscq'
*.log_archive_dest_2='service=gbimssh VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=gbimssh'
*.log_archive_dest_state_1='enable'
*.log_archive_dest_state_2='enable'
*.STANDBY_FILE_MANAGEMENT='AUTO'
*.FAL_SERVER=gbimssh
*.FAL_CLIENT=gbimscq
14、 复制备控制文件为3个,满足initfile中的设置。
15、 使用INITFILE启动备库到nomount阶段
16、 使用RMAN TARGET / 来进行恢复数据库使用语句restore database
17、 配置TNSNAME主库到备库为gbimscq,备库到主库为gbimssh
18、 重启主备库,主库使用STARTUP 并且使用ALTER DATABASE FORCE LOGGING 来强制归档,备库使用STARTUP MOUNT 到MOUNT 阶段
19、 使用ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;来启动日志应用。
验证配置成功:
20、 在备库查看V$MANAGED_STANDBY视图来确定各个进程。
21、 在主库查看V$ARCHIVED_LOG来查看归档日志是否应用。
22、 在备库查看V$ARCHIVE_GAP是否有GAP。
23、 在主库查看V$DATAGUARD_CONFIG来查看所有的库信息
如何启动备库到OPEN状态然后恢复为STANDBY日志应用状态
24、 首先在备库停止日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
此时查看备库V$MANAGED_STANDBY发现MRP0日志应用进程已经消失。
25、 然后可以使用语句打开备库如下
ALTER DATABASE OPEN;
26、 关闭所有的会话运行如下语句来进行日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE
DISCONNECT FROM SESSION;
如果出现不能应用,可以使用SHUTDOWN IMMEDIATE来关闭备库,启动到mount状态,然后再进行日志应用。
四、SWITCH
如果参数设置合理我们的STANDBY是可以进行平滑切换的,进行SWITCH的步骤如下:
1、 在主库查看V$DATABASE中的 SWITCHOVER_STATUS字段。
2、 转换主库角色到备库角色使用语句
ALTER DATABASE COMMIT TO SWITCHOVER TO
PHYSICAL STANDBY WITH SESSION SHUTDOWN WAIT;
3、 关闭数据库并且启动到MOUNT阶段
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
4、在备库查看V$DATABASE中的 SWITCHOVER_STATUS字段,看是否为TO_PRIMARY
5、在备库执行ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY
来进行角色切换
6、关闭备库,启动备库
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP;
7、使用强制归档选项ALTER DATABASE FORCE LOGGING;
8、在主库开启日志应用
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;