rac下standby的实现
rac环境下standby数据库的实现
生产环境:
操作系统:RedHat AS3.0
数据库:Oracle 9.2.0.4 RAC
存储:普通阵列
一、数据库首次同步
1.1数据文件同步
因为生产库的数据库文件是建立在裸设备上,使用DD方式进行同步比较困难,这里使用RMAN方式进行同步。
(以下操作在生产库主机上)
a、在一个生产主机节点上,把生产库启动到MOUNT状态,然后库使用rman对全库进行备份,产生的备份集piece放在/rman_bk目录下。
b、改变/rman_bk的权限
# chmod 777 /rman_bk
c、共享此目录,编辑/etc/exports文件,添加如下内容:
/rman_bk *(rw,async)
(然后重新启动NFS服务)
#service nfs start
d、产生一个备份的控制文件(用RMAN恢复的时候使用),产生一个STANDBY控制文件。
SQL>ALTER DATABASE BACKUP CONTROLFILE TO '/rman_bk/control.bk';
SQL>ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/rman_bk/control.stdby';
e、产生一个pfile文件
SQL>create pfile='/rman_bk/initcuug.ora' from spfile='/oracle/product/9.2.0.4/dbs/spfilecuug.ora';
(以下操作在standby主机上)
f、在standby主机上把远程的共享挂接上,挂接点与生产主机一样(否则rman恢复时找不到路径):
#mount 192.168.8.91:/rman_bk /rman_bk
g、以oracle用户身份,把生产数据库的初始化参数文件复制到$ORACLE_HOME/dbs目录下,并改名为initstdby.ora,然后屏蔽里面的几个参数:
#*.cluster_database=true
#cuug2.local_listener='LISTENER_CUUG2'
#cuug1.local_listener='LISTENER_CUUG1'
#*.remote_listener='LISTENERS_CUUG'
h、添加如下几个参数:
lock_name_space=stdby
remote_archive_enable=TRUE
standby_archive_dest='/oracle/stdby_arch'
db_file_name_convert=('/oracle/oradata/cuug','/oracle/oradata/cuug')
log_file_name_convert=('/oracle/oradata/cuug','/oracle/oradata/cuug')
standby_file_management=AUTO
i、把生产库产生的控制文件复制到制定的目录下,启动stdby实例,并且挂接数据库。
j、恢复数据文件到standby主机中:
$rman target /
RMAN> restore database;
k、关闭实例,把控制文件删除,复制standby控制文件到制定位置,并把standby控制文件改名,然后启动实例:
SQL> STARTUP NOMOUNT;
SQL> ALTER DATABASE MOUNT STANDBY DATABASE;
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;
(以下操作在生产库主机上)
l、编辑生产库的初始化参数文件
$sqlplus '/as sysdba'
SQL>alter system set log_archive_dest_2='SERVICE=stdby';
m、重新启动数据库
$srvctl start database -d cuug
n、检查各个节点上的归档是否正常,切换生产库的日志,查看standby主机是否归档成功,并且是否正常recovery(通过监视警告日志文件来实现)
总结:如果大家以前做过单机上的standby数据库,那么做这个试验就很简单了,主要就是首次同步的方式比较重要。