Oracle 11GR2 DataGuard(DG)安装配置(物理standby)

参考文档https://oracle-base.com/articles/11g/data-guard-setup-11gr2Oracle 11GR2   

DataGuard(DG)安装配置(物理standby)

主数据库

前提条件

  • 您有两个带有操作系统的服务器(物理服务器或 vm) ,并且在上面安装了 Oracle。 在这个例子中,我使用了 Oracle Linux 5.6和 Oracle Database 11.2.0.2
  • 主服务器有一个正在运行的实例
  • 备用服务器只安装数据库软件

主服务器设置

logging

检查主数据库是否处于归档模式。

SELECT log_mode FROM v$database;

LOG_MODE
------------
NOARCHIVELOG

SQL>

如果是无归档模式,则切换到归档模式。

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE ARCHIVELOG;
ALTER DATABASE OPEN;

强制Oracle对所有操作记录日志

ALTER DATABASE FORCE LOGGING;

初始化参数

检查 dbname 和 dbunique name 参数的设置。 当前例子中(主数据库),它们都被设置为“ DB11G”。

SQL> show parameter db_name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_name 			     string	 DB11G

SQL> show parameter db_unique_name

NAME				     TYPE	 VALUE
------------------------------------ ----------- ------------------------------
db_unique_name			     string	 DB11G

SQL>

备用数据库的 dbname 将与主数据库的 dbname 相同,但主备数据库必须具有不同的 dbunique name 值。 应该在 LOG_ARCHIVE_CONFIG 参数的 DG config 设置中使用主数据库和备用数据库的 dbunique name 值。 对于本例,备用数据库的值为"DB11G_STBY"

ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB11G,DB11G_STBY)

设置合适的远程归档日志目的地。 在本例中,我使用快速恢复区作为本地位置,。 注意以下参数的 SERVICE 和 DB_UNIQUE_NAME使用的是备用数据库(STANDBY)的值.

ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';
ALTER SYSTEM SET LOG_ARCHIVE_DEST_STATE_2=ENABLE;

 LOG_ARCHIVE_FORMAT 和 LOG_ARCHIVE_MAX_PROCESSES 参数必须设置为适当的值,REMOTE_LOGIN_PASSWORDFILE参数必须设置为 exclusive。

ALTER SYSTEM SET LOG_ARCHIVE_FORMAT='%t_%s_%r.arc' SCOPE=SPFILE;
ALTER SYSTEM SET LOG_ARCHIVE_MAX_PROCESSES=30;
ALTER SYSTEM SET REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE SCOPE=SPFILE;

除了前面的设置之外,为了确保主备服务器可随时切换。需要设置以下参数。 调整 *_CONVERT参数来适应主备服务器的文件名和文件路径差异。

ALTER SYSTEM SET FAL_SERVER=DB11G_STBY;
--ALTER SYSTEM SET DB_FILE_NAME_CONVERT='DB11G_STBY','DB11G' SCOPE=SPFILE;
--ALTER SYSTEM SET LOG_FILE_NAME_CONVERT='DB11G_STBY','DB11G'  SCOPE=SPFILE;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

由于部分参数是重启数据库才生效(scope=spfile的),所以以上参数更改完毕后请重启数据库。

服务设置

$ORACLE_HOME/network/admin/tnsnames.ora文件的主备数据库填写下面的信息。

DB11G =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol5-112-dga1)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB11G.WORLD)
    )
  )

DB11G_STBY =
  (DESCRIPTION =
    (ADDRESS_LIST =
      (ADDRESS = (PROTOCOL = TCP)(HOST = ol5-112-dga2)(PORT = 1521))
    )
    (CONNECT_DATA =
      (SERVICE_NAME = DB11G.WORLD)
    )
  )

备份主数据库

执行主数据库的完全备份。

$ rman target=/

RMAN> BACKUP DATABASE PLUS ARCHIVELOG;

创建备用控制文件和 PFILE

在主数据库上为备数据库创建控制文件。

ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/db11g_stby.ctl';

在主数据库上为备数据库创建参数文件。

CREATE PFILE='/tmp/initDB11G_stby.ora' FROM SPFILE;

修改刚创建出来的参数文件/tmp/initDB11G_stby.ora,让其可以让备库使用(参数值写备库相关值)

*.db_unique_name='DB11G_STBY'
*.fal_server='DB11G'
*.log_archive_dest_2='SERVICE=db11g ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G'

备用服务器安装配置(手动)

复制文件

在备用服务器上创建必要的目录。

$ mkdir -p /u01/app/oracle/oradata/DB11G
$ mkdir -p /u01/app/oracle/fast_recovery_area/DB11G
$ mkdir -p /u01/app/oracle/admin/DB11G/adump

将文件从主服务器复制到备用服务器。

$ # Standby controlfile to all locations.
$ scp oracle@ol5-112-dga1:/tmp/db11g_stby.ctl /u01/app/oracle/oradata/DB11G/control01.ctl
$ cp /u01/app/oracle/oradata/DB11G/control01.ctl /u01/app/oracle/fast_recovery_area/DB11G/control02.ctl

$ # Archivelogs and backups
$ scp -r oracle@ol5-112-dga1:/u01/app/oracle/fast_recovery_area/DB11G/archivelog /u01/app/oracle/fast_recovery_area/DB11G
$ scp -r oracle@ol5-112-dga1:/u01/app/oracle/fast_recovery_area/DB11G/backupset /u01/app/oracle/fast_recovery_area/DB11G

$ # Parameter file.
$ scp oracle@ol5-112-dga1:/tmp/initDB11G_stby.ora /tmp/initDB11G_stby.ora

$ # Remote login password file.
$ scp oracle@ol5-112-dga1:$ORACLE_HOME/dbs/orapwDB11G $ORACLE_HOME/dbs

注意,备份作为 FRA 副本的一部分被复制到备用服务器。 如果备份没有保存在 FRA 中,则必须确保将它们复制到备用服务器,并使它们与主服务器上使用的路径相同。

开始监听

确保监听在备用服务器上启动。

$ lsnrctl start

恢复备份

从修改后的 PFILE 创建 SPFILE。

$ export ORACLE_SID=DB11G
$ sqlplus / as sysdba

SQL> CREATE SPFILE FROM PFILE='/tmp/initDB11G_stby.ora';

恢复控制文件和数据文件

$ export ORACLE_SID=DB11G
$ rman target=/

RMAN> STARTUP MOUNT;
RMAN> RESTORE DATABASE;

创建重做日志

为备用服务器创建在线重做日志。

ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=MANUAL;
ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo01.log') SIZE 50M;
ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo02.log') SIZE 50M;
ALTER DATABASE ADD LOGFILE ('/u01/app/oracle/oradata/DB11G/online_redo03.log') SIZE 50M;
ALTER SYSTEM SET STANDBY_FILE_MANAGEMENT=AUTO;

除了在线重做日志之外,还应该在备用数据库和主数据库上创建备用重做日志(主备切换使用)。 备用重做日志应该至少与最大的在线重做日志一样大,并且比在线日志多一组。 如下所示,必须在主服务器和备服务器都创建。

ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 10 ('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 11 ('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 12 ('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 50M;
ALTER DATABASE ADD STANDBY LOGFILE THREAD 1 GROUP 13 ('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 50M;

上面操作做完就可以进行主数据库向备数据库传输日志了

开始日志应用程序

在备用服务器上开启日志接收应用。

# Foreground redo apply. Session never returns until cancel. (这个是不会停止会话)
#ALTER DATABASE RECOVER MANAGED STANDBY DATABASE; 

# Background redo apply. Control is returned to the session once the apply process is started.
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

如果需要取消日志应用。

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

如果愿意,可以通过以下命令进行延时应用。

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DELAY 30 DISCONNECT FROM SESSION;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE NODELAY DISCONNECT FROM SESSION;

如果您配置了备用重做日志,可以使用以下命令启动实时日志应用。

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE;

测试日志传输

在主服务器上,检查最新的归档重做日志并强制执行日志切换。

ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';

SELECT sequence#, first_time, next_time
FROM   v$archived_log
ORDER BY sequence#;

ALTER SYSTEM SWITCH LOGFILE;

检查新的归档重做日志已到达备用服务器并已应用。

ALTER SESSION SET nls_date_format='DD-MON-YYYY HH24:MI:SS';

SELECT sequence#, first_time, next_time, applied
FROM   v$archived_log
ORDER BY sequence#;

Dataguard的保护模式(Protection Mode)

主数据库有三种保护模式:

  • Maximum Availability: (最大可用性) 在将重做信息写入在线重做日志和至少一个备用位置的备用重做日志之前,不会提交主服务上的事务。 如果没有可用的备用数据库,那么在备用数据库重新可用之前,它的行为方式与最大性能模式相同。
  • Maximum Performance: (最大性能) 主数据库上提交的事务在重做信息写入在线重做日志后立即执行。 将重做信息传输到备用服务器是异步的,因此不会影响主服务器的性能。
  • Maximum Protection: (最大保护) 在将重做信息写入联机重做日志和至少一个备用位置的备用重做日志之前,不提交主要服务上的事务。 如果没有合适的备用位置,主数据库将关闭

默认情况下,对于新创建的备用数据库,主数据库处于最大性能模式。

SELECT protection_mode FROM v$database;

PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE

SQL>

可以使用以下命令切换这三种保护模式。

-- Maximum Availability.
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby AFFIRM SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE AVAILABILITY;

-- Maximum Performance.
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby NOAFFIRM ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;

-- Maximum Protection.
ALTER SYSTEM SET LOG_ARCHIVE_DEST_2='SERVICE=db11g_stby AFFIRM SYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G_STBY';
SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE SET STANDBY DATABASE TO MAXIMIZE PROTECTION;
ALTER DATABASE OPEN;

主备数据库切换(switchover)

可以使用以下语句执行主备数据库的角色切换,整个切换过程不会丢失任何数据。

主数据库执行以下命令切换为备用数据库

-- Convert primary database to standby
CONNECT / AS SYSDBA
ALTER DATABASE COMMIT TO SWITCHOVER TO STANDBY;

-- Shutdown primary database
SHUTDOWN IMMEDIATE;

-- Mount old primary database as standby database
STARTUP NOMOUNT;
ALTER DATABASE MOUNT STANDBY DATABASE;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

备用服务器执行以下命令切换为主数据库

-- Convert standby database to primary
CONNECT / AS SYSDBA
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY;

-- Shutdown standby database
SHUTDOWN IMMEDIATE;

-- Open old standby database as primary
STARTUP;

完成此操作后,测试日志传输。 如果一切正常,则通过另一次切换将主数据库切换回原始服务器。

故障转移(Failover)

如果主数据库不可用,可以使用以下语句将备用数据库激活为主数据库。

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;
ALTER DATABASE ACTIVATE STANDBY DATABASE;

因为备用数据库现在是主数据库,所以应该马上做一次全备

闪回数据库(Flashback Database)

 尽管切换对主数据库和备用数据库都是安全的,但是故障转移会使原始主数据库无法转换为备用数据库。 如果未启用闪回数据库,则必须废弃原始主数据库并将其重新创建为备用数据库。

另一种方法是在主数据库上启用闪回数据库(如果需要,还可以启用备用数据库) ,这样在发生故障转移时,主数据库可以闪回到故障转移之前的时间,并迅速转换为备用数据库。

具体请参照官放文档:https://docs.oracle.com/cd/E11882_01/server.112/e41134/scenarios.htm#SBYDB00910

只读备用数据库和(ADG) Active Data Guard

 当以只读模式打开时,归档日志传送会继续,但是日志在备库的应用将停止,因此备用数据库将越来越过时,直到日志恢复被开启。

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;

要恢复日志的应用请执行

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

在11g 中,Oracle 引入了 Active Data Guard 特性。 这允许备用数据库以只读模式打开,但仍然应用重做信息。 这意味着可以使用备用服务查询,但仍然是最新的。 这个特性需要购买license使用,下面的命令显示了如何启用ADG。

SHUTDOWN IMMEDIATE;
STARTUP MOUNT;
ALTER DATABASE OPEN READ ONLY;
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;

猜你喜欢

转载自blog.csdn.net/VoiceRoom/article/details/106803914