为了最大的降低硬件需求,此处创建的data guard处于同一台机器,但其创建过程与多机并无区别。做为演示用的示例足够了,我们分两阶段配置,分别是配置primary数据库和配置standby数据库,如下:

一、 Primary 数据库配置及相关操作

1、 确认主库处于归档模式

    SQL> archive log list;

    数据库日志模式            存档模式

    自动存档             启用

    存档终点            E:\ora10g\oradata\jssweb

    最早的联机日志序列     148

    下一个存档日志序列   150

    当前日志序列           150

    SQL>

2、 将primary数据库置为FORCE LOGGING模式。通过下列语句:

    SQL> alter database force logging;

    数据库已更改。

3、 创建standby数据库控制文件

    SQL> alter database create standby controlfile as ¨d:\backup\jsspdg01.ctl¨;

    数据库已更改。

4、 创建primary数据库客户端初始化参数文件

  注:主要此处修改项较多,为了方便,我们首先创建并修改pfile,然后再通过pfile重建spfile,你当然也可以通过alter system set命令直接修改spfile内容。

    SQL> create pfile   from spfile;

    文件已创建。

  将该初始化参数文件复制一份,做为standby数据库的客户端初始化参数文件

    SQL> host copy e:\ora10g\product\10.2.0\db_1\database\initjssweb.ora d:\backup\initjsspdg.ora

    已复制         1 个文件。

    SQL>

  修改客户端初始化参数文件,增加下列内容

    DB_UNIQUE_NAME=jssweb

    LOG_ARCHIVE_CONFIG=¨DG_CONFIG=(jssweb,jsspdg)¨

    LOG_ARCHIVE_DEST_1=¨LOCATION=E:\ora10g\oradata\jssweb\ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jssweb¨

    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=jss pdg

    FAL_CLIENT=jss web

    DB_FILE_NAME_CONVERT=¨oradata\jsspdg¨,¨oradata\jssweb¨

    LOG_FILE_NAME_CONVERT=¨oradata\jsspdg¨,¨ oradata \jssweb¨

    STANDBY_FILE_MANAGEMENT=AUTO

  通过pfile重建spfile

    SQL> shutdown immediate

    ...

    SQL> create spfile from pfile=¨initjssweb.ora¨;

    文件已创建。

5、 复制数据文件到standby服务器(方式多样,不详述)

  注意需要复制所有数据文件,备份的控制文件及客户端初始化参数文件

6、 配置listener及net service names(方式多样,不详述)。

  完之后重启listener:

    E:\ora10g>lsnrctl stop

    E:\ora10g>lsnrctl start

  通过tnsping测试tnsnames是否正确有效:

    E:\ora10g>tnsping jssweb

    ...

    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = jss)(PORT = 1521)) (CONNECT_

    DATA = (SERVER = DEDICATED) (SERVICE_NAME = jssweb)))

    OK (30  毫秒)

    E:\ora10g>tnsping jsspdg

    ...

    Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = jss)(PORT = 1521)) (CONNECT_

    DATA = (SERVER = DEDICATED) (SERVICE_NAME = jsspdg)))

    OK (10  毫秒)

二、 Standby 数据库配置及相关操作

1、 通过ORADIM创建新的OracleService

2、 创建密码文件,注意保持sys密码与primary数据库一致。

    E:\ora10g>orapwd file=e:\ora10g\product\10.2.0\db_1\database\PWDjsspdg.ora password=verysafe entries=30

3、 创建目录

    E:\ora10g\product\10.2.0\admin\jsspdg>mkdir adump

4、 复制文件,不做过多描述

5、 修改初始化参数文件

  增加下列参数:

    db_unique_name=jsspdg

    LOG_ARCHIVE_CONFIG=¨DG_CONFIG=(jssweb,jsspdg)¨

    DB_FILE_NAME_CONVERT=¨oradata\jssweb¨,¨oradata\jsspdg¨

    LOG_FILE_NAME_CONVERT=¨oradata\jssweb¨,¨oradata\jsspdg¨

    LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc

    LOG_ARCHIVE_DEST_1=¨LOCATION=E:\ora10g\oradata\jsspdg\ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=jsspdg¨

    LOG_ARCHIVE_DEST_STATE_1=ENABLE

    #--- 下列参数用于角色切换

    LOG_ARCHIVE_DEST_2=¨SERVICE=jssweb LGWR ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)  DB_UNIQUE_NAME=jssweb¨

    LOG_ARCHIVE_DEST_STATE_2=ENABLE

    REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

    FAL_SERVER=jssweb

    FAL_CLIENT=jsspdg

    STANDBY_FILE_MANAGEMENT=AUTO

  注意同时修改*_dest的路径。

  通过该pfile创建spfile

    SQL> create spfile from pfile=¨D:\backup\initjsspdg.ora¨;

    文件已创建。

6、 启动standby到mount

    SQL> startup mount;

    ORACLE  例程已经启动。

    Total System Global Area  167772160 bytes

    Fixed Size                  1289484 bytes

    Variable Size              62915316 bytes

    Database Buffers           96468992 bytes

    Redo Buffers                7098368 bytes

    数据库装载完毕。

7、 启动redo应用

    SQL> alter database recover managed standby database disconnect from session;

    数据库已更改。

8、 查看同步情况

  首先连接到primary数据库

    SQL> show parameter instance_name;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    instance_name                        string      jssweb

    SQL> alter system switch logfile;

    系统已更改。

    SQL> select max(sequence#) from v$archived_log;

    MAX(SEQUENCE#)

    --------------

                51

  连接到standby数据库

    SQL> show parameter instance_name;

    NAME                                 TYPE        VALUE

    ------------------------------------ ----------- ------------------------------

    instance_name                        string      jsspdg

    SQL> select max(sequence#) from v$archived_log;

    MAX(SEQUENCE#)

    --------------

                51

9、 暂停应用

  通过下列语句暂停redo应用。

    SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

    数据库已更改。

  注意,此时只是暂时redo应用,并不是停止Standby数据库,standby仍会保持接收只不过不会再应用接收到的归档,直到你再次启动redo应用为止。

  哈哈,成功鸟!现在你是不是想知道怎么把standby变成primary呢?接着往下看~~~~~~~~~