Chinaunix首页 | 论坛 | 博客
  • 博客访问: 235069
  • 博文数量: 47
  • 博客积分: 1630
  • 博客等级: 上尉
  • 技术积分: 972
  • 用 户 组: 普通用户
  • 注册时间: 2008-02-20 12:52
文章存档

2013年(12)

2012年(6)

2010年(27)

2009年(2)

我的朋友

分类: Oracle

2012-08-19 23:38:48

本文记录了在一台主机上实现部署Oracle 11g物理Active Data Guard的全过程,部署完毕后备库处于默认的最大性能模式。同时带大家一同体验一下Active Data Guard实时查询(Real-time query)特性。
  操作系统版本信息:
  1. ora11g@secdb /home/oracle$ cat /etc/redhat-release
  2. Red Hat Enterprise Linux Server release 5.5 (Tikanga)
复制代码
  Oracle数据库版本信息:
  1. sys@ora11g> select * from v$version;

  2. BANNER
  3. ----------------------------------------------------------------------
  4. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
  5. PL/SQL Release 11.2.0.1.0 - Production
  6. CORE    11.2.0.1.0      Production
  7. TNS for Linux: Version 11.2.0.1.0 - Production
  8. NLSRTL Version 11.2.0.1.0 - Production
复制代码

1.Oracle 11g Data Guard主库配置过程
1)确保主库处于FORCE LOGGING模式
  调整方法如下:
(1)查看当前数据库是否处于FORCE LOGGING模式
  1. sys@ora11g> col force_logging for a15
  2. sys@ora11g> select force_logging from v$database;

  3. FORCE_LOGGING
  4. ---------------
  5. NO
复制代码

  此处表明数据库运行在非FORCE LOGGING模式。

(2)调整数据库为FORCE LOGGING模式
  1. sys@ora11g> alter database force logging;

  2. Database altered.
复制代码

(3)再次查看当前数据库是否处于FORCE LOGGING模式
  1. sys@ora11g> select force_logging from v$database;

  2. FORCE_LOGGING
  3. ---------------
  4. YES
复制代码

  OK,FORCE LOGGING模式调整完毕。

2)配置Redo传输认证
  Data Guard使用Oracle Net会话在主库和备库之间传输redo数据和控制信息,因此需要基于SSL(Secure Sockets Layer )或者密码文件进行认证。当SSL认证无法满足时使用密码文件进行认证,因此需要确保所有备库的密码文件与主库保持一致。备库可以通过拷贝主库密码文件的方法完成。

3)配置主库用于接收Redo数据
  此步骤是可选步骤,Oracle建议在配置主库的时候就预见到总有一天它会成为备库(例如进行主备库之间的switchover切换),要求当主库成为备库之后不需要做其他配置就可以顺畅地接收主库传过来的Redo数据。这也是Oracle最佳实践的一种体现。
(1)查看日志组日志成员大小
  创建的Standby Redo Log大小要与主库的Redo大小保持一致。
  1. sys@ora11g> select group#, bytes from v$log;

  2.     GROUP#      BYTES
  3. ---------- ----------
  4.          1   52428800
  5.          2   52428800
  6.          3   52428800
复制代码

  此时主库每组日志的日志成员大小都是50M。因此创建的Standby Redo Log大小也是50M。

(2)创建适当数量的Standby Redo Log组数
  公式如下:
  如果主库是单实例数据库:Standby Redo Log组数=主库日志组总数+1
  如果住口是RAC数据库:Standby Redo Log组数=(所有节点中日志组数最大值 + 1) * RAC节点数

  从上面日志组查询结果可见,此数据库是一个单实例的数据库,包含三组日志。因此Standby Redo Log组数=3+1=4。
  需要创建四组Standby Redo Log日志。

(3)确认数据库参数MAXLOGFILES和MAXLOGMEMBERS不会限制Standby Redo Log创建
  MAXLOGFILES和MAXLOGMEMBERS这两参数是在使用“CREATE DATABASE”语句创建数据库时做的限制,用于限制数据库日志文件的最大数量和日志组的最大数量。
  如果在创建数据库时没有注意这个问题会导致Standby Redo Log无法创建的问题,解决方法只能是创新创建主库或者重新创建主库的控制文件。所以,一定要做好前期的规划。

(4)创建Standby Redo Log
  1. sys@ora11g> alter database add standby logfile ('/u01/app/oracle/oradata/ora11g/stdb_redo01.log') size 50m;

  2. Database altered.

  3. sys@ora11g> alter database add standby logfile ('/u01/app/oracle/oradata/ora11g/stdb_redo02.log') size 50m;

  4. Database altered.

  5. sys@ora11g> alter database add standby logfile ('/u01/app/oracle/oradata/ora11g/stdb_redo03.log') size 50m;

  6. Database altered.

  7. sys@ora11g> alter database add standby logfile ('/u01/app/oracle/oradata/ora11g/stdb_redo04.log') size 50m;

  8. Database altered.
复制代码

(5)验证查看Standby Redo Log创建结果
  1. sys@ora11g> select group#,thread#,sequence#,archived,status from v$standby_log;

  2.     GROUP#    THREAD#  SEQUENCE# ARC STATUS
  3. ---------- ---------- ---------- --- ----------
  4.          4          0          0 YES UNASSIGNED
  5.          5          0          0 YES UNASSIGNED
  6.          6          0          0 YES UNASSIGNED
  7.          7          0          0 YES UNASSIGNED
复制代码

4)设置主库的参数文件
  我这里的主库的实例名字是ora11g,备库的实例名约定为ora11gdg。
  连接主库的Oracle网络服务名是ora11g,备库的网络服务名是ora11gdg。

(1)Oracle网络服务名配置信息如下
  1. ora11g@secdb /home/oracle$ vi $ORACLE_HOME/network/admin/tnsnames.ora
  2. ORA11G =
  3.   (DESCRIPTION =
  4.     (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
  5.     (CONNECT_DATA =
  6.       (SERVER = DEDICATED)
  7.       (SERVICE_NAME = ora11g)
  8.     )
  9.   )

  10. ORA11GDG =
  11.   (DESCRIPTION =
  12.     (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
  13.     (CONNECT_DATA =
  14.       (SERVER = DEDICATED)
  15.       (SERVICE_NAME = ora11gdg)
  16.     )
  17.   )
复制代码

(2)生成主库的pfile文件并编辑
  1. sys@ora11g> create pfile from spfile;

  2. File created.

  3. ora11g@secdb /home/oracle$ cd $ORACLE_HOME/dbs
  4. ora11g@secdb /u01/app/oracle/product/11.2.0/db_1/dbs$ ls -ltr
  5. total 36K
  6. -rw-r--r-- 1 oracle oinstall 2.8K May 15  2009 init.ora
  7. drwx------ 2 oracle oinstall 4.0K Mar 15 19:37 peshm_DBUA0_0/
  8. drwx------ 2 oracle oinstall 4.0K Mar 15 19:40 peshm_ora11g_0/
  9. -rw-rw---- 1 oracle oinstall 1.6K Mar 15 21:28 hc_DBUA0.dat
  10. -rw-r----- 1 oracle oinstall   24 Mar 15 21:32 lkORA11G
  11. -rw-rw---- 1 oracle oinstall 1.6K Mar 15 21:35 hc_ora11g.dat
  12. -rw-r----- 1 oracle oinstall 1.5K Mar 15 21:35 orapwora11g
  13. -rw-r----- 1 oracle oinstall 2.5K Mar 15 21:42 spfileora11g.ora
  14. -rw-r--r-- 1 oracle oinstall  924 Mar 15 21:45 initora11g.ora
  15. ora11g@secdb /oracle/ora11gR2/product/11.2.0/dbhome_1/dbs$ vi initora11g.ora
复制代码

(3)主库配置——当是主库角色时需要的参数
  1. DB_NAME=ora11g
  2. DB_UNIQUE_NAME=ora11g
  3. LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora11g,ora11gdg)'
  4. control_files='/u01/app/oracle/oradata/ora11g/control01.ctl','/u01/app/oracle/oradata/ora11g/control02.ctl'
  5. LOG_ARCHIVE_DEST_1=
  6. 'LOCATION=/home/oracle/arch/ora11g/
  7.   VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  8.   DB_UNIQUE_NAME=ora11g'
  9. LOG_ARCHIVE_DEST_2=
  10. 'SERVICE=ora11gdg ASYNC
  11.   VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  12.   DB_UNIQUE_NAME=ora11gdg'
  13. LOG_ARCHIVE_DEST_STATE_1=ENABLE
  14. LOG_ARCHIVE_DEST_STATE_2=ENABLE
  15. REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
  16. LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
复制代码

(4)主库配置——当是备库角色时需要的参数
  1. FAL_CLIENT=ora11g
  2. FAL_SERVER=ora11gdg
  3. DB_FILE_NAME_CONVERT='ora11gdg','ora11g'
  4. LOG_FILE_NAME_CONVERT='ora11gdg','ora11g'
  5. STANDBY_FILE_MANAGEMENT=AUTO
复制代码

(5)创建所需要的目录
  1. ora11g@secdb /home/oracle$ mkdir -p /home/oracle/arch/ora11g
  2. ora11g@secdb /home/oracle$ mkdir -p /home/oracle/arch/ora11gdg
复制代码

5)数据库运行在归档模式
  如果数据库为运行在归档模式下,按照如下步骤调整数据库为归档模式。
(1)查看是否为归档模式
  1. sys@ora11g> archive log list;
  2. Database log mode              No Archive Mode
  3. Automatic archival             Disabled
  4. Archive destination            USE_DB_RECOVERY_FILE_DEST
  5. Oldest online log sequence     4
  6. Current log sequence           6
复制代码

  结果显示“Database log mode”内容“No Archive Mode”表明数据库未运行在归档模式下。

(2)停止数据库并启动到mount状态
  1. sys@ora11g> shutdown immediate;
  2. Database closed.
  3. Database dismounted.
  4. ORACLE instance shut down.
  5. sys@ora11g> startup mount;
  6. ORACLE instance started.

  7. Total System Global Area  535662592 bytes
  8. Fixed Size                  1337720 bytes
  9. Variable Size             402654856 bytes
  10. Database Buffers          125829120 bytes
  11. Redo Buffers                5840896 bytes
  12. Database mounted.
复制代码

(3)启用归档
  1. sys@ora11g> alter database archivelog;

  2. Database altered.
复制代码

(4)调整数据库为open状态
  1. sys@ora11g> alter database open;

  2. Database altered.
复制代码

2.Oracle 11g Data Guard物理备库创建过程
1)创建主库数据文件的备份
  最常用的方法是使用RMAN工具完成,这样可以实现不停库的部署;还可以使用冷备完成。
  因为这里实现的是主库和备库都在一台主机上,因此,这里使用冷备的方式生成数据文件的备份,并放到备库对应的目录下。
(1)关闭数据库
  1. sys@ora11g> shutdown immediate;
  2. Database closed.
  3. Database dismounted.
  4. ORACLE instance shut down.
复制代码

(2)主库数据文件的备份
  1. ora11g@secdb /home/oracle$ cd /u01/app/oracle/oradata/ora11g/
  2. ora11g@secdb /u01/app/oracle/oradata/ora11g$ ls -l
  3. total 1.7G
  4. -rw-r----- 1 oracle oinstall 9.4M Mar 15 21:47 control01.ctl
  5. -rw-r----- 1 oracle oinstall 9.4M Mar 15 21:47 control02.ctl
  6. -rw-r----- 1 oracle oinstall  51M Mar 15 21:46 redo01.log
  7. -rw-r----- 1 oracle oinstall  51M Mar 15 21:46 redo02.log
  8. -rw-r----- 1 oracle oinstall  51M Mar 15 21:47 redo03.log
  9. -rw-r----- 1 oracle oinstall  51M Mar 15 21:46 stdb_redo01.log
  10. -rw-r----- 1 oracle oinstall  51M Mar 15 21:46 stdb_redo02.log
  11. -rw-r----- 1 oracle oinstall  51M Mar 15 21:46 stdb_redo03.log
  12. -rw-r----- 1 oracle oinstall  51M Mar 15 21:46 stdb_redo04.log
  13. -rw-r----- 1 oracle oinstall 501M Mar 15 21:47 sysaux01.dbf
  14. -rw-r----- 1 oracle oinstall 681M Mar 15 21:47 system01.dbf
  15. -rw-r----- 1 oracle oinstall  30M Mar 15 21:39 temp01.dbf
  16. -rw-r----- 1 oracle oinstall  91M Mar 15 21:47 undotbs01.dbf
  17. -rw-r----- 1 oracle oinstall 5.1M Mar 15 21:47 users01.dbf
复制代码

  这里使用tar方法生成数据文件的备份tar包,当然可以使用其他方法来完成,比如直接把数据文件拷贝到其他目录下。
  1. ora11g@secdb /u01/app/oracle/oradata/ora11g$ tar -cvf ora11g_cold_backup_datafiles.tar *.dbf
  2. sysaux01.dbf
  3. system01.dbf
  4. temp01.dbf
  5. undotbs01.dbf
  6. users01.dbf
  7. ora11g@secdb /u01/app/oracle/oradata/ora11g$ ls -l ora11g_cold_backup_datafiles.tar
  8. -rw-r--r-- 1 oracle oinstall 1.3G Mar 15 21:48 ora11g_cold_backup_datafiles.tar
复制代码

2)创建备库的控制文件
  此时数据库处于关闭状态。
(1)创建备库ora11gdg控制文件存放的目录
  1. ora11g@secdb /home/oracle$ mkdir -p /u01/app/oracle/oradata/ora11gdg
复制代码

(2)生成主库spfile,以便在重启主库时使主库参数调整生效。
  1. sys@ora11g@> create spfile from pfile;

  2. File created.
复制代码

(3)启动主数据库到mount状态,创建备库的控制文件。
  1. sys@ora11g@> startup mount;
  2. ORACLE instance started.

  3. Total System Global Area  313860096 bytes
  4. Fixed Size                  1336232 bytes
  5. Variable Size             239078488 bytes
  6. Database Buffers           67108864 bytes
  7. Redo Buffers                6336512 bytes
  8. Database mounted.
  9. sys@ora11g@> alter database create standby controlfile as '/u01/app/oracle/oradata/ora11gdg/control01.ctl';

  10. Database altered.
复制代码

  拷贝生成备库的第二个控制文件。
  1. sys@ora11g@> ! cp /u01/app/oracle/oradata/ora11gdg/control01.ctl /u01/app/oracle/oradata/ora11gdg/control02.ctl

  2. sys@ora11g@> alter database open;

  3. Database altered.
复制代码

  此时主库已经处于Open状态,可对外提供服务。

3)创建备库参数文件
  根据主库的pfile文件进行调整。调整后的内容如下。
(1)拷贝主库参数文件生成备库pfile
  1. ora11g@secdb /home/oracle$ cd $ORACLE_HOME/dbs
  2. ora11g@secdb /oracle/ora11gR2/product/11.2.0/dbhome_1/dbs$ cp initora11g.ora initora11gdg.ora
复制代码

(2)调整备库pfile文件内容
  1. ora11g@secdb /oracle/ora11gR2/product/11.2.0/dbhome_1/dbs$ vi initora11gdg.ora
复制代码

(3)备库配置——当是备库角色时需要的参数
  1. DB_NAME=ora11g
  2. DB_UNIQUE_NAME=ora11gdg
  3. LOG_ARCHIVE_CONFIG='DG_CONFIG=(ora11g,ora11gdg)'
  4. control_files='/u01/app/oracle/oradata/ora11gdg/control01.ctl','/u01/app/oracle/oradata/ora11gdg/control02.ctl'

  5. FAL_CLIENT=ora11gdg
  6. FAL_SERVER=ora11g
  7. DB_FILE_NAME_CONVERT='ora11g','ora11gdg'
  8. LOG_FILE_NAME_CONVERT='ora11g','ora11gdg'
  9. STANDBY_FILE_MANAGEMENT=AUTO
  10. LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
复制代码

(4)备库配置——当是主库角色时需要的参数
  1. LOG_ARCHIVE_DEST_1=
  2. 'LOCATION=/home/oracle/arch/ora11gdg/
  3.   VALID_FOR=(ALL_LOGFILES,ALL_ROLES)
  4.   DB_UNIQUE_NAME=ora11gdg'
  5. LOG_ARCHIVE_DEST_2=
  6. 'SERVICE=ora11g ASYNC
  7.   VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)
  8.   DB_UNIQUE_NAME=ora11g'
  9. LOG_ARCHIVE_DEST_STATE_1=ENABLE
  10. LOG_ARCHIVE_DEST_STATE_2=ENABLE
  11. REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
复制代码

  同时调整与路径相关的错误参数内容。同时创建确实的路径。
  1. $ mkdir -p /u01/app/oracle/admin/ora11gdg/adump
复制代码

4)拷贝备份文件到备库数据文件存放目录
  把备份的tar包移动到ora11gdg存放数据文件目录中,解tar包生成备库的数据文件。
  1. ora11g@secdb /u01/app/oracle/product/11.2.0/db_1/dbs$ cd $ORACLE_BASE/oradata/ora11gdg
  2. ora11g@secdb /u01/app/oracle/oradata/ora11gdg$ mv ../ora11g/ora11g_cold_backup_datafiles.tar .
  3. ora11g@secdb /u01/app/oracle/oradata/ora11gdg$ tar -xvf ora11g_cold_backup_datafiles.tar
  4. sysaux01.dbf
  5. system01.dbf
  6. temp01.dbf
  7. undotbs01.dbf
  8. users01.dbf
  9. ora11g@secdb /u01/app/oracle/oradata/ora11gdg$ ls -l
  10. total 2.6G
  11. -rw-r----- 1 oracle oinstall 9.4M Mar 15 21:49 control01.ctl
  12. -rw-r----- 1 oracle oinstall 9.4M Mar 15 21:49 control02.ctl
  13. -rw-r--r-- 1 oracle oinstall 1.3G Mar 15 21:48 ora11g_cold_backup_datafiles.tar
  14. -rw-r----- 1 oracle oinstall 501M Mar 15 21:47 sysaux01.dbf
  15. -rw-r----- 1 oracle oinstall 681M Mar 15 21:47 system01.dbf
  16. -rw-r----- 1 oracle oinstall  30M Mar 15 21:39 temp01.dbf
  17. -rw-r----- 1 oracle oinstall  91M Mar 15 21:47 undotbs01.dbf
  18. -rw-r----- 1 oracle oinstall 5.1M Mar 15 21:47 users01.dbf
复制代码

5)备库环境设置
(1)生成备库的密码文件
由于是在一台主机上部署Data Guard,因此这里仅需拷贝主库的密码文件生成备库密码文件即可。
  1. ora11g@secdb /u01/app/oracle/oradata/ora11gdg$ cd $ORACLE_HOME/dbs
  2. ora11g@secdb /u01/app/oracle/product/11.2.0/db_1/dbs$ cp orapwora11g orapwora11gdg
复制代码

(2)验证网络服务名是否完整及正确
  1. ora11g@secdb /home/oracle$ cat $ORACLE_HOME/network/admin/tnsnames.ora
  2. ORA11G =
  3.   (DESCRIPTION =
  4.     (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
  5.     (CONNECT_DATA =
  6.       (SERVER = DEDICATED)
  7.       (SERVICE_NAME = ora11g)
  8.     )
  9.   )

  10. ORA11GDG =
  11.   (DESCRIPTION =
  12.     (ADDRESS = (PROTOCOL = TCP)(HOST = secdb)(PORT = 1521))
  13.     (CONNECT_DATA =
  14.       (SERVER = DEDICATED)
  15.       (SERVICE_NAME = ora11gdg)
  16.     )
  17.   )
复制代码

(3)生成备库spfile
  1. ora11g@secdb /home/oracle$ export ORACLE_SID=ora11gdg
  2. ora11gdg@secdb /home/oracle$ sqlplus / as sysdba

  3. SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 15 21:56:31 2012

  4. Copyright (c) 1982, 2009, Oracle.  All rights reserved.

  5. Connected to an idle instance.

  6. sys@ora11gdg@> create spfile from pfile;

  7. File created.
复制代码

6)启动物理备库
(1)启动物理备库
  1. sys@ora11gdg@> startup mount;
  2. ORACLE instance started.

  3. Total System Global Area  313860096 bytes
  4. Fixed Size                  1336232 bytes
  5. Variable Size             209718360 bytes
  6. Database Buffers           96468992 bytes
  7. Redo Buffers                6336512 bytes
  8. Database mounted.
复制代码

(2)创建standby redo log file用于接收主库传过来的日志
由于主库已经提前创建好了4组standby redo log file,备库会根据LOG_FILE_NAME_CONVERT参数转换后自动创建与之对应的standby redo log file日志组。因此此步骤可省略。

(3)备库创建创建在线日志
备库会自动创建与主库对应的Redo日志组。因此此步骤可省略。

(4)启动Redo Apply
  1. sys@ora11gdg@> alter database recover managed standby database using current logfile disconnect from session;

  2. Database altered.
复制代码

7)验证备库处于正常运行中

(1)查看已存在的归档日志文件
  1. sys@ora11gdg@> select sequence#, first_time, next_time from v$archived_log order by sequence#;

  2. SEQUENCE# FIRST_TIME        NEXT_TIME
  3. ---------- ----------------- -----------------
  4.          6 20120315 21:40:46 20120315 21:49:23
  5.          7 20120315 21:49:23 20120315 21:49:26
  6.          8 20120315 21:49:26 20120315 21:59:37
复制代码

(2)主库切换一次日志
  1. ora11gdg@secdb /home/oracle$ export ORACLE_SID=ora11g
  2. ora11g@secdb /home/oracle$ sqlplus / as sysdba

  3. SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 15 22:04:47 2012

  4. Copyright (c) 1982, 2009, Oracle.  All rights reserved.


  5. Connected to:
  6. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
  7. With the Partitioning, OLAP, Data Mining and Real Application Testing options

  8. sys@ora11g> alter system switch logfile;

  9. System altered.
复制代码

(3)验证备库是否收到归档日志
  1. ora11g@secdb /home/oracle$ export ORACLE_SID=ora11gdg
  2. ora11gdg@secdb /home/oracle$ sqlplus / as sysdba

  3. SQL*Plus: Release 11.2.0.1.0 Production on Thu Mar 15 22:05:12 2012

  4. Copyright (c) 1982, 2009, Oracle.  All rights reserved.


  5. Connected to:
  6. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
  7. With the Partitioning, OLAP, Data Mining and Real Application Testing options

  8. sys@ora11gdg@> select sequence#, first_time, next_time from v$archived_log order by sequence#;

  9. SEQUENCE# FIRST_TIME        NEXT_TIME
  10. ---------- ----------------- -----------------
  11.          6 20120315 21:40:46 20120315 21:49:23
  12.          7 20120315 21:49:23 20120315 21:49:26
  13.          8 20120315 21:49:26 20120315 21:59:37
  14.          9 20120315 21:59:37 20120315 22:04:51
复制代码

(4)验证接收到的Redo是否被应用到物理备库
  1. sys@ora11gdg@> select sequence#,applied from v$archived_log order by sequence#;

  2. SEQUENCE# APPLIED
  3. ---------- ---------
  4.          6 YES
  5.          7 YES
  6.          8 YES
  7.          9 YES
复制代码

  Oracle 11g物理Data Guard到此创建完毕。

3.Oracle 11g Data Guard物理备库创建完毕后续任务
1)建议根据具体应用需求调整数据保护模式级别。
  关于Dataguard三种保护模式内容请参见文章《【DataGuard】Oracle Dataguard三种保护模式特点总结》(http://space.itpub.net/519536/viewspace-573342

2)建议开启数据库的闪回功能。

4.体验Active Data Guard实时查询(Real-time query)特性
  以创建表空间、用户以及表为例体验一下Oracle 11g物理Active Data Guard实时查询(Real-time query)特性。

1.调整备库为“READ ONLY WITH APPLY”状态
  调整备库为“READ ONLY WITH APPLY”状态,这体现的便是Oracle 11g物理Active Data Guard功能中的“Active”真实含义。
1)查看备库当前状态
  1. ora11gdg@secdb /home/oracle$ sqlplus / as sysdba

  2. SQL*Plus: Release 11.2.0.1.0 Production on Fri Mar 16 11:54:52 2012

  3. Copyright (c) 1982, 2009, Oracle.  All rights reserved.


  4. Connected to:
  5. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production
  6. With the Partitioning, OLAP, Data Mining and Real Application Testing options

  7. sys@ora11gdg@> select open_mode from v$database;

  8. OPEN_MODE
  9. --------------------
  10. MOUNTED
复制代码

  此时备库处于MOUNT状态。

2)取消备库的自动恢复
  1. sys@ora11gdg@> alter database recover managed standby database cancel;

  2. Database altered.
复制代码

3)OPEN备库调整为“READ ONLY”状态
  1. sys@ora11gdg@> alter database open;

  2. Database altered.

  3. sys@ora11gdg@> select open_mode from v$database;

  4. OPEN_MODE
  5. --------------------
  6. READ ONLY
复制代码

4)在“READ ONLY”状态下进一步启动备库的恢复
  1. sys@ora11gdg@> alter database recover managed standby database using current logfile disconnect;

  2. Database altered.
复制代码

  选项“USING CURRENT LOGFILE”的含义是当备库收到日志后,尽快完成恢复。

  1. sys@ora11gdg@> select open_mode from v$database;

  2. OPEN_MODE
  3. --------------------
  4. READ ONLY WITH APPLY
复制代码

  状态“READ ONLY WITH APPLY”即表示此时备库处于Read Only状态的同时可以接受主库传过来的日志进行恢复,以便达到备库可以即时查看到主库变化的目的。

2.体验实时查询(Real-time query)特性
1)主库上创建表空间、用户以及表并初始化数据
(1)创建表空间并查看表空间创建结果和状态
  1. sys@ora11g> create tablespace secooler_tbs datafile '/u01/app/oracle/oradata/ora11g/secooler_tbs01.dbf' size 10m;

  2. Tablespace created.

  3. sys@ora11g> select * from v$tablespace where name = 'SECOOLER_TBS';

  4.        TS# NAME                           INC BIG FLA ENC
  5. ---------- ------------------------------ --- --- --- ---
  6.          8 SECOOLER_TBS                   YES NO  YES

  7. sys@ora11g> select ts#,status,bytes,name from v$datafile where ts# = 8;

  8.        TS# STATUS       BYTES NAME
  9. ---------- ------- ---------- ------------------------------
  10.          8 ONLINE    10485760 /u01/app/oracle/oradata/ora11g
  11.                               /secooler_tbs01.dbf
复制代码

(2)创建用户并授权
  1. sys@ora11g> create user secooler identified by secooler default tablespace secooler_tbs;

  2. User created.

  3. sys@ora11g> grant dba to secooler;

  4. Grant succeeded.
复制代码

(3)创建表并初始化数据
  1. sys@ora11g> conn secooler/secooler
  2. Connected.
  3. secooler@ora11g> create table t (x varchar2(8));

  4. Table created.

  5. secooler@ora11g> insert into t values ('Secooler');

  6. 1 row created.

  7. secooler@ora11g> commit;

  8. Commit complete.

  9. secooler@ora11g> select * from t;

  10. X
  11. --------
  12. Secooler
复制代码

2)此时观察ora11g实例的alert日志记录了如下信息
  1. Fri Mar 16 11:56:36 2012
  2. create tablespace secooler_tbs datafile '/u01/app/oracle/oradata/ora11g/secooler_tbs01.dbf' size 10m
  3. Fri Mar 16 11:56:48 2012
  4. Completed: create tablespace secooler_tbs datafile '/u01/app/oracle/oradata/ora11g/secooler_tbs01.dbf' size 10m
复制代码

3)几乎与此同时(1秒)备库ora11gdg实例的警告日志中记录了如下信息
  1. Fri Mar 16 11:56:37 2012
  2. Recovery created file /u01/app/oracle/oradata/ora11gdg/secooler_tbs01.dbf
  3. Successfully added datafile 5 to media recovery
  4. Datafile #5: '/u01/app/oracle/oradata/ora11gdg/secooler_tbs01.dbf'
复制代码

  可见,备库已经接受到主库的这个变化,并把这个变化在备库应用完毕。

4)验证主库所创建表空间、用户以及表并初始化数据是否在备库应用成功
(1)查看备库表空间
  1. sys@ora11gdg> select * from v$tablespace where name = 'SECOOLER_TBS';

  2.        TS# NAME                           INC BIG FLA ENC
  3. ---------- ------------------------------ --- --- --- ---
  4.          8 SECOOLER_TBS                   YES NO  YES

  5. sys@ora11gdg> select ts#,status,bytes,name from v$datafile where ts# = 8;

  6.        TS# STATUS       BYTES NAME
  7. ---------- ------- ---------- ------------------------------
  8.          8 RECOVER   10485760 /u01/app/oracle/oradata/ora11g
  9.                               dg/secooler_tbs01.dbf
复制代码

  创建成功,但是此时备库数据文件的状态是“RECOVER”。

(2)查看备库用户及数据是否存在
  1. sys@ora11gdg> conn secooler/secooler
  2. Connected.
  3. secooler@ora11g> set lines 80
  4. secooler@ora11g> desc t;
  5. Name               Null?    Type
  6. ------------------ -------- ----------------------------
  7. X                           VARCHAR2(8)

  8. secoolerdg@ora11g> select * from t;

  9. X
  10. --------
  11. Secooler
复制代码

  主库上的变化已经即使的在备库上得到应用。
  这便是Oracle 11g物理Active Data Guard实时查询(Real-time query)特性的体现。

5.小结

  文章详细记录了在Oracle 11gR2环境上部署物理Data Guard的过程和注意事项,供大家参考。
  在部署或者管理Oracle 11g Data Guard环境时需要时刻清醒的认识到你操作的对象是主库还是备库,防止由于混乱导致潜在故障发生。

阅读(1138) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~