DG - 物理Standby创建

为了最大的降低硬件需求,此处创建的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应用为止。

posted @ 2012-07-31 20:41  南宫元耘  阅读(1108)  评论(0编辑  收藏  举报