了解 Active Data Guard 如何通过实时查询,同时应用归档的的日志、将物理备用数据库转换为快照备用数据库以及对基础架构的一系列改进措施,让您对备份环境的投资物有所值。
下载 Oracle 数据库 11g
Oracle 数据库 11g 对 Data Guard 功能进行了多方面的增强,难以详尽说明。因此,在这里我将介绍一些我最感兴趣的功能增强。
备用数据库创建更加简单
首先,我们从创建物理备用数据库开始。在 Oracle 数据库 11g 中,物理备用数据库的创建已经变得极为简单,一条 RMAN 命令就可完成整个过程。以前您可能需要使用 Grid Control 向导界面在两台计算机之间完成 Data Guard 设置。在撰写本文时,Oracle 企业管理器网格控制 11g 还未推出,且 Database Control 没有 Data Guard 向导。但不管您是否使用过 SQL 命令,在 Oracle 数据库 11g 中设置 Data Guard 都是非常轻松的。过程如此简单,因此我将在此处介绍所有步骤。
假设您的主数据库名称为 prolin11,运行于 prolin1 服务器上。您想在 prolin2 服务器上设置一个备用数据库。备用数据库实例的名称应当为 pro11sb。以下为设置步骤:
在 prolin1 上,首先创建 spfile(如果您没有)。
SQL> create spfile from pfile;
这一步不是绝对必要的,但它可以简化这一过程。创建数据库后,重新启动 prolin11 数据库以使用 spfile。
尽管没有必要创建备用重做日志,这还是一个很好的做法。备用重做日志可使主数据库中发生的更改几乎实时地反应在备用数据库中,这一概念称为实时应用 (RTA)。因此,此处我们将在主数据库中创建一个备用重做日志(注意在主数据库中创建备用重做日志。RMAN 将在备用数据库中创建它们):
SQL> alter database add standby redo logfile group 4
2> (‘+DG1/sby_redo01.rdo') size 50M;
SQL> alter database add standby redo logfile group 5
2> (‘+DG1/sby_redo02.rdo') size 50M;
SQL> alter database add standby redo logfile group 6
2> (‘+DG1/sby_redo03.rdo') size 50M;
SQL> alter database add standby redo logfile group 7
2> (‘+DG1/sby_redo04.rdo') size 50M;
这将创建 4 个备用重做日志组。
在 prolin2 服务器上的 listener.ora 文件中创建一个 pro11sb 条目:
SID_LIST_LISTENER =
(SID_LIST =
(SID_DESC =
(GLOBAL_DBNAME = pro11sb)
(ORACLE_HOME = /opt/oracle/product/11g/db1)
(SID_NAME = pro11sb)
)
)
LISTENER =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = prolin2)(PORT = 1521))
)
重新载入监听器使之生效。
在 prolin1 上,在 $ORACLE_HOME/network/admin 下的 tnsnames.ora 文件中创建一个 pro11sb 数据库条目:
PRO11SB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = prolin2)(PORT = 1521))
)
(CONNECT_DATA =
(SID = pro11sb)
)
)
在 prolin2 上的 Oracle Home/dbs 目录中,创建一个仅含一行的 initodba11sb.ora 文件:
db_name=prolin11
这将作为备用实例的初始化文件,使用稍后介绍的 RMAN 命令将自动填充其他参数。
在 prolin2 上,进入目录 $ORACLE_BASE/admin。在其中创建 pro11sb 目录,然后在 pro11sb 目录中创建 adump 目录,用于保存备用实例的审计文件。
在 prolin1 上,在 $ORACLE_HOME/dbs 目录下,您将找到实例的口令文件,通常命名为 orapworadba11。如果没有该文件(可能性很小),则创建一个。然后将文件复制到 prolin2 的 $ORACLE_HOME/dbs 下。将其复制到新文件 orapwodba11sb。这将确保主数据库的 sysdba 连接口令也可应用到备用数据库。
在 prolin2 上,以 NOMOUNT 状态启动实例 pro11sb。
$ sqlplus / as sysdba
SQL> startup nomount
这将启动实例但不挂载任何东西。
完成开始的准备工作后,调用强大的 RMAN 脚本创建备用数据库。在 prolin1 上启动 RMAN 并运行以下脚本。您会发现将其保存到一个文件中,然后从 RMAN 提示符中运行这一脚本将更为简便。
connect target sys/oracle123@prolin11
connect auxiliary sys/oracle123@pro11sb
run {
allocate channel c1 type disk;
allocate auxiliary channel s1 type disk;
duplicate target database
for standby
from active database
dorecover
spfile
parameter_value_convert 'prolin11','pro11sb'
set db_unique_name='pro11sb'
set db_file_name_convert='/prolin11/','/pro11sb/'
set log_file_name_convert='/prolin11/','/pro11sb/'
set control_files='/oradata/pro11sb/control01.ctl'
set fal_client='pro11sb'
set fal_server='prolin11'
set standby_file_management='AUTO'
set log_archive_config='dg_config=(prolin11,pro11sb)'
set log_archive_dest_2='service=prolin11 LGWR ASYNC valid_for=(ONLINE_LOGFILES,PRIMARY_ROLE) db_unique_name=pro11sb'
set log_archive_dest_state_2='enable'
set log_archive_format='pro11sb_%t_%s_%r.arc'
;
sql channel c1 "alter system archive log current";
sql channel s1 "alter database recover managed standby database using current logfile disconnect";
}
这一脚本将创建备用数据库,将相关的参数置于备用实例的 spfile 中,创建备用数据库的诊断目标,然后重新启动备用数据库。为助您了解这一操作的具体机理,您可以在此处查看 RMAN 命令的输出。