主数据库: windows English XP; 版本 ora9i ( 9.2.0.1.0 ); IP 地址 192.168.1.38 ;主机名: CISCOSYS ;实例 SID : PRIMARY
备用数据库: windows English XP; 版本 ora9i ( 9.2.0.1.0 ); IP 地址 192.168.1.111 ;主机名: CISCOROUTER ;实例 SID : STANDBY
二:运行 Data Guard 的条件
1 、 在主数据库和备用数据库的所有机器上必须安装同一个版本的 Oracle 企业版。: SELECT * FROM V$VERSION ;
2 、 主数据库必须运行在归档模式下,推荐主和备用数据库都是 force Logging 模式,这样方便双向自由切换: ALTER DATABASE FORCE LOGGING;
3 、 主数据库和备用数据库的操作系统必须一样(允许版本不同),备用数据库可以使用与主数据库不同的目录结构, ORACLE 推荐使用相同的目录结构。
4 、 主备用数据库硬件系统的体系结构必须相同,但允许主备数据库硬件的配置可以不同如: CPU 数量、内存大小、存储 配置等。
5 、 主备数据库可以是单实例的数据库,也可以是多实例的 RAC 数据库。
6 、 每个主备数据库必须有它自己的控制文件, ORACLE NET 不同,必须分别修改。
三:运行 Data Guard 的具体步骤
1 、主数据库和备用数据库的 Oracle 安装的时候都选择相同的安装路径 D:/oracle/ora92 ;并且先不要安装数据库,即在安装过程中 “ 数据库配置 ” 一项下面选择 “ 只安装软件 ” ;
2 、在主数据库上使用 DBCA 命令建一个数据库, SID 设为 PRIMARY ;
3 、设置主数据库归档路径为 D:/oracle/ora92/database/Archive : SQL>alter system set log_archive_dest_1='LOCATION=d:/oracle/ora92/database/Archive MANDATORY' scope=both;
4 、将主数据库实例、数据库关闭,然后启动实例,但不打开数据库,只启动到数据库挂载模式 : SQL>shutdown immediate; SQL>startup mount;
5 、将主数据库设置成归档状态和自动归档模式: SQL>alter database archivelog; SQL>alter system set log_archive_start=true scope=spfile;
6 、在主数据库上面创建备用数据库的控制文件 standby.ctl : SQL>alter database create standby controlfile as 'd:/oracle/oradata/standby.ctl';
7 、在主数据库上面创建备用数据库的初始化参数文件 standby.ora (将其拷贝回备用数据库后转换成备用数据库的 spfile ): SQL>create pfile='e:/oracle/oradata/standby.ora' from spfile;
8 、查看主数据库的数据文件及其的位置: SQL>select name from v$datafile; 记下查询结果中的数据文件的位置。
9 、关闭实例: SQL>shutdown immediate;
10 、将第 6 步中的 standby.ctl 、第 7 步中的 standby.ora 和第 8 步骤中的数据文件、还有 D:/oracle/oradata/PRIMARY 路径下面的联机日志文件( REDO.LOG )、 D:/oracle/ora92/database 里面的口令文件 PWDPRIMARY.ora 备份 出来,拷贝到备用数据库中;在备用数据库中创建路径 D:/oracle/oradata/PRIMARY ,存放 standby.ctl 、数据文件、联机日志文件;创建路径 D:/oracle/admin/PRIMARY ,在里面创建空文件夹 bdump 、 cdump 、 udump 、 create 、 pfile ;将 standby.ora 放到 D 盘根目录下面;将口令文件 PWDPRIMARY.ora 更名为 PWDSTANDBY.ora ,放到备用数据库的 D:/oracle/ora92/database 下面。
11 、回到主数据库,启动主数据库实例和数据库: SQL>startup
12 、转回到备用数据库,手动创建服务 OracleServiceSTANDBY : oradim -new -sid STANDBY -startmode manual 设置环境变量:在环境变量的 “Administrator 的用户变量 ” 一栏里面新建一个值,变量名为 ORACLE_SID ,变量值为 STANDBY (服务名)。
13 、创建备用数据库监听器 OracleOraHome92TNSListener :进入 Net Configuration Assistant ,使用 “ 监听程序配置 ” 来创建备用数据库的监听器,同时会在 D:/oracle/ora92/network/admin 下面生成 listener.ora 文件 , 并修改如下:
# LISTENER.ORA Network Configuration File: d:/oracle/ora92/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PRIMARY)
(ORACLE_HOME = d:/oracle/ora92)
(GLOBAL_DBNAME=PRIMARY)
)
)
主数据库 listener.ora
# LISTENER.ORA Network Configuration File: d:/oracle/ora92/network/admin/listener.ora
# Generated by Oracle configuration tools.
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.38)(PORT = 1521))
)
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC0))
)
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(SID_NAME = PLSExtProc)
(ORACLE_HOME = d:/oracle/ora92)
(PROGRAM = extproc)
)
)
14 、配置本地 NET 服务名:进入 Net Configuration Assistant ,使用 “ 本地 NET 服务名配置 ” 来配置,同时会在 D:/oracle/ora92/network/admin 下面生成 tnsnames.ora 文件;
15 、配置主和备用数据库的 tnsnames.ora ,都将里面的内容设置成如下内容:
# TNSNAMES.ORA Network Configuration File: d:/oracle/ora92/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.38)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
备用数据库 tnsnames.ora
# TNSNAMES.ORA Network Configuration File: d:/oracle/ora92/network/admin/tnsnames.ora
# Generated by Oracle configuration tools.
STANDBY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.111)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
PRIMARY =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.38)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = PRIMARY)
)
)
16 、修改 D 根目录下面的初始化参数文件 standby.ora ,里面的全部内容如下(删除了原来的 control_files 参数,将 instance_name 改成了 STANDBY ,添加的内容):
*.standby_file_management=AUTO
*.remote_archive_enable=TRUE
*.lock_name_space='standby'
*.fal_server='primary'
*.fal_client='standby'
*.standby_archive_dest=d:/oracle/ora92/database/Archive'
*.control_files='d:/oracle/oradata/primary/STANDBY.CTL'
17 、进入 SQLplus 将 standby.ora 创建成备用数据库的 spfile : SQL>create spfile from pfile='d:/standby.ora';
18 、启动备用数据库的实例,并且将备用数据库设置成 standby 模式: SQL>startup nomount; SQL>alter database mount standby database;
19 、在备用数据库启动日志应用服务: SQL>alter database recover managed standby database disconnect from session;
20 、转到主数据库,启动到物理备用数据库的归档:
alter system set log_archive_dest_2='service=standby mandatory reopen=60';
四: Data Guard 的校验
1. 主数据库,归档当前日志: SQL> ALTER SYSTEM ARCHIVE LOG CURRENT;
备用数据库,校验归档日志是否正常接收: SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
备用数据库,查看新的归档日志是否正常用于恢复:
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; SEQUENCE# APP