说明:
本文安装配置了Oracle 11g Dataguard 物理备库,并测试了11g Dataguard 物理备库新特性Active Data Guard, 是Oracle Database Enterprise Edition的一个功能,需要额外授权,本文只用于测试。
一、环境介绍
1. 主数据库环境
操作系统版本: OEL5.8 x64
数据库版本 : Oracle 11.2.0.3 x64
数据库sid名 : orcl
2. 备库环境
操作系统版本: OEL5.8 x64
数据库版本 : Oracle 11.2.0.3 x64 (只安装oracle数据库软件,no netca dbca)
数据库sid名 : orcl
3. DataGuard启动顺序
启动顺序:先启备库,后启主库
关闭顺序:先关主库,后关备库
二、主数据库配置
1. 配置hosts文件
# vi /etc/hosts
192.168.233.200 rman
192.168.233.150 slave
2. 修改配置lisener监听文件
$ 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)
)
)
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)
)
)
DG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.150)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = abc)
)
)
4. 修改配置成规档模式
1)、检查数据库是否处于归档状态
SQL> archive log list;
SQL> shutdown immediate;
SQL> startup mount;
SQL> alter database archivelog;
SQL> alter database open;
2)、将主库设置为 FORCE LOGGING 模式
SQL> alter database force logging;
SQL> select force_logging from v$database;
FORCE_LOG
―――
YES
5. 修改参数文件
SQL>
alter system set db_unique_name='ORCL' scope=spfile;
alter system set log_archive_config='DG_CONFIG=(ORCL,DG)';
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=DG lgwr async valid_for=(online_logfile,primary_role)
db_unique_name=DG';
alter system set fal_client='ORCL';
alter system set fal_server='DG';
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;
shutdown immediate
startup
create pfile from spfile;
6. 将pfile文件拷贝到备库。
$ scp /u01/app/oracle/product/11.2.0/db_1/dbs/initorcl.ora 192.168.233.150:/home/oracle/
三、备库配置
1. 配置hosts文件
# vi /etc/hosts
192.168.233.200 rman
192.168.233.150 slave
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 = orcl
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
(SID_DESC =
(GLOBAL_DBNAME = orcl)
(ORACLE_HOME = /u01/app/oracle/product/11.2.0/db_1)
(SID_NAME = orcl)
)
)
注意:这里配置的是静态监听,下面在duplicate数据库时启动到nomount状态,nomount状态下数据库不动态去注册监听。
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)
)
)
DG =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.233.150)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
测试服务名连通性:
tnsping ORCL
tnsping DG
4. 创建11g数据库基本目录
# su - oracle
mkdir -p /u01/app/oracle/admin/orcl/{adump,dpdump,pfile,scripts}
mkdir -p /u01/app/oracle/oradata/orcl
mkdir -p /u01/app/oracle/fast_recovery_area/orcl
mkdir -p /u01/archivelog
5. 修改pfile参数文件
$ vi /home/oracle/initorcl.ora
orcl.__db_cache_size=314572800
orcl.__java_pool_size=4194304
orcl.__large_pool_size=4194304
orcl.__oracle_base='/u01/app/oracle'#ORACLE_BASE set from environment
orcl.__pga_aggregate_target=339738624
orcl.__sga_target=503316480
orcl.__shared_io_pool_size=0
orcl.__shared_pool_size=167772160
orcl.__streams_pool_size=4194304
*.audit_file_dest='/u01/app/oracle/admin/orcl/adump'
*.audit_trail='db'
*.compatible='11.2.0.0.0'
*.control_files='/u01/app/oracle/oradata/orcl/control01.ctl','/u01/app/oracle/fast_recovery_area/orcl/control02.ctl'
*.db_block_size=8192
*.db_domain=''
*.db_name='orcl'
*.db_recovery_file_dest='/u01/app/oracle/fast_recovery_area'
*.db_recovery_file_dest_size=4322230272
*.db_unique_name='DG'
*.diagnostic_dest='/u01/app/oracle'
*.dispatchers='(PROTOCOL=TCP) (SERVICE=orclXDB)'
*.fal_client='DG'
*.fal_server='ORCL'
*.log_archive_config='DG_CONFIG=(ORCL,DG)'
*.log_archive_dest_1='LOCATION=/u01/archivelog/ valid_for=(all_logfiles,all_roles) db_unique_name=DG'
*.log_archive_dest_2='SERVICE=ORCL lgwr async valid_for=(online_logfile,primary_role) db_unique_name=ORCL'
*.memory_target=842006528
*.open_cursors=300
*.processes=150
*.remote_login_passwordfile='EXCLUSIVE'
*.standby_file_management='AUTO'
*.undo_tablespace='UNDOTBS1'
说明:修改DG相关配置参数。
6. 创建口令文件
# su - oracle
$ orapwd file='/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl' password=oracle entries=10
7. 启动到nomount状态
$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> create spfile from pfile='/home/oracle/initorcl.ora';
SQL> startup nomount;
四、 开始在RMAN duplicate数据库
1. RMAN同进连接主库与备库
$ rman target sys/oracle@ORCL auxiliary sys/oracle@DG
恢复管理器: Release 11.2.0.3.0 - Production on 星期日 8月 4 00:53:40 2013
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
已连接到目标数据库: ORCL (DBID=1350215700)
已连接到辅助数据库: ORCL (未装载)
2. 开始duplicate数据库
RMAN> duplicate target database for standby nofilenamecheck from active database;
启动 Duplicate Db 于 04-8月 -13
使用目标数据库控制文件替代恢复目录
分配的通道: ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: SID=19 设备类型=DISK
内存脚本的内容:
{
backup as copy reuse
targetfile '/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl' auxiliary format
'/u01/app/oracle/product/11.2.0/db_1/dbs/orapworcl' ;
}
正在执行内存脚本
启动 backup 于 04-8月 -13
分配的通道: ORA_DISK_1
通道 ORA_DISK_1: SID=21 设备类型=DISK
完成 backup 于 04-8月 -13
内存脚本的内容:
{
backup as copy current controlfile for standby auxiliary format '/u01/app/oracle/oradata/orcl/control01.ctl';
restore clone controlfile to '/u01/app/oracle/fast_recovery_area/orcl/control02.ctl' from
'/u01/app/oracle/oradata/orcl/control01.ctl';
}
正在执行内存脚本
启动 backup 于 04-8月 -13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
复制备用控制文件
输出文件名=/u01/app/oracle/product/11.2.0/db_1/dbs/snapcf_orcl.f 标记=TAG20130804T005344 RECID=7 STAMP=822531224
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:01
完成 backup 于 04-8月 -13
启动 restore 于 04-8月 -13
使用通道 ORA_AUX_DISK_1
通道 ORA_AUX_DISK_1: 已复制控制文件副本
完成 restore 于 04-8月 -13
内存脚本的内容:
{
sql clone 'alter database mount standby database';
}
正在执行内存脚本
sql 语句: alter database mount standby database
内存脚本的内容:
{
set newname for tempfile 1 to
"/u01/app/oracle/oradata/orcl/temp01.dbf";
switch clone tempfile all;
set newname for datafile 1 to
"/u01/app/oracle/oradata/orcl/system01.dbf";
set newname for datafile 2 to
"/u01/app/oracle/oradata/orcl/sysaux01.dbf";
set newname for datafile 3 to
"/u01/app/oracle/oradata/orcl/undotbs01.dbf";
set newname for datafile 4 to
"/u01/app/oracle/oradata/orcl/users01.dbf";
backup as copy reuse
datafile 1 auxiliary format
"/u01/app/oracle/oradata/orcl/system01.dbf" datafile
2 auxiliary format
"/u01/app/oracle/oradata/orcl/sysaux01.dbf" datafile
3 auxiliary format
"/u01/app/oracle/oradata/orcl/undotbs01.dbf" datafile
4 auxiliary format
"/u01/app/oracle/oradata/orcl/users01.dbf" ;
sql 'alter system archive log current';
}
正在执行内存脚本
正在执行命令: SET NEWNAME
临时文件 1 在控制文件中已重命名为 /u01/app/oracle/oradata/orcl/temp01.dbf
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
正在执行命令: SET NEWNAME
启动 backup 于 04-8月 -13
使用通道 ORA_DISK_1
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00001 名称=/u01/app/oracle/oradata/orcl/system01.dbf
输出文件名=/u01/app/oracle/oradata/orcl/system01.dbf 标记=TAG20130804T005352
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:09:20
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00002 名称=/u01/app/oracle/oradata/orcl/sysaux01.dbf
输出文件名=/u01/app/oracle/oradata/orcl/sysaux01.dbf 标记=TAG20130804T005352
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:03:48
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00003 名称=/u01/app/oracle/oradata/orcl/undotbs01.dbf
输出文件名=/u01/app/oracle/oradata/orcl/undotbs01.dbf 标记=TAG20130804T005352
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:25
通道 ORA_DISK_1: 启动数据文件副本
输入数据文件: 文件号=00004 名称=/u01/app/oracle/oradata/orcl/users01.dbf
输出文件名=/u01/app/oracle/oradata/orcl/users01.dbf 标记=TAG20130804T005352
通道 ORA_DISK_1: 数据文件复制完毕, 经过时间: 00:00:03
完成 backup 于 04-8月 -13
sql 语句: alter system archive log current
内存脚本的内容:
{
switch clone datafile all;
}
正在执行内存脚本
数据文件 1 已转换成数据文件副本
输入数据文件副本 RECID=7 STAMP=822532054 文件名=/u01/app/oracle/oradata/orcl/system01.dbf
数据文件 2 已转换成数据文件副本
输入数据文件副本 RECID=8 STAMP=822532054 文件名=/u01/app/oracle/oradata/orcl/sysaux01.dbf
数据文件 3 已转换成数据文件副本
输入数据文件副本 RECID=9 STAMP=822532054 文件名=/u01/app/oracle/oradata/orcl/undotbs01.dbf
数据文件 4 已转换成数据文件副本
输入数据文件副本 RECID=10 STAMP=822532054 文件名=/u01/app/oracle/oradata/orcl/users01.dbf
完成 Duplicate Db 于 04-8月 -13
RMAN>
RMAN>
RMAN> exit
Recovery Manager complete.
3. 查看备库状态
说明:duplicate数据库之后,备库只是处于mount状态,查看备库状态。
[oracle@slave orcl]$ sqlplus /nolog
SQL*Plus: Release 11.2.0.3.0 Production on 星期日 8月 4 01:09:07 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
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY DG
4. 将备库置与应用日志模式状态
SQL> alter database recover managed standby database using current logfile disconnect from session;
Database altered.
SQL> select open_mode,database_role,db_unique_name from v$database;
OPEN_MODE DATABASE_ROLE DB_UNIQUE_NAME
-------------------- ---------------- ------------------------------
MOUNTED PHYSICAL STANDBY DG
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' );
已创建 1 行。
SQL> commit;
提交完成。
SQL> conn / as sysdba;
已连接。
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 /u01/archivelog/
最早的联机日志序列 18
下一个存档日志序列 20
当前日志序列 20
SQL>
2)备库上验证
SQL> archive log list;
数据库日志模式 存档模式
自动存档 启用
存档终点 /u01/archivelog/
最早的联机日志序列 18
下一个存档日志序列 0
当前日志序列 20
SQL> select sequence#,first_time,next_time,applied from v$archived_log order by sequence#;
SEQUENCE# FIRST_TIME NEXT_TIME APPLIED
---------- -------------- -------------- ---------
12 04-8月 -13 04-8月 -13 YES
13 04-8月 -13 04-8月 -13 YES
14 04-8月 -13 04-8月 -13 YES
15 04-8月 -13 04-8月 -13 YES
16 04-8月 -13 04-8月 -13 YES
17 04-8月 -13 04-8月 -13 YES
18 04-8月 -13 04-8月 -13 YES
19 04-8月 -13 04-8月 -13 YES
20 04-8月 -13 04-8月 -13 IN-MEMORY
已选择9行。
说明: IN-MEMORY是11G的新特性。
五、将备库置于Active DataGuard模式,体验实时查询
在Oracle 11g之前,物理备库(physical Standby)在应用redo的时候,数据库需要处于mount状态。从11g开始,应用redo的时
候,物理备库可以处于read-only模式,这就称为Active Data Guard 。通过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 DG
2) 取消备库的自动恢复
SQL> alter database recover managed standby database cancel;
数据库已更改。
3) OPEN备库为只读模式(Dataguard只能启动到readonly模式)
SQL> alter database open;
数据库已更改。
SQL> select open_mode from v$database;
OPEN_MODE
--------------------
READ ONLY
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 DG
2. 主库上操作执行DDL,DML操作
# su - oracle
$ sqlplus /nolog
SQL> conn / as sysdba;
SQL> create tablespace abc datafile '/u01/app/oracle/oradata/orcl/abc.dbf' size 10m autoextend on next 10m;
表空间已创建。
SQL> conn abc/abc
已连接。
SQL> insert into abc values (1 , 'bbb');
已创建 1 行。
SQL> commit;
提交完成。
SQL>
3. 备库上查看
SQL> select name from v$tablespace;
NAME
------------------------------
SYSTEM
SYSAUX
UNDOTBS1
USERS
TEMP
ABC
已选择6行。
SQL> conn abc/abc;
已连接。
SQL> select * from abc;
ID NAME
---------- ----------
0 aaa
1 bbb
主备的修改很快在备库上应用。