Oracle Data Guard 简介
Oracle Data Guard可确保企业数据的高可用性,数据保护和灾难恢复。 Data Guard 提供了一套全面的服务,可以创建,维护,管理和监视一个或多个备用数据库,以使生产 Oracle数据库能够在灾难和数据损坏中幸免。 Data Guard将这些备用数据库作为生产 数据库的副本进行维护。然后,如果由于计划内或计划外的停机而使生产数据库不可 用,则Data Guard可以将任何备用数据库切换为生产角色,从而最大程度地减少与停 机相关的停机时间。 Data Guard可以与传统的备份,还原和群集技术一起使用,以提 供高水平的数据保护和数据可用性。
材料:
主数据库的操作系统Windows 2008 64位 安装Oracle后,创建一个名称为chicago数据库
备用数据库操作系统 Centos6.5 64位 安装Oracle后,创建一个名称为boston数据库
注意:两边的数据库版本需一致,包括小版本号
主数据库所需配置
配置主数据库的先决条件
- 主库必须开启归档模式
- 在主数据库(Windows 2008)打开NetManager配置chicago和boston两个监听服务连接类型设置为dedicated(专用服务器)模式。配置完毕后保存启动监听,在命令行终端中使用tnsping命令先对chicago进行测试。
- 在SQLPLUS中执行以下语句:
SQL>ALTER DATABASE FORCE LOGGING
--主数据库开启强制归档日志模式,发出此语句时,必须至少装入主数据库(也可以将其打开)。 该语句可能需要花费大量时间才能完成,因为它会等待所有未记录的直接写I/O完成。
SQL>SHOW PARAMETER DB_NAME; --查询数据库名称
SQL>SHOW PARAMETER DB_UNIQUE_NAME;-- 为每个数据库指定一个唯一的名称。此名称将保留在数据库中,并且不会更改,即使主数据库和备用数据库的角色相反。
SQL>SHOW PARAMETER LOG_ARCHIVE_CONFIG;-- --配置DG_CONFIG属性,该指定的是主数据库和备用数据库的DB_UNIQUE_NAME
SQL>SHOW PARAMETER CONTROL_FILES;-- 建议提供控制文件的二个副本,以便在将良好控制文件复制到不良控制文件的位置后,可以轻松地重新启动实例。
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=C:\archivelog\chicago VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=chicago' scope=both;-- 将主数据库生成的重做数据从本地联机重做日志文件存档到C:\archivelog\chicago中的本地已归档重做日志文件。
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=boston ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=boston' scope=both; --LOG_ARCHIVE_DEST_2仅对主要角色有效。此目标将重做数据传输到远程物理备用目标boston
SQL>ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' scope=spfile; --设置使用线程指定归档的重做日志文件的格式 (%t), 序列号 (%s), 和重置日志ID (%r).
SQL>SHOW PARAMETER REMOTE_LOGIN_PASSWORDFILE;--如果远程登录密码文件用于验证管理用户或重做传输会话,则必须将此参数设置为EXCLUSIVE或SHARED。
SQL>SHOW PARAMETER FAL_SERVER; --指定创建数据库时使用的名称。 在物理备用数据库上,使用主数据库的DB_NAME。
- 以上参数配置完成后,重新启动一次实例,然后把该数据库的密码文件发送到备用服务器上的$ORACLE_HOME/dbs/目录中,或者使用命令orapwd file='$ORACLE_HOME/dbs/orapw$ORACLE_SID' password=password entries=5 force=y 创建一个密码文件(密码文件的密码需要在主数据库和备用数据库一致)
- SQL> CREATE PFILE='/tmp/initboston.ora' FROM SPFILE;--从主数据库使用的服务器参数文件(SPFILE)创建参数文件(PFILE)。
备用数据库所需配置
- 编辑已拷贝过来的initboston.ora,以下标注的红框需要修改,如果没有拷贝到备用数据库中,需要将修改完成后拷贝到备用数据库服务器的$ORACLE_HOME/dbs/路径下
- 在命令行终端中配置数据库监听
$cd /u01/app/oracle/product/11.2.0/dbhome_1/network/admin
$vim listener.ora
$vim tnsnames.ora
配置完成后启动监听
$lsnrctl start
tnsping boston chicago 是否正确返回结果
$tnsping boston
$tnsping chicago
- 在相应的目录中创建$ORACLE_BASE\boston\adump、$ORACLE_BASE\flash_recovery_area\boston、$ORACLE_BASE\oradata\boston
以上参数和目录配置完成后,把数据库打开到nomount状态
然后执行以下步骤
SQL>STARTUP NOMOUNT;
- $ rman target sys/admin@chicago auxiliary sys/admin@boston
输入以下命令进行数据库复制
SQL>duplicate target database for standby from active database
spfile
parameter_value_convert 'CHICAGO','BOSTON','chicago','boston'
set db_unique_name 'boston'
set diagnostic_dest '/u01/app/oracle'
set memory_target '717567488'
set audit_file_dest '/u01/app/oracle/admin/boston/adump'
set db_file_name_convert 'C:\U01\APP\ORACLE\ORADATA\CHICAGO','/u01/app/oracle/oradata/boston/'
set log_file_name_convert 'C:\U01\APP\ORACLE\ORADATA\CHICAGO','/u01/app/oracle/oradata/boston/'
set db_recovery_file_dest '/u01/app/oracle/flash_recovery_area'
set control_files '/u01/app/oracle/oradata/boston/control01.ctl','/u01/app/oracle/flash_recovery_area/boston/control02.ctl';
复制命令执行后,如发现执行失败,
- 请分别在主数据库和备用数据库仔细检查监听配置是否正确
- 查询备用数据库对应的目录路径下是否正确创建相应的目录
复制命令执行后,如果成功则数据库默认为mount状态
- 接下来配置物理备用数据库的参数
SQL>SHOW PARAMETER DB_NAME;
SQL>SHOW PARAMETER DB_UNIQUE_NAME;
SQL>ALTER SYSTEM SET DB_UNIQUE_NAME='boston' SCOPE=SPFILE;--为此数据库指定一个唯一的名称。 该名称保留在数据库中,即使主数据库和备用数据库具有相反的角色,该名称也不会更改。
SQL>SHOW PARAMETER CONTROL_FILES;
SQL>SHOW PARAMETER DB_FILE_NAME_CONVERT;
SQL>SHOW PARAMETERS LOG_FILE_NAME_CONVERT;--此参数将主数据库日志文件的路径名转换为备用数据库上的路径名。 如果备用数据库与主数据库位于同一系统上,或者备用系统上日志文件所在的目录结构与主系统不同,则此参数是必需的。
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_1='LOCATION=/arch1/boston/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=boston' SCOPE=BOTH;--LOG_ARCHIVE_DEST_1 将从主数据库接收的重做数据归档到 /arch1/boston/中的归档重做日志文件中。
SQL>ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=chicago ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=chicago' SCOPE=BOTH;--当前忽略LOG_ARCHIVE_DEST_2 ,因为此目标仅对主要角色有效。 如果发生切换,并且该实例成为主数据库,则它将重做数据传输到远程chicago目的地。
SQL>SHOW PARAMETER FAL_SERVER;
SQL>ALTER SYSTEM SET FAL_SERVER=chicago SCOPE=BOTH;--指定FAL服务器的Oracle Net服务名称(通常这是以主要角色运行的数据库)。当boston数据库以备用角色运行时,如果chicago无法自动发送丢失的日志文件,则它将chicago数据库用作FAL服务器,从中提取(请求)丢失的存档重做日志文件。
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;-- 在备用数据库上,发出以下命令以启动“重做应用”
如果以上命令执行失败,请创建三个备用日志组(日志大小大小根据业务需求设置)注意创建备用日子组必须大于现有的普通日志组至少多一个:
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 4 '/u01/app/oracle/oradata/boston/REDO04.LOG' size 50m;
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 5 '/u01/app/oracle/oradata/boston/REDO05.LOG' size 50m;
SQL>ALTER DATABASE ADD STANDBY LOGFILE GROUP 6 '/u01/app/oracle/oradata/boston/REDO06.LOG' size 50m;
- 至此物理备用数据库配置完成
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#; --在备用数据库上,查询V$ARCHIVED_LOG视图以标识归档重做日志中的现有文件
如需把物理备用数据库开到只读模式,执行以下语句
SQL>ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
然后在SQLPLUS中执行
SQL>startup open read only