建立DATAGUARD最大保护模式(自写)
(备注:本文档符合最大保护模式,所有参数均为最大保护模式下适用,其他模式不适用)
1、主库,启动归档,打开强制归档。
alter database archivelog;
alter database force logging;
2、创建standby日志。
alter database add standby logfile group 4 ('D:\oracle\product\10.2.0\oradata\orcl\standbyredo04.log') size 50m;
3、创建备库用的控制文件。
alter database create standby controlfile as 'd:\standbycontrol01.ctl';
4、创建pfile参数文件。
create pfile from spfile;
5、修改主库pfile参数文件。
增加以下内容:
*.DB_UNIQUE_NAME='PRIMARY'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIMARY,STANDBY)'
*.LOG_ARCHIVE_DEST_1='LOCATION=D:\oracle\product\10.2.0\oradata\ARCH\ MANDATORY REOPEN=60 MAX_FAILURE=3 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRIMARY'
*.LOG_ARCHIVE_DEST_2='SERVICE=STANDBY LGWR SYNC AFFIRM VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STANDBY'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=ORCL_%T_%S_%R.ARC
*.FAL_CLIENT = 'PRIMARY'
*.FAL_SERVER = 'STANDBY'
*.STANDBY_FILE_MANAGEMENT =AUTO
用pfile参数文件启动后,创建spfile文件,然后用spfile启动数据库。
6、修改主库listener和net解析配置文件。(这部分主要的目的是要保证两边数据库要互相能够登录,所以在启动DG之前,一定要用从各自主机上用sqlplus登录,尝试能不能登录,记得用sys用户登录要加上as sysdba,否则会报异常错误,由于备库会处于mount状态,经过验证,在mount下,动态注册监听会导致远程sqlplus用sys用户登录会报错,所以备库还是使用静态注册监听)(NET部分配置,可以使用NETCA来配置,只是从主库上建立到备库的连接时,由于没有启动或者处于mount状态,只能用sys用户来做测试,输入本地服务名主要和log_archive_dest_2中的service后面的服务名相关,要一样才能让主库进行解析,备库一样配置的目的,主要为了切换之后可以正常使用.)
由于备库没有启动,所以用netca配置可能不灵光,还是推荐直接用配置文件的方式做。
listener.ora配置
SID_LIST_LISTENER =
(SID_LIST =
下增加: (SID_DESC =
(SID_NAME = orcl)
(ORACLE_HOME = D:\oracle\product\10.2.0\db_1)
(PROGRAM = orcl)
)
就是增加一个静态监听注册,其实主库可以不这样配置,但是为了以后切换之后,可以正常使用,所以还是按照standby数据要求来配置。
tnsnames.ora配置
增加:
PRIMARY =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.10)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST =192.168.1.11)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
7、复制文件到备库:数据库数据文件,生成出来的控制文件,做好的pfile参数文件,日志文件,以及修改过的listener.ora和tnsnames.ora。这里和网上的不太一样,但是我推荐还是将联机日志文件全部复制到备库。
8、修改备库上的pfile文件
*.DB_UNIQUE_NAME='STANDBY'
*.LOG_ARCHIVE_CONFIG='DG_CONFIG=(PRIMARY,STANDBY)'
*.LOG_ARCHIVE_DEST_1='LOCATION=D:\oracle\product\10.2.0\oradata\ARCH\ MANDATORY REOPEN=60 MAX_FAILURE=3 VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=STANDBY'
*.LOG_ARCHIVE_DEST_2='SERVICE=PRIMARY LGWR SYNC AFFIRM VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=PRIMARY'
*.LOG_ARCHIVE_DEST_STATE_1=ENABLE
*.LOG_ARCHIVE_DEST_STATE_2=ENABLE
*.REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
*.LOG_ARCHIVE_FORMAT=ORCL_%T_%S_%R.ARC
*.FAL_CLIENT = 'STANDBY'
*.FAL_SERVER = 'PRIMARY'
*.STANDBY_FILE_MANAGEMENT =AUTO
9、检查listener.ora和tnsnames.ora文件配置是否正确,主要可能是目录不太一样。
10、将控制文件复制2份,复制到和主库一样的位置,并且文件名改成和主库一样的。
11、将数据文件复制到和主库一样的位置。
12、将修改好的pfile参数文件,复制到db_1\database下。
13、将listener.ora和tnsnames.ora复制到到db_1\network\admin下。
14、备库上的文件夹要创建和主库一样的。主要有D:\oracle\product\10.2.0\admin\orcl下的6个文件夹,D:\oracle\product\10.2.0\flash_recovery_area,D:\oracle\product\10.2.0\oradata下的数据文件存放文件夹及归档日志文件夹。
15、pfile、listener.ora、tnsnames.ora修改检查复制完成,数据文件、联机日志文件及控制文件复制完成之后,可以开始了。
16、创建服务:oradim -new -sid orcl -startmode m
17、生成密码文件:orapwd file='D:\oracle\product\10.2.0\db_2\database\pwdorcl.ora' password=XXXX entris=5;
18、用pfile参数文件启动数据库到mount状态,创建spfile,然后用spfile重新启动到mount状态,由于在复制过来的时候,带过来了关于standby日志的配置,这里最好是删除之后重新建立:
alter database drop standby logfile group 4;
alter database add standby logfile group 4 ('D:\oracle\product\10.2.0\oradata\orcl\standbyredo04.log') size 50m;
19、启动备库中的redo实时应用:
alter database recover managed standby database using current logfile disconnect from session;
19、回到主库:
用sqlplus来检查一下standby 数据库能不能正常登陆。记得用SYS用户登录,加上as sysdba。
20、启动主库到mount状态,mount状态下修改主库到最大保护模式:
alter database set standby database to maximize protection;
21、启动正常,说明DG建立成功。
22、数据库切换
主库执行:
Alter database commit to switchover to phiscal standby with session shutdown;
Shutdown immediate
Startup mount
备库执行:
Alter databse commit to switchover to primary;
可能需要执行一下redo应用之后,才能切换
Alter databse recover managed standby database disconnect from session;
Alter databse commit to switchover to primary;
主要是备库切换过来之后,由于是双向都是最大保护,所以要备库能连接到主库,所以首先要在备库上执行sqlplus,看看能不能正常登录到主库,也有可能登录不上,那么有可能是主库的listener.ora的服务名不一样,将备库中tnsnames.ora中的service_name改成要主库一样的就可以了,这主要是因为主库和备库都配置了db_unique_name,listener.ora有netca配置的时候,可能会将db_unique_name配置为服务名,但是oracle_sid还是orcl,这个要务必注意。
总结 :
一、DG主要,是有参数文件的参数来确定,只要正确,建立一般没有问题,每种DG保护模式参数都不一样,不能套用。
二 、DG启动,则是有SQLPLUS命令来控制的,参数正确,命令执行就没有问题。
三、DG中的NET部分非常重要,很多错误可能会发生在NET配置部分,由于DB_UNIQUE_NAME的设立,可能会导致listener.ora中的配置和一般的不一样,也就是里面的服务名和oracle_sid 不一定是一样的,这点要注意,如果不一样,也需要改动太多,只要将对面的数据库(主库或者备库)中的tnsnames.ora中的service_name改成一样就可以了,尽量不要修改太多。
本 文档 已经经过3次验证,没有问题,如果有错误,一定要仔细看看参数是否正确,配置是否一致,NET部分是否支持相互正常登录。再三提醒,本文档中的参数,只适合DG最大保护模式,其他模式,可能需要更改.
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/9606200/viewspace-757947/,如需转载,请注明出处,否则将追究法律责任。