分类: Oracle
2017-05-06 17:12:53
Data Guard Physical Standby Setup in Oracle Database 11g Release 2
引用
数据保护是Oracle的备用数据库解决方案的名称,用于灾难恢复和高可用性。
1.假设
2.主库服务器设置
2.1登陆设置
2.2初始化参数设置
2.3监听与本地服务命名设置
2.4备份主库
2.5创建备库控制文件与参数文件
3.备库服务器设置(手动)
3.1复制文件
3.2开启监听
3.3恢复备份集
3.4创建在线联机日志
4.备库服务器设置(duplicate)
4.1复制文件
4.2开启监听
4.3.在主库创建备库联机日志
4.4.使用duplicate创建备库
5.开启复制进程
6.测试日志传输
7.保护模式
8.数据库切换
9.数据库故障转移
10.闪回数据库
11.Read-Only Standby and Active Data Guard
12.备库快照
1.假设
a) 在两个服务器上(物理机/VM主机),其中安装了操作系统并且安装了Oracle数据库。在本例中使用Oracle Linux 5.6和Oracle数据库11.2.0.4。
b) 主库服务器(ol7-112-dg1.herbert.com)正常运行一个数据库实例。
c) 备库服务器(ol7-112-dg2.herbert.com)安装数据库软件
2.1登陆
? 检查主库是否运行在归档模式中
SELECT log_mode FROM v$database;
LOG_MODE ------------ NOARCHIVELOG
SQL> |
? 如果不是运行在归档模式,请使用如下方式切换至归档模式
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE ARCHIVELOG; ALTER DATABASE OPEN;
|
? 通过以下命令开启Force logging(非必需)
ALTER DATABASE FORCE LOGGING; -- Make sure at leat one logfile is present. ALTER SYSTEM SWITCH LOGFILE;
|
2.2初始化参数设置
检查DB_NAME 和 DB_UNIQUE_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> |
备库的DB_NAME必须 与主数据库的DB_NAME一致,且必须具有不同的DB_UNIQUE_NAME值。在 本例中,备用数据库将具有“db11g_stby”的值。
ALTER SYSTEM SET LOG_ARCHIVE_CONFIG='DG_CONFIG=(DB11G,DB11G_STBY)'; |
设置适当的远程存档日志存放地址,在本例中,将使用fast recovery area做为本地位置
可以根据需要显示的指定一个存放位置
? 配置如下
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_进程参数设置为适当的值,而REMOTE_LOGIN_PASSWORDFILE必须设置为独占。
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; |
注意,一些参数是不可修改的,因此在它们生效之前需要重新启动数据库。
2.3监听与本地服务命名设置
? 主库/备库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) ) |
在$ORACLE_HOME /network/admin/tnsnames.ora文件中同时设置主库和备库的连接信息
可以使用Network Configuration工具或者在运行NETCA工具手动进行创建
2.4备份主库
如果计划使用一个活动的复制来创建备用数据库,那么这个步骤是不必要的。
对于基于备份的复制或手动还原,请对主数据库进行备份。
$ rman target=/
RMAN> BACKUP DATABASE PLUS ARCHIVELOG; |
2.5创建备库控制文件与参数文件
? 在主数据库上执行以下命令,为备库创建控制文件
ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/db11g_stby.ctl'; |
? 为备库创建参数文件
CREATE PFILE='/tmp/initDB11G_stby.ora' FROM SPFILE; |
? 修改PFILE,使参数与备库相关联
*.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' |
3.备库服务器设置(手动)
3.1复制文件
? 在备库上创建必要的文件目录
$ 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中保存,那么必须确保将它们复制到备用服务器,并使它们与主服务器上使用的相同路径可用。
3.2开启监听
? 确保监听程序在主库上正常开启
$ lsnrctl start |
3.3恢复备份集
? 创建修改后的pfile
$ 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; |
3.4创建备库redo log
? 为备库创建联机重做日志
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 ('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 50M; |
以上命令执行完成后,我们就可以开始复制进程
4.备库服务器设置(duplicate)
3.1复制文件
? 在备库上创建必要的文件目录
$ 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 |
3.2开启监听
当使用主动式复制时,备库需要一个静态侦听器配置。
? 使用了以下配置
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = DB11G.WORLD) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1) (SID_NAME = DB11G) ) )
LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = ol5-112-dga2.localdomain)(PORT = 1521)) ) (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521)) ) )
ADR_BASE_LISTENER = /u01/app/oracle |
? 确保监听程序在主库上正常开启
$ lsnrctl start |
4.3.在主库创建备库联机日志
复制命令会自动创建备用的备用重做日志。为了确保主数据库配置为切换,必须在主服务器上创建备用重做日志
ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo01.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo02.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo03.log') SIZE 50M; ALTER DATABASE ADD STANDBY LOGFILE ('/u01/app/oracle/oradata/DB11G/standby_redo04.log') SIZE 50M; |
4.4.使用duplicate创建备库
? 启用备库的辅助实例,使用刚刚创建的临时参数文件
$ export ORACLE_SID=db11g $ sqlplus / as sysdba
SQL> STARTUP NOMOUNT PFILE='/tmp/initdb11g_stby.ora'; |
? 连接到RMAN工具
$ rman TARGET sys/Password123@db11g AUXILIARY sys/Password123@db11g_stby |
为目标库和辅助实例指定一个完整的连接字符串。不要尝试使用OS身份进行验证。
? 使用DUPLICATE命令
DUPLICATE TARGET DATABASE FOR STANDBY FROM ACTIVE DATABASE DORECOVER SPFILE SET db_unique_name='DB11G_STBY' COMMENT 'Is standby' SET LOG_ARCHIVE_DEST_2='SERVICE=db11g ASYNC VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=DB11G' SET FAL_SERVER='DB11G' COMMENT 'Is primary' NOFILENAMECHECK; |
下面给出了个别命令的简要说明
? For Standby:明确指定在备库上使用DUPLICATE命令
? FROM ACTIVE DATABASE:复制将直接从源数据文件中创建,没有额外的备份步骤
? DORECOVER:复制包含恢复步骤,将备库的数据检查时间点与主库的时间点一致
? SPFILE: 当从源服务器复制时,允许重置spfile中的参数值
? NOFILENAMECHECK: 目标文件位置不会被检查
命令执行完成后,我们就可以开始启用复制进程
5.开启传输进程
? 在备库上开始传输进程
# 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; |
6.测试日志传输
? 在主库上检查最新归档日志并执行日志切换
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#; |
7.保护模式
主要数据库有三种保护模式:
a) 最大可用性:在主服务器上的事务不提交,直到重做日志信息被写入联机重做日志和至少一个备库位置上的备用重做日志。如果没有可用的备用位置,它将以与最大性能模式相同的方式执行,直到再次可用。
b) 最大性能:当重新做信息写入联机重做日志时,主提交的事务。将重做的信息传输到备用服务器是异步的,因此它不会影响主服务器的性能。
c) 最大保护:在主服务器上的事务不提交,直到重做信息被写入联机重做日志和至少一个备用位置的备用重做日志。如果没有合适的备库归档日志可用,主数据库将会关闭。
默认情况下,对于新创建的备库,主数据库处于最大性能模式。
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; |
8.数据库切换
数据库可以是两种互斥模式(主或备用)中的一种。这些角色可以在运行时更改,而不会丢失数据或重新设置重做日志这个过程称为切换。
? 使用以下语句执行切换
-- 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; |
完成此操作后,就像之前一样测试日志传输。如果一切正常,将主数据库切换回原来的服务器,然后进行另一个切换。
9.数据库故障转移
如果主数据库不可用,备用数据库可以使用以下语句激活为主数据库
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH; ALTER DATABASE ACTIVATE STANDBY DATABASE; |
因为备用数据库现在是主数据库,所以应该立即备份。
现在可以将原始主数据库配置为备用数据库。如果在主数据库上启用了Flashback数据库,那么可以相对轻松地完成此操作(此处显示)。如果不是,则必须遵循整个安装过程,但这一次使用原始的主服务器作为备库
10.闪回数据库
在前一节中已经提到过,但值得注意的是,再次使用Flashback数据库。尽管切换/切换对主数据库和备用数据库都是安全的,但故障转移使原始的主数据库无法转换为备用数据库。如果不启用flashback数据库,则必须取消原来的主服务器,并将其重新创建为备用数据库。
另一种方法是在主服务器上启用flashback数据库(如果需要的话),所以在故障转移时,主可以在故障转移之前闪回,然后快速转换到备用数据库。
11.Read-Only Standby and 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引入了主动数据保护功能。这允许备库以只读模式打开,但仍然应用重做信息。这意味着备库可以用于查询,这个特性有许可的含义。
? 下面的命令显示了如何启用活动数据保护
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE OPEN READ ONLY; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION; |
12.备库快照
在11g中引入快照备用,让备用数据库在读写模式中打开。当切换回待机模式时,在读写模式下的所有更改都将丢失。这是使用flashback数据库实现的,但是备用数据库不需要显式地启用flashback数据库来利用这个特性,认为它的工作原理是一样的
? 如果使用RAC,关闭所有RAC实例之一,确保实例处于挂载模式
SHUTDOWN IMMEDIATE; STARTUP MOUNT; |
? 确保管理恢复是禁用的
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL; |
将备用服务器转换为快照备份。下面的示例查询v$database视图,以显示在转换操作之前没有启用flashback数据库。
SELECT flashback_on FROM v$database;
FLASHBACK_ON ------------------ NO
ALTER DATABASE CONVERT TO SNAPSHOT STANDBY; ALTER DATABASE OPEN; SELECT flashback_on FROM v$database;
FLASHBACK_ON ------------------ RESTORE POINT ONLY
SQL> |
现在,可以像任何读写数据库一样处理备库
要将其转换回物理备用,在转换到快照备用状态时丢失所有更改
? 执行以下命令
SHUTDOWN IMMEDIATE; STARTUP MOUNT; ALTER DATABASE CONVERT TO PHYSICAL STANDBY; SHUTDOWN IMMEDIATE; STARTUP NOMOUNT; ALTER DATABASE MOUNT STANDBY DATABASE; ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT; SELECT flashback_on FROM v$database;
FLASHBACK_ON ------------------ NO
SQL> |