Oracle 11g DataGuard 物理备库配置及Active DataGuard测试

说明:
本文安装配置了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


主备的修改很快在备库上应用。

 


 

你可能感兴趣的:(oracle,dataguard)