搭建DataGuard环境

1. 确保源数据库在归档模式,并且是强制logging模式。
shutdown immediate ;
startup mount ;
alter database archivelog ;
alter database force logging ;
alter database open ;
2. 确保已经建立的密码文件。(确保能够远程登录(@xxx as sysdba)
cd $ORACLE_HOME/dbs/
查看是否已经建立了passwordfile .
若没有,执行下列命令。
这里要注意,oracle的密码文件都是存放在$ORACLE_HOME/dbs目录下面的。而且默认查找的时候会在目录下查找格式为orapw$ORACLE_SID文件名的密码文件,例如你的数据库名是dex,则使用下面的命令。
orapwd file=orapwdex password=xiaojun entries=20
最后验证一下,在tnsnames.ora中配置监听服务名,比如为dex70 然后执行
sqlplus sys/xiaojun@dex70 as sysdba
3. 创建standby logfile
ALTER DATABASE ADD STANDBY LOGFILE GROUP 4
('/dhome/orcl/oradata/dex/standby1.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 5
('/dhome/orcl/oradata/dex/standby2.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE GROUP 6
('/dhome/orcl/oradata/dex/standby2.log') SIZE 50M;


验证一下:
sys@DEX> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;


GROUP# THREAD# SEQUENCE# ARC STATUS
---------- ---------- ---------- --- ----------
4 0 0 YES UNASSIGNED
5 0 0 YES UNASSIGNED
6 0 0 YES UNASSIGNED
4. 修改源库的参数文件
先创建一个pfile
create pfile from spfile ;
会在$ORACLE_HOME/dbs/admin/init$ORACLE_SID.ora
加入如下内容






DB_NAME=dex
DB_UNIQUE_NAME=dex
#主备库设置
LOG_ARCHIVE_CONFIG='DG_CONFIG=(dex,dex_hell)'
#控制文件位置
CONTROL_FILES='/dhome/orcl/oradata/dex/control01.ctl','/dhome/orcl/oradata/dex/control02'
#归档目录1
LOG_ARCHIVE_DEST_1= 'location=/dhome/arch1/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=dex'
#归档目录2,使用用于远程同步日志文件
LOG_ARCHIVE_DEST_2= 'SERVICE=dex_hell LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=dex_hell'
#开启
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
#允许远程@ as sysdba 登陆
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30


#fail 配置 当目标数据库发生故障时,使用本地服务 这里都使用tnsnames中service名称
FAL_SERVER=dex_hell
FAL_CLIENT=dex
#file name 替换,可以是目录,也可以是单词。替换的目的是为了目标数据库发生故障的时候,目标数据的datafile和日志文件能够在本地找到副本。
DB_FILE_NAME_CONVERT='dex_hell','dex'
#这里的配置需要和实际库中相匹配,如果dex_hell fail无法访问时,需要置换logfile的位置。
LOG_FILE_NAME_CONVERT= '/arch1/dex/','/arch1/dex_hell/'
STANDBY_FILE_MANAGEMENT=AUTO


5. 通过pfile启动数据库,之后再创建spfile


startup nomount pfile='xxxx' ;
create spfile from pfile ;
shutdown immediate ;
startup mount ;
6. 主库中创建standby控制文件
alter database create standby controlfile as '/tmp/xxx.ctl' ;


7. copy 控制文件、数据文件、以及创建的pfile、还有密码文件到目标数据库(记得改名)。


8. 修改pfile (根据上面的脚本自行修改吧)。


9. 配置好两个数据库的监听服务,保证主库和备库都可以tnsping通,并且可以远程登录。


10. 启动数据库
export ORACLE_SID=xxx
startup nomount pfile=xxx
create spfile from pfile ;
shutdown immediate ;
startup mount ;


这里要注意 LOG_ARCHIVE_MAX_PROCESSES=30 ,这句定义的是最大的arch进程数,不管主库还是备库都要
提前检查一下process数量是不是足够。
使用 show parameter processes ;
不够的话需要重新设置并且重启(它是静态参数)


11. 同步开始了


ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;


12. 主库切换日志文件,验证备库能够同步日志。




13. 11g以后允许以只读方式打开数据库,并且支持实时查询。具体:




idle> alter database recover managed standby database cancel ;


Database altered.


idle> alter database open ;


Database altered.


idle> alter database recover managed standby database disconnect ;


这样standby库可以一边同步日志两边的数据库,一边可以对外提供查询服务。
standby库在被尝试修改数据的时候会报错:
ORA-16000: database open for read-only access


你可能感兴趣的:(dataguard)