说明:
本文安装配置了Oracle 11g Dataguard通过duplicate方式创建物理备库。
比起上次配置有以下不同点:
1. 主备库目录结构不同。
2. 采用duplicate方式创建物理备库。
一、环境介绍
1. 主数据库环境
操作系统版本 : OEL5.8 x64
数据库版本 : Oracle 11.2.0.3 x64
数据库名 : orcl
数据库SID : orcl
db_unique_name: orcl
instance_name : orcl
DGMGRL : orcl_DGMGRL
2. 备库环境
操作系统版本 : OEL5.8 x64
数据库版本 : Oracle 11.2.0.3 x64 (只安装oracle数据库软件,no netca dbca)
数据库名 : slave
数据库SID : slave
db_unique_name: slave
instance_name : slave
DGMGRL : slave_DGMGRL
3. DataGuard启动顺序
启动顺序:先启备库,后启主库
关闭顺序:先关主库,后关备库
二、主数据库环境准备
1. 主库环境对比
充分利用主数据库原来环境,仅量不对主库参数配置做过多的修改。
重新创建口令文件
# su - oracle
$ orapwd file='/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl' password=oracle entries=10 force=y
2. 修改配置lisener监听文件
说明:添加dgmgrl静态监听配置,为后面的dg broker配置打基础。
$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.200)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl_DGMGRL)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
#其中的GLOBAL_DBNAME具有固定的格式:
4. 修改配置tnsname.ora文件
说明:ORCL是主库的服务名,DG是备库的服务名。
$ vi /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.200)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
SLAVE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.150)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = slave)
)
)
5. 修改配置成规档模式
1)、检查数据库是否处于归档状态
SQL> archive log list;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database flashback on;
SQL> alter database open;
2)、将主库设置为 FORCE LOGGING 模式
SQL> alter database force logging;
SQL> select force_logging,flashback_on from v$database;
FOR FLASHBACK_ON
--- ------------------
YES YES
6. 修改主库参数文件
SQL>
alter system set instance_name='orcl' scope=spfile;
alter system set db_unique_name='orcl' scope=spfile;
alter system set local_listener='orcl' scope=spfile;
alter system set log_archive_config='DG_CONFIG=(orcl,slave)';
alter system set log_archive_dest_1='LOCATION=/u01/archivelog/ valid_for=(all_logfiles,all_roles) db_unique_name=orcl' scope=spfile;
alter system set log_archive_dest_2='SERVICE=slave lgwr async valid_for=(online_logfiles,primary_role) db_unique_name=slave' scope=spfile;
alter system set log_archive_format='arch_%r_%t_%s.arc' scope=spfile;
alter system set fal_client='orcl' scope=spfile;
alter system set fal_server='slave' scope=spfile;
alter system set standby_file_management=AUTO;
alter database add standby logfile group 4 '/u01/app/oracle/oradata/orcl/standby_redo04.log' size 50M;
alter database add standby logfile group 5 '/u01/app/oracle/oradata/orcl/standby_redo05.log' size 50M;
alter database add standby logfile group 6 '/u01/app/oracle/oradata/orcl/standby_redo06.log' size 50M;
alter database add standby logfile group 7 '/u01/app/oracle/oradata/orcl/standby_redo07.log' size 50M;
SQL> shutdown immediate;
SQL> startup;
三、备库配置
1. 备库环境
操作系统版本 : OEL5.8 x64
数据库版本 : Oracle 11.2.0.3 x64 (只安装oracle数据库软件,no netca dbca)
数据库名 : slave
数据库SID : slave
db_unique_name: slave
instance_name : slave
DGMGRL : slave_DGMGRL
2. 修改配置lisener监听文件
$ vi /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.150)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = slave)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = slave)
)
(SID_DESC =
(GLOBAL_DBNAME = slave_DGMGRL)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = slave)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
其中的GLOBAL_DBNAME具有固定的格式:
3. 修改配置tnsname.ora文件
说明:ORCL是主库的服务名,DG是备库的服务名。
$ vi /u01/app/oracle/product/11.2.0/db_1/network/admin/tnsnames.ora
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.200)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
SLAVE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.150)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = slave)
)
)
测试服务名连通性:
tnsping orcl
tnsping slave
3. 创建11g数据库基本目录
# su - oracle
mkdir -p /u01/app/oracle/admin/slave/{adump,dpdump,pfile,scripts}
mkdir -p /u01/app/oracle/oradata/slave
mkdir -p /u01/app/oracle/fast_recovery_area/slave
mkdir -p /u01/archivelog
4. 拷贝主库口令文件并改名
注:10g DG环境只要求密码相同,11g DG则要求与主库完全一致。
否则报无权限错误。
$ cd /u01/app/oracle/product/11.2.0/db_1/dbs/
$ scp
oracle@192.168.233.150:/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl $ORACLE_HOME/dbs/
$ mv orapworcl orapwslave
测试远程登录
$ sqlplus
as sysdba;
$ sqlplus
as sysdba;
5. 启动到nomount状态
$ echo 'db_name=slave' > $ORACLE_HOME/dbs/initslave.ora
$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> startup nomount;
四、 开始在RMAN duplicate数据库
1. RMAN同进连接主库与备库
$ rman target auxiliary
恢复管理器: Release 11.2.0.3.0 - Production on 星期五 8月 16 21:14:10 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: ORCL (DBID=1351417842)
已连接到辅助数据库: SLAVE (未装载)
2. 开始duplicate数据库
RMAN>
run {
allocate channel c1 type disk;
allocate channel c2 type disk;
allocate auxiliary channel stby type disk;
duplicate target database for standby nofilenamecheck from active database
dorecover
spfile
parameter_value_convert 'orcl','slave'
set instance_name='slave'
set db_unique_name='slave'
set local_listener='slave'
set db_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/slave/'
set log_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/slave/'
set control_files='/u01/app/oracle/oradata/slave/control01.ctl','/u01/app/oracle/oradata/slave/control02.ctl','/u01/app/oracle/oradata/slave/control03.ctl'
set log_archive_dest_1='LOCATION=/u01/archivelog/ valid_for=(all_logfiles,all_roles) db_unique_name=slave'
set log_archive_dest_2='SERVICE=orcl lgwr async valid_for=(online_logfile,primary_role) db_unique_name=orcl'
set log_archive_max_processes='5'
set standby_file_management='AUTO'
set fal_client='slave'
set fal_server='orcl';
release channel c1;
release channel c2;
release channel stby;
}
RMAN> quit
恢复管理器完成。
3. 查看备库状态
说明:duplicate数据库之后,备库只是处于mount状态,查看备库状态。
$ sqlplus / as sysdba
# 查看备库状态
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY slave
4. 将备库置与应用日志模式状态
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
5. 验证物理备库日志应用
1)主库上操作
SQL> conn / as sysdba;
SQL> create user abc identified by abc ;
SQL> grant dba to abc;
SQL> conn abc/abc
SQL> create table abc ( id integer , name char(10));
SQL> insert into abc values ( 0 , 'aaa' );
SQL> commit;
SQL> conn / as sysdba;
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 /u01/archivelog/
最早的联机日志序列 8
下一个存档日志序列 10
当前日志序列 10
2)备库上验证
SQL> archive log list
数据库日志模式 存档模式
自动存档 启用
存档终点 /u01/archivelog/
最早的联机日志序列 9
下一个存档日志序列 0
当前日志序列 10
SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
---------- -------------- -------------- ---------
7 16-8月 -13 16-8月 -13 YES
8 16-8月 -13 16-8月 -13 YES
9 16-8月 -13 16-8月 -13 IN-MEMORY
经过测试,Oracle 11g dataguard物理备库创建成功。
将备库置于Active DataGuard模式
在Oracle 11g之前,物理备库(physical Standby)在应用redo的时候,数据库需要处于mount状态。从11g开始,应用redo的时候,物理备库可以处于read-only模式,这就称为Active Data Guard,这种状态可以实现实时查询功能。
1. 备库上操作
1) 查看备库当前状态 mount
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY slave
2) 取消备库的自动恢复
SQL> alter database recover managed standby database cancel;
数据库已更改。
3) OPEN备库为只读模式(Dataguard只能启动到readonly模式)
SQL> alter database open;
数据库已更改。
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ ONLY PHYSICAL STANDBY slave
4)打开实时应用状态模式
SQL> alter database recover managed standby database using current logfile disconnect;
数据库已更改。
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ ONLY WITH APPLY PHYSICAL STANDBY slave
备库上查看验备库实时应用情况
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
已选择5行。
2. 主库上操作执行DDL,DML操作验证
SQL> create tablespace abcd datafile '/u01/app/oracle/oradata/orcl/abcd.dbf' size 10m autoextend on next
10m;
表空间已创建。
SQL> conn abc/abc
已连接。
SQL> select * from abc;
ID NAME
---------- ----------
0 aaa
SQL>
SQL> insert into abc values (1 , 'bbb');
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from abc;
ID NAME
---------- ----------
0 aaa
1 bbb
SQL>
3. 备库上验证操作
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
ABCD
已选择6行。
表空间已经过备库来了。
SQL> conn abc/abc
已连接。
SQL> select * from abc;
ID NAME
---------- ----------
0 aaa
1 bbb
SQL>
表记录已经应用过来了。
Active dataguard实验结束。
1. 主库broker配置
1) 查询switchover状态
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PRIMARY TO STANDBY
2) 查询dg_broker_start参数
SQL> show parameter dg_broker_start;
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
dg_broker_start boolean FALSE
SQL> alter system set dg_broker_start = true;
3) listener文件中加入静态监听
$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
加入如下内容到
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl_DGB)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl_DGMGRL)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
)
说明:
# GLOBAL_DBNAME具有固定的格式:
# 修改完成之后,必须重启监听程序。
重启监听
$ lsnrctl reload
查看监听状态
$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 17-8月 -2013 19:56:44
Copyright (c) 1991, 2011, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.233.200)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 11.2.0.3.0 - Production
启动日期 17-8月 -2013 19:05:06
正常运行时间 0 天 0 小时 51 分 38 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
监听程序日志文件 /u01/app/oracle/diag/tnslsnr/master/listener/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.233.200)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
服务摘要..
服务 "orcl" 包含 2 个实例。
实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orclXDB" 包含 1 个实例。
实例 "orcl", 状态 READY, 包含此服务的 1 个处理程序...
服务 "orcl_DGB" 包含 1 个实例。
实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
服务 "orcl_DGMGRL" 包含 1 个实例。
实例 "orcl", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
2. 备库Broker配置
1) 查询switchover状态
SQL> select database_role,switchover_status from v$database;
DATABASE_ROLE SWITCHOVER_STATUS
---------------- --------------------
PHYSICAL STANDBY NOT ALLOWED
2) 查询dg_broker_start参数
SQL> show parameter dg_broker_start;
SQL> alter system set dg_broker_start = true;
3) listener文件中加入静态监听
$ cat /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.150)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = slave)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = slave)
)
(SID_DESC =
(GLOBAL_DBNAME = slave_DGMGRL)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = slave)
)
)
ADR_BASE_LISTENER = /u01/app/oracle
说明:
# GLOBAL_DBNAME具有固定的格式:
# 修改完成之后,必须重启监听程序。
重启监听
$ lsnrctl reload
查看监听状态
$ lsnrctl status
LSNRCTL for Linux: Version 11.2.0.3.0 - Production on 17-8月 -2013 19:55:04
Copyright (c) 1991, 2011, Oracle. All rights reserved.
正在连接到 (DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.233.150)(PORT=1521)))
LISTENER 的 STATUS
------------------------
别名 LISTENER
版本 TNSLSNR for Linux: Version 11.2.0.3.0 - Production
启动日期 17-8月 -2013 19:02:47
正常运行时间 0 天 0 小时 52 分 17 秒
跟踪级别 off
安全性 ON: Local OS Authentication
SNMP OFF
监听程序参数文件 /u01/app/oracle/product/11.2.0/db_1/network/admin/listener.ora
监听程序日志文件 /u01/app/oracle/diag/tnslsnr/slave/listener/alert/log.xml
监听端点概要...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.233.150)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1521)))
服务摘要..
服务 "slave" 包含 2 个实例。
实例 "slave", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
实例 "slave", 状态 READY, 包含此服务的 1 个处理程序...
服务 "slave_DGMGRL" 包含 1 个实例。
实例 "slave", 状态 UNKNOWN, 包含此服务的 1 个处理程序...
命令执行成功
3. broker主备切换配置配置(在主库上操作)
说明:dgmgrl可以安装到非主备库服务器上,因为但心主备库当掉,dgmgrl也当掉,无法对主备进行监控。
可以在第三方主机上安装oracle客户端,配置连接主备库的tnsname.ora服务器,即可远程启动dgmgrl进程。
1) 配置broker
$ dgmgrl sys/oracle
DGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
欢迎使用 DGMGRL, 要获取有关信息请键入 "help"。
已连接。
DGMGRL>
DGMGRL> create configuration DGORCLDB as primary database is orcl connect identifier is orcl;
已创建配置 "dgorcldb", 其中主数据库为 "orcl"
DGMGRL> add database slave as connect identifier is slave maintained as physical;
已添加数据库 "slave"
DGMGRL> enable configuration;
已启用。
2) 查看配置信息
DGMGRL> show configuration;
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
orcl - 主数据库
slave - 物理备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
3) 查看主数据库信息
DGMGRL> show database orcl
数据库 - orcl
角色: PRIMARY
预期状态: TRANSPORT-ON
实例:
orcl
数据库状态:
SUCCESS
4) 查看备库信息
DGMGRL> show database slave
数据库 - slave
角色: PHYSICAL STANDBY
预期状态: APPLY-ON
传输滞后: 0 秒
应用滞后: 0 秒
实时查询: OFF
实例:
slave
数据库状态:
SUCCESS
Oracle 11g Dataguard Snapshot Standby数据库功能,可将备库置于打开读写状态,进行模拟生产环境主库中测试。当备库Snapshot standby任务完成后,可以切换回物理备库角色。在Snapshot Standby数据库状态下,备库是可以接受主库传过来的日志,但是不能够将变化应用在备库中。
本文采用Oracle 11g Dataguard broker snapshot standby配置
1. 采用dg broker配置snapshot standby配置
1) 查看配置信息
$ dgmgrl sys/oracle
DGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
欢迎使用 DGMGRL, 要获取有关信息请键入 "help"。
已连接。
DGMGRL> show configuration;
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
orcl - 主数据库
slave - 物理备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
2. 转换备库为镜像库(snapshot standby)
DGMGRL> convert database slave to snapshot standby;
正在将数据库 "slave" 转换为快照备用数据库, 请稍候...
数据库 "slave" 已成功转换
DGMGRL>
DGMGRL> show configuration
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
orcl - 主数据库
slave - 快照备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
DGMGRL>
3. 测试镜像库
1) 备库上操作
[oracle@slave ~]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.3.0 Production on 星期六 8月 17 21:35:29 2013
Copyright (c) 1982, 2011, Oracle. All rights reserved.
SQL> conn / as sysdba;
已连接。
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ WRITE SNAPSHOT STANDBY slave
#此次镜像库已经是打开状态,数据库角色也是SNAPSHOT STANDBY 。
SQL> conn abc/abc
已连接。
SQL> select * from abc;
ID NAME
---------- ----------
0 aaa
1 bbb
SQL> insert into abc values ( 11 , 'fffff' );
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from abc;
ID NAME
---------- ----------
11 fffff
0 aaa
1 bbb
SQL>
2) 主库上查看
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ WRITE PRIMARY orcl
在主库上插入记录,并切换日志。
SQL> conn abc/abc
SQL> select * from abc;
ID NAME
---------- ----------
0 aaa
1 bbb
SQL> insert into abc values ( 2 , 'ccc' );
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from abc;
ID NAME
---------- ----------
2 ccc
0 aaa
1 bbb
SQL>
SQL> conn / as sysdba;
SQL> alter system switch logfile;
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 /u01/archivelog/
最早的联机日志序列 16
下一个存档日志序列 18
当前日志序列 18
主库上新增一条记录并切换日志,说明17号日志是刚才规档的日志。
查看主库规档日志:
[root@master archivelog]# ll
-rw-r----- 1 oracle oinstall 22374912 08-16 22:51 arch_823637109_1_10.arc
-rw-r----- 1 oracle oinstall 2048 08-16 22:51 arch_823637109_1_11.arc
-rw-r----- 1 oracle oinstall 3137536 08-17 19:05 arch_823637109_1_12.arc
-rw-r----- 1 oracle oinstall 1536 08-17 19:05 arch_823637109_1_13.arc
-rw-r----- 1 oracle oinstall 23025664 08-17 20:03 arch_823637109_1_14.arc
-rw-r----- 1 oracle oinstall 686080 08-17 20:05 arch_823637109_1_15.arc
-rw-r----- 1 oracle oinstall 36077568 08-17 21:30 arch_823637109_1_16.arc
-rw-r----- 1 oracle oinstall 941056 08-17 21:49 arch_823637109_1_17.arc
-rw-r----- 1 oracle oinstall 23513088 08-16 21:06 arch_823637109_1_5.arc
-rw-r----- 1 oracle oinstall 52736 08-16 21:06 arch_823637109_1_6.arc
-rw-r----- 1 oracle oinstall 5014528 08-16 21:36 arch_823637109_1_7.arc
-rw-r----- 1 oracle oinstall 247808 08-16 21:40 arch_823637109_1_8.arc
-rw-r----- 1 oracle oinstall 48640 08-16 21:41 arch_823637109_1_9.arc
查看备库规档日志:
[root@slave archivelog]# ll
-rw-r----- 1 oracle oinstall 22374912 08-16 22:51 arch_823637109_1_10.arc
-rw-r----- 1 oracle oinstall 2048 08-16 22:51 arch_823637109_1_11.arc
-rw-r----- 1 oracle oinstall 3137536 08-17 19:05 arch_823637109_1_12.arc
-rw-r----- 1 oracle oinstall 1536 08-17 19:05 arch_823637109_1_13.arc
-rw-r----- 1 oracle oinstall 23025664 08-17 20:03 arch_823637109_1_14.arc
-rw-r----- 1 oracle oinstall 686080 08-17 20:06 arch_823637109_1_15.arc
-rw-r----- 1 oracle oinstall 36077568 08-17 21:31 arch_823637109_1_16.arc
-rw-r----- 1 oracle oinstall 941056 08-17 21:49 arch_823637109_1_17.arc
-rw-r----- 1 oracle oinstall 5014528 08-16 21:40 arch_823637109_1_7.arc
-rw-r----- 1 oracle oinstall 247808 08-16 21:40 arch_823637109_1_8.arc
-rw-r----- 1 oracle oinstall 48640 08-16 21:41 arch_823637109_1_9.arc
-rw-r----- 1 oracle oinstall 2048 08-17 21:30 arch_823728603_1_1.arc
发现17号日志经传到备库上,只是没有应用。
查看备库日志应用情况,16,17号日志都没有应用。
SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
---------- -------------- -------------- ---------
1 17-8月 -13 17-8月 -13 NO
7 16-8月 -13 16-8月 -13 YES
8 16-8月 -13 16-8月 -13 YES
9 16-8月 -13 16-8月 -13 YES
10 16-8月 -13 16-8月 -13 YES
11 16-8月 -13 16-8月 -13 YES
12 16-8月 -13 17-8月 -13 YES
13 17-8月 -13 17-8月 -13 YES
14 17-8月 -13 17-8月 -13 YES
15 17-8月 -13 17-8月 -13 YES
16 17-8月 -13 17-8月 -13 NO
17 17-8月 -13 17-8月 -13 NO
已选择12行。
4. 镜像库(snapshot standby)转换备库
snaphost standyb是通过闪回功能实现,但是Oracle 11g dataguard snapshot standby配置与主备库是否启用闪回没有任何关系。
镜像库切换回备库的过程是通过闪回到原还点,并应用主库生成日志,实现主备一致。
1)切换回物理备库
DGMGRL> show configuration
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
orcl - 主数据库
slave - 快照备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
DGMGRL>
DGMGRL> convert database slave to physical standby;
正在将数据库 "slave" 转换为物理备用数据库, 请稍候...
操作要求关闭实例 "slave" (在数据库 "slave" 上)
正在关闭实例 "slave"...
数据库已经关闭。
已经卸载数据库。
ORACLE 例程已经关闭。
操作要求启动实例 "slave" (在数据库 "slave" 上)
正在启动实例 "slave"...
ORACLE 例程已经启动。
数据库装载完毕。
正在继续转换数据库 "slave" ...
操作要求关闭实例 "slave" (在数据库 "slave" 上)
正在关闭实例 "slave"...
ORA-01109: 数据库未打开
已经卸载数据库。
ORACLE 例程已经关闭。
操作要求启动实例 "slave" (在数据库 "slave" 上)
正在启动实例 "slave"...
ORACLE 例程已经启动。
数据库装载完毕。
数据库 "slave" 已成功转换
DGMGRL>
2) 转换成功,查看结果,切换成功
DGMGRL> show configuration
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
orcl - 主数据库
slave - 物理备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
DGMGRL>
3)查看备库角色与记录
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY slave
#打开Active dataguard特性查看验证,日志记录应用。
SQL> alter database open;
数据库已更改。
SQL> conn abc/abc
已连接。
SQL> select * from abc;
ID NAME
---------- ----------
2 ccc
0 aaa
1 bbb
SQL>
已经还原到与主库记录一致状态。
本文采用Oracle 11g Dataguard broker switchover测试
1. 采用dataguard broker 测试switchover
1) 主库情况
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ WRITE PRIMARY orcl
SQL>
SQL> conn abc/abc
已连接。
SQL> select * from abc;
ID NAME
---------- ----------
3 ddd
4 eee
2 ccc
0 aaa
1 bbb
SQL>
2)备库情况
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY slave
SQL>
2. 主备库切换测试
$ dgmgrl sys/oracle
DGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
欢迎使用 DGMGRL, 要获取有关信息请键入 "help"。
已连接。
DGMGRL> show configuration;
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
orcl - 主数据库
slave - 物理备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
# 主备库切
DGMGRL> switchover to slave;
立即执行切换, 请稍候...
新的主数据库 "slave" 正在打开...
操作要求关闭实例 "MASTER" (在数据库 "master" 上)
正在关闭实例 "MASTER"...
ORACLE 例程已经关闭。
操作要求启动实例 "MASTER" (在数据库 "master" 上)
正在启动实例 "MASTER"...
ORACLE 例程已经启动。
数据库装载完毕。
切换成功, 新的主数据库为 "slave"
DGMGRL> show configuration
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
slave - 主数据库
orcl - 物理备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
DGMGRL>
3. 主备测试
# 主库上,主备已经切换了备库上了。
SQL> conn / as sysdba;
已连接。
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY orcl
SQL>
备库上,备库上已经切换成了主库了。
SQL> conn / as sysdba;
已连接。
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ WRITE PRIMARY slave
SQL>
SQL> conn abc/abc
已连接。
SQL> select * from abc;
ID NAME
---------- ----------
3 ddd
4 eee
2 ccc
0 aaa
1 bbb
# 要切换后的主库上新插入一条记录。
SQL> insert into abc values ( 5 , 'new' );
已创建 1 行。
SQL> commit;
提交完成。
SQL> select * from abc;
ID NAME
---------- ----------
3 ddd
4 eee
5 new
2 ccc
0 aaa
1 bbb
已选择6行。
SQL>
4. 备库再切到主库(切回)
# 备库再切到主库
DGMGRL> switchover to orcl;
立即执行切换, 请稍候...
新的主数据库 "master" 正在打开...
操作要求关闭实例 "SLAVE" (在数据库 "slave" 上)
正在关闭实例 "SLAVE"...
ORACLE 例程已经关闭。
操作要求启动实例 "SLAVE" (在数据库 "slave" 上)
正在启动实例 "SLAVE"...
ORACLE 例程已经启动。
数据库装载完毕。
切换成功, 新的主数据库为 "master"
DGMGRL> show configuration
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
orcl - 主数据库
slave - 物理备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
# 主库上SQL查看,主备已经切换了
SQL> conn / as sysdba;
已连接。
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ WRITE PRIMARY orcl
SQL>
SQL> conn abc/abc
已连接。
SQL> select * from abc;
ID NAME
---------- ----------
3 ddd
4 eee
5 new
2 ccc
0 aaa
1 bbb
已选择6行。
SQL>
在主库上插入的记录也有了,实现了数据无损切换。
备库上SQL查看,备库上已经切回来了。
SQL> conn / as sysdba;
已连接。
SQL> conn / as sysdba;
已连接。
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY slave
SQL>
本文采用Oracle 11g Dataguard broker fastfailover测试
Oracle 11g Dataguard fast failover配置,需要主备数据库开启闪回功能,闪回功能开启本文略过。
闪回开启需要启动到mount状态时,主备库的监听不要随意关闭。
1. dgmgrl查看主备库状态
$ dgmgrl sys/oracle
DGMGRL for Linux: Version 11.2.0.3.0 - 64bit Production
Copyright (c) 2000, 2009, Oracle. All rights reserved.
欢迎使用 DGMGRL, 要获取有关信息请键入 "help"。
已连接。
DGMGRL> show configuration;
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
orcl - 主数据库
slave - 物理备用数据库
快速启动故障转移: DISABLED
配置状态:
SUCCESS
#快速启动故障转移是不可用状态。
#查看故障转移情况, DISABLED没有启用。
DGMGRL> show fast_start failover
快速启动故障转移: DISABLED
阈值: 30 秒
目标: (无)
观察程序: (无)
滞后限制: 30 秒
关闭主数据库: TRUE
自动恢复: TRUE
可配置的故障转移条件
健康状况:
Corrupted Controlfile YES
Corrupted Dictionary YES
Inaccessible Logfile NO
Stuck Archiver NO
Datafile Offline YES
Oracle 错误条件:
(无)
2. 启动快速启动故障转移
DGMGRL> enable fast_start failover;
3. 启动快速启动故障转移observer观察程序
DGMGRL> start observer;
说明:start observer后,观察程序不会在后台运行,就在前台显示。
在实际使用过程中,需要单独在服务器上启动,在后台自动运行,不能关闭,否则主备库就无法自动监控运行状态。
就无法使用快速启动故障转移功能。
4. 在另一个窗口执行查看
$ dgmgrl sys/oracle
DGMGRL> show fast_start failover;
快速启动故障转移: ENABLED
阈值: 30 秒
目标: slave
观察程序: master
滞后限制: 45 秒
关闭主数据库: TRUE
自动恢复: TRUE
可配置的故障转移条件
健康状况:
Corrupted Controlfile YES
Corrupted Dictionary YES
Inaccessible Logfile NO
Stuck Archiver NO
Datafile Offline YES
Oracle 错误条件:
(无)
DGMGRL> show configuration
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
slave - 主数据库
orcl - (*) 物理备用数据库
快速启动故障转移: ENABLED
配置状态:
SUCCESS
至此dgmgrl 配置的fast_start failover已经配置好,下面模拟故障切换过程。
可以通过shutdown abort模拟数据库意外垮掉的情况,
注1:主库shutdown immediate是不会启动fast start failover功能的。
注2:oracle 11g dataguard fast start failover切换不需要主备库运行在最大可用模式。
5. 模拟测试主库意外垮掉
1)主库上:
$ sqlplus / as sysdba;
SQL> shutdown abort;
观察器显示日志:显示执行主备切换过程
00:18:57.09 2013年8月18日 星期日
正在为数据库 "slave" 启动快速启动故障转移...
立即执行故障转移, 请稍候...
故障转移成功, 新的主数据库为 "slave"
00:19:02.01 2013年8月18日 星期日
主库alter日志:
FSFP started with pid=34, OS id=8169
Sun Aug 18 00:18:24 2013
Shutting down instance (abort)
License high water mark = 16
USER (ospid: 8657): terminating the instance
Instance terminated by USER, pid = 8657
Sun Aug 18 00:18:29 2013
Instance shutdown complete
2) 备库上
登录备库,查看数据库状态已经切换回主库角色
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
READ WRITE PRIMARY slave
SQL>
切换时备库alter日志,通过日志可以看到整个的切换过程。
[oracle@slave trace]$ tail -f alert_slave.log
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE THROUGH ALL SWITCHOVER DISCONNECT USING CURRENT LOGFILE
Sat Aug 17 23:58:57 2013
RFS[2]: Assigned to RFS process 29401
RFS[2]: Selected log 5 for thread 1 sequence 22 dbid 1351417842 branch 823637109
Sat Aug 17 23:59:00 2013
Media Recovery Waiting for thread 1 sequence 23 (in transit)
Recovery of Online Redo Log: Thread 1 Group 4 Seq 23 Reading mem 0
Mem# 0: /u01/app/oracle/oradata/slave/standby_redo04.log
Sat Aug 17 23:59:11 2013
Archived Log entry 17 added for thread 1 sequence 22 ID 0x508c9ff2 dest 1:
Sun Aug 18 00:13:22 2013
db_recovery_file_dest_size of 4122 MB is 1.21% used. This is a
user-specified limit on the amount of space that will be used by this
database for recovery-related files, and does not reflect the amount of
space available in the underlying filesystem or ASM diskgroup.
Sun Aug 18 00:18:28 2013
RFS[1]: Possible network disconnect with primary database
Sun Aug 18 00:18:28 2013
RFS[3]: Assigned to RFS process 29397
RFS[3]: Possible network disconnect with primary database
Sun Aug 18 00:18:29 2013
RFS[2]: Possible network disconnect with primary database
Sun Aug 18 00:19:00 2013
Attempting Fast-Start Failover because the threshold of 30 seconds has elapsed.
Sun Aug 18 00:19:00 2013
Data Guard Broker: Beginning failover
Sun Aug 18 00:19:00 2013
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL
Sun Aug 18 00:19:00 2013
MRP0: Background Media Recovery cancelled with status 16037
Errors in file /u01/app/oracle/diag/rdbms/slave/slave/trace/slave_mrp0_29392.trc:
ORA-16037: user requested cancel of managed recovery operation
Managed Standby Recovery not using Real Time Apply
Recovery interrupted!
Recovered data files to a consistent state at change 1136886
MRP0: Background Media Recovery process shutdown (slave)
Managed Standby Recovery Canceled (slave)
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL
ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE
Attempt to do a Terminal Recovery (slave)
Media Recovery Start: Managed Standby Recovery (slave)
Serial Media Recovery started
Managed Standby Recovery not using Real Time Apply
Begin: Standby Redo Logfile archival
End: Standby Redo Logfile archival
Terminal Recovery timestamp is '08/18/2013 00:19:01'
Terminal Recovery: applying standby redo logs.
Terminal Recovery: thread 1 seq# 23 redo required
Terminal Recovery:
Recovery of Online Redo Log: Thread 1 Group 4 Seq 23 Reading mem 0
Mem# 0: /u01/app/oracle/oradata/slave/standby_redo04.log
Identified End-Of-Redo (failover) for thread 1 sequence 23 at SCN 0xffff.ffffffff
Incomplete Recovery applied until change 1136887 time 08/18/2013 00:18:23
Media Recovery Complete (slave)
Terminal Recovery: successful completion
Forcing ARSCN to IRSCN for TR 0:1136887
Attempt to set limbo arscn 0:1136887 irscn 0:1136887
Resetting standby activation ID 1351393266 (0x508c9ff2)
Completed: ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH FORCE
ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WAIT WITH SESSION SHUTDOWN
ALTER DATABASE SWITCHOVER TO PRIMARY (slave)
Maximum wait for role transition is 15 minutes.
Sun Aug 18 00:19:02 2013
ARCH: Archival stopped, error occurred. Will continue retrying
ORACLE Instance slave - Archival Error
ORA-16014: log 4 sequence# 23 not archived, no available destinations
ORA-00312: online log 4 thread 1: '/u01/app/oracle/oradata/slave/standby_redo04.log'
Backup controlfile written to trace file /u01/app/oracle/diag/rdbms/slave/slave/trace/slave_rsm0_29388.trc
Standby terminal recovery start SCN: 1136886
RESETLOGS after complete recovery through change 1136887
Online log /u01/app/oracle/oradata/slave/redo01.log: Thread 1 Group 1 was previously cleared
Online log /u01/app/oracle/oradata/slave/redo02.log: Thread 1 Group 2 was previously cleared
Online log /u01/app/oracle/oradata/slave/redo03.log: Thread 1 Group 3 was previously cleared
Standby became primary SCN: 1136885
Sun Aug 18 00:19:02 2013
Setting recovery target incarnation to 4
Switchover: Complete - Database mounted as primary
Completed: ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WAIT WITH SESSION SHUTDOWN
ALTER DATABASE OPEN
Data Guard Broker initializing...
Sun Aug 18 00:19:02 2013
Assigning activation ID 1351535899 (0x508ecd1b)
Sun Aug 18 00:19:02 2013
ARC1: Becoming the 'no SRL' ARCH
Thread 1 advanced to log sequence 2 (thread open)
Thread 1 opened at log sequence 2
Current log# 2 seq# 2 mem# 0: /u01/app/oracle/oradata/slave/redo02.log
Successful open of redo thread 1
MTTR advisory is disabled because FAST_START_MTTR_TARGET is not set
Sun Aug 18 00:19:02 2013
SMON: enabling cache recovery
Archiver process freed from errors. No longer stopped
ARC4: LGWR is scheduled to archive destination LOG_ARCHIVE_DEST_2 after log switch
Sun Aug 18 00:19:02 2013
NSA2 started with pid=29, OS id=29504
[29388] Successfully onlined Undo Tablespace 2.
Undo initialization finished serial:0 start:18267234 end:18267424 diff:190 (1 seconds)
Dictionary check beginning
Sun Aug 18 00:19:03 2013
Error 1034 received logging on to the standby
Error 1034 received logging on to the standby
ARC4: Error 1034 Creating archive log file to 'orcl'
PING[ARC2]: Heartbeat failed to connect to standby 'orcl'. Error is 1034.
Dictionary check complete
Archived Log entry 18 added for thread 1 sequence 1 ID 0x508ecd1b dest 1:
Verifying file header compatibility for 11g tablespace encryption..
Verifying 11g file header compatibility for tablespace encryption completed
SMON: enabling tx recovery
Database Characterset is ZHS16GBK
No Resource Manager plan active
replication_dependency_tracking turned off (no async multimaster replication found)
Starting background process QMNC
Sun Aug 18 00:19:04 2013
QMNC started with pid=30, OS id=29508
LOGSTDBY: Validating controlfile with logical metadata
Thread 1 advanced to log sequence 3 (LGWR switch)
Current log# 3 seq# 3 mem# 0: /u01/app/oracle/oradata/slave/redo03.log
LOGSTDBY: Validation complete
Archived Log entry 19 added for thread 1 sequence 2 ID 0x508ecd1b dest 1:
Completed: ALTER DATABASE OPEN
ALTER SYSTEM SET log_archive_trace=0 SCOPE=BOTH SID='slave';
ALTER SYSTEM SET log_archive_format='arch_%r_%t_%s.arc' SCOPE=SPFILE SID='slave';
ALTER SYSTEM SET standby_file_management='AUTO' SCOPE=BOTH SID='*';
ALTER SYSTEM SET archive_lag_target=0 SCOPE=BOTH SID='*';
ALTER SYSTEM SET log_archive_max_processes=5 SCOPE=BOTH SID='*';
ALTER SYSTEM SET log_archive_min_succeed_dest=1 SCOPE=BOTH SID='*';
ALTER SYSTEM SET db_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/slave/' SCOPE=SPFILE;
ALTER SYSTEM SET log_file_name_convert='/u01/app/oracle/oradata/orcl/','/u01/app/oracle/oradata/slave/' SCOPE=SPFILE;
ALTER SYSTEM SET log_archive_dest_state_2='RESET' SCOPE=BOTH;
Failover succeeded. Primary database is now slave.
Sun Aug 18 00:19:08 2013
Starting background process CJQ0
Sun Aug 18 00:19:08 2013
CJQ0 started with pid=35, OS id=29544
Setting Resource Manager plan SCHEDULER[0x318E]:DEFAULT_MAINTENANCE_PLAN via scheduler window
Setting Resource Manager plan DEFAULT_MAINTENANCE_PLAN via parameter
Sun Aug 18 00:19:11 2013
Starting background process VKRM
Sun Aug 18 00:19:11 2013
VKRM started with pid=33, OS id=29548
Sun Aug 18 00:19:17 2013
FSFP started with pid=39, OS id=29568
Sun Aug 18 00:19:25 2013
ARC2: STARTING ARCH PROCESSES
Sun Aug 18 00:19:25 2013
ARC5 started with pid=40, OS id=29572
ARC5: Archival started
ARC2: STARTING ARCH PROCESSES COMPLETE
krsk_srl_archive_int: Enabling archival of deferred physical standby SRLs
Archived Log entry 20 added for thread 1 sequence 23 ID 0x508c9ff2 dest 1:
Sun Aug 18 00:19:43 2013
Shutting down archive processes
ARCH shutting down
ARC5: Archival stopped
6. 原主库再次启动
说明:原主库再次启动时,角色不会自动切换回,除非手动切换一次switchover到orcl。
DGMGRL> show configuration
配置 - dgorcldb
保护模式: MaxPerformance
数据库:
slave - 主数据库
orcl - (*) 物理备用数据库
快速启动故障转移: ENABLED
配置状态:
SUCCESS
DGMGRL>