为了最大的降低硬件需求,此处创建的data guard处于同一台机器,但其创建过程与多机并无差别。我们分两阶段配置,分别是配置primary数据库和standby 数据库。
一、Primary数据库配置及相关操作
1. 确认主库处于归档模式
如果不是归档模式,通过以下方式进行设置
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
2. 将Primary数据库置为force logging模式。
SQL> alter database force logging;
3. 创建standby数据库控件文件
SQL> alter database create standby controlfile as 'c:\LearnOracle\backup\jsspdg01.ctl';
4. 创建primary数据库客户端初始化参数文件
此处修改项较多,我们直接创建并修改pfile,然后再通过pfile重建spfile,当然也可以通过alter system set 命令直接修改spfile内容。
SQL> create pfile from spfile;
并将该初始化参数文件复制一份做为standby数据库的客户端初始化参数文件
SQL> host copy c:\oracle\dbs\pfileORCL.ora c:\LearnOracle\backup\initjsspdg.ora
修改客户端初始化参数文件,地曾加下列内容:
DB_UNIQUE_NAME=orcl
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,jsspdg)'
LOG_ARCHIVE_DEST_1='LOCATION=c:\oradata\orcl\
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_2='SERVICE=jsspdg LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=jsspdg'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
#--------配置standby 角色的参数用于角色转换
FAL_SERVER=jsspdg
FAL_CLIENT=orcl
DB_FILE_NAME_CONVERT='oradata\jsspdg','oradata\orcl'
LOG_FILE_NAME_CONVERT='oradata\jsspdg','oradata\orcl'
STANDBY_FILE_MANAGEMENT=AUTO
通过pfile重建spfile
SQL> shutdown immediate
...
SQL> create spfile from pfile='initORCL.ora';
5. 配置listener及net service names
二、Standby数据库配置及相关操作
1. 通过ORADIM创建新的OracleService
ORADIM -new -sid jsspdg
2. 创建密码文件,注意保持sys密码与primary数据库一致
orapwd file=c:\database\PWDjsspdg.ora password=oracle entries=30
3. 创建目录
C:\oracle\admin\jsspdg>mkdir adump
4. 修改初始化参数文件
db_unique_name=jsspdg
LOG_ARCHIVE_CONFIG='DG_CONFIG=(orcl,jsspdg)'
DB_FILE_NAME_CONVERT='oradata\orcl','oradata\jsspdg'
LOG_FILE_NAME_CONVERT='oradata\orcl','oradata\jsspdg'
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1='LOCATION=c:\oradata\jsspdg\
VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jsspdg'
LOG_ARCHIVE_DEST_STATE_1=ENABLE
#---下列参数用于角色切换
LOG_ARCHIVE_DEST_2='SERVICE=orcl LGWR ASYNC
VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=orcl'
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
FAL_SERVER=orcl
FAL_CLIENT=jsspdg
STANDBY_FILE_MANAGEMENT=AUTO
注意同时修改*_dest的路径
通过该pfile创建spfile
SQL> create spfile from pfile='C:\learnOracle\backup\initjsspdg.ora';
5. 启动standby到nomount
SQL> startup nomount;
6. 复制文件
a). 连接到primary和standby数据
set oracle_sid=jsspdg
RMAN target sys/oracle@orcl auxiliary/
b). 创建standby控制文件
RMAN> copy current controlfile for standby to 'c:\oradata\jsspdg\control01.ctl';
c). 生成standby数据库
RMAN> duplicate target database for standby;
d). 重建临时表空间数据
如果standby数据库不会转为primary就无需创建。
SQL>alter tablespace temp add tempfile 'c:\oradata/jsspdg/temp01.dbf' size 100M
e). 创建适当的日志文件组
一般而言,standby redo 日志文件组数要比primary 数据库的online redo 日志文件组数至少多一个
SQL> alter database add standby LOGFILE GROUP 4 ('c:\ORADATA/jsspdg/pdg_red04.log') SIZE 100M, GROUP 5 ('c:\ORADATA/jsspdg/pdg_red05.log') SIZE 100M, GROUP 6 ('c:\ORADATA/jsspdg/pdg_red06.log') SIZE 100M,
删除一个日志文件组
SQL> alter database drop standby logfile group 6
另外,从可靠性方面考虑,建议在primary 数据库也创建standby redologs,这样一旦发生切换,不会影响primary 做为standby 的正常运行。
7. 启动redo应用
SQL> alter database recover managed standby database disconnect from session;
8. 查看同步情况
首先连接到primary数据库
SQL> show parameter instance_name;
..
SQL> alter system switch logfile;
...
SQL> select max(sequence#) from v$archived_log;
连接到standby数据库
SQL> show parameter instance_name;
...
SQL> select max(sequence#) from v$archived_log;
9. 暂停应用
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
注意,此时只是暂时redo应用,并不是停止standby数据库,standby仍会保持接收只不过不会再应用接收到的归档,直到你再次启动redo应用为止。