导读
本文档演示如何建立一个物理备用数据库,以下描述了备用数据库最大性能模式的具体配置步骤,这是默认的数据保护模式。此文档主要演示:
- 使用DUPLICATE FROM ACTIVE DATABASE RMAN 命令
- 启用最大性能从库模式
- 验证从物理备份获得的数据
- 通过SQL * Plus监控主库和从库
注:这里的OBE代表一种数据库保护配置,orcl是主数据库的SID,standby1是备用数据库的SID。为简单起见,在这个OBE里面主数据库和备用数据库在一台服务器上运行。
概述
Oracle数据库11g RMAN介绍了从主数据库复制物理备份的命令。这减轻了主库和备用系统以前需要临时存储的压力,以及单流网络流量的限制。
现在,当您在主数据库备份时,可以同时在基于并行流的网络上创建和恢复备用数据库。除了一些简单的Oracle网络设置,并建立一个目录和临时密码文件,整个备用数据库的产生可以在RMAN脚本完成。
RMAN会自动复制服务器参数文件到备用主机,备用主机通过网络启动辅助实例的服务器参数文件,恢复备份的控制文件,并复制所有必要的数据库文件和归档重做日志。
准备
开始演示前,你应该:
1. 安装Oracle Database 11g。
2. 创建一个目录名为wkdir。下载并解压“physstdby.zip”文件到wkdir目录。
为备用数据库的创建准备主数据库
在这个步骤中,要验证主数据库的配置是否正确,以支持物理备份数据库。
你只需要一次完成这些准备任务。在完成这些步骤之后,数据库将为一个或多个备用数据库的主数据库服务。你需要执行以下步骤:
1. 确定是否启用了强制日志记录
如果没有启用,则启用强制日志记录模式。这个命令可能需要一些时间来完成,因为它等待所有未直接写I/O完成。使用SQL*Plus执行以下命令:
SELECT force_logging FROM v$database;
ALTER DATABASE FORCE LOGGING;
2. 配置循环传输验证
Data Guard使用网络会话来传输数据保护配置的成员之间的同步数据和控制消息,这些同步的会话进行身份验证使用安全套接字层(SSL)协议或远程登录密码文件。
这个OBE,我们将使用随后的步骤中创建的一个远程登录密码文件。
3. 备份日志文件到主数据库
通过添加备份日志文件到主数据库,配置主数据库以接受同步数据。验证目录路径后,你可以使用以下cr_sby_redologs.sql文件,映射到您的环境。
强烈建议您有一个备用重做日志组,而不是您的联机重做日志组作为主数据库。该文件必须是相同的大小或大于主数据库的联机重做日志。
cr_sby_redologs.sql文件内容:
set echo on ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/oracle/oradata/orcl/srl01.log' SIZE 52428800 / ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/oracle/oradata/orcl/srl02.log' SIZE 52428800 / ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/oracle/oradata/orcl/srl03.log' SIZE 52428800 / ALTER DATABASE ADD STANDBY LOGFILE '/u01/app/oracle/oradata/orcl/srl04.log' SIZE 52428800 /
4. 设置主数据库初始化参数
在主数据库中,您定义了控制重做传输服务的初始化参数,而数据库处于主角色中的初始参数。这些措施包括:
DB_NAME |
指定数据库名称。必须是orcl |
DB_UNIQUE_NAME |
为每个数据库指定一个唯一的名称。即使DG角色改变,也必须为orcl |
CONTROL_FILES |
指定在主数据库上的控制文件的本地路径名。 |
LOG_ARCHIVE_CONFIG |
主数据库和备用数据库的db_unique_name采用DG_CONFIG列表的属性 |
LOG_ARCHIVE_DEST_1 |
本地重做日志文件默认存档路径 |
LOG_ARCHIVE_DEST_2 |
仅适用于主库角色,传输重做数据到远程的物理备份standby1。 |
REMOTE_LOGIN_PASSWORDFILE |
必须是唯一的或共享的,如果一个远程登录密码文件 |
LOG_ARCHIVE_DEST-STATE_n |
必须启用(默认) |
验证你的db_name和db_unique_name设置。
使用set_log_params.sql脚本设置log_archive_config和log_archive_dest_2参数。
set_log_params.sql内容如下:
set echo on ALTER SYSTEM SET log_archive_config = 'dg_config=(orcl,standby1)'; ALTER SYSTEM SET log_archive_dest_2 = 'service=standby1 async valid_for=(online_logfile,primary_role) db_unique_name=standby1'; show parameter log_archive_config show parameter log_archive_dest_2
5. 启用自动归档
执行以下语句来确定你的数据库的存档状态,然后把主数据库在ARCHIVELOG模式下启用自动归档。
建立物理备用数据库(从库)
在这部分文档中,你需要配置网络环境并且建立一个物理备份数据库(从库)。
注:这里,你是在单服务器环境中配置的。如果你要在不同的两台服务器中配置环境,你需要相应地在这两个服务器上配置oracle网络服务。
A. 为从库建立一个oracle网络服务名称
Data Guard配置将使用oracle的网络服务名称来引用不同的数据库,那么为您的物理备份数据库添加服务名称吧。你可以通过添加tns_entry.txt提供的配置追加到已存在的$ORACLE_HOME/network/admin/tnsnames.ora文件,如下所示。
注:如果你熟悉Oracle网络服务使用netmgr实用工具来配置新的服务入口。
注:很可能您已经为您的主数据库定义了一个服务名称,如上图所示。如果没有,一定要为该数据库添加一个服务名称。
tns_entry.txt文件内容:
STANDBY1 = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = host01.example.com)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = standby1.example.com) ) )
B. 配置listener.ora文件为您的备用数据库准备
在下面的部分中,您将使用RMAN创建备用数据库。为此你将需要添加一个数据库服务进入你的listener.ora文件。这可以通过添加sid_entry.txt提供的配置到现有$ORACLE_HOME/network/admin/listener.ora文件,如下所示。
sid_entry.txt文件内容:
SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (GLOBAL_DBNAME = standby1.example.com) (ORACLE_HOME = /u01/app/oracle/product/11.2.0/dbhome_1) (SID_NAME = standby1) ) )
C. 建立从库
1. 使用lsnrctl stop 和lsnrctl start命令停止和重启oracle网络监听。
2. 复制远程登录密码文件
切换路径到$ORACLE_HOME/dbs并且从主数据库系统的$ORACLE_HOME/dbs目录复制远程登录密码文件(orapworcl)到备用数据库系统,重命名为orapwstandby1。
注意:密码文件必须重新复制每次SYSDBA或SYSOPER权限授予或撤销,只要具有这些权限的用户登录密码的改变。如果您使用的是不同的服务器,你可能需要FTP,或其他一些远程文件传输机制。
3. 创建初始化参数文件
在从库的$ORACLE_HOME/dbs的目录下,创建名为initstandby1.ora的初始化参数文件,包含一条属性:
DB_NAME=<physical standby SID> (i.e. standby1)
4. 创建物理备份目录
在从库中,切换目录到/u01/app/oracle/admin,创建一个名称相匹配你的物理备份SID目录(即standby1),切换到新建的目录(即standby1)并创建adump目录。
5. 创建数据文件目录
在从库,在$ORACLE_BASE/oradata路径下创建一个名称与从库SID(即. standby1)相匹配的数据文件目录。
6. 设置从库ORACLE_SID注意:你或许需要也在你的快速恢复区创建一个类似的目录,这取决于您如何配置您的现有的主数据库( i.e. $ORACLE_BASE/flash_recovery_area)。
在从库,使用NOMOUNT模式启动实例与文本初始化参数之前,设置从库SID (即:standby1) 环境变量ORACLE_SID的值。
7. RMAN脚本
对于主库,确保ORACLE_SID环境变量设置为您的主数据库的SID(如:orcl)。验证您的当前目录包含cr_phys_sby1.txt RMAN脚本。
cr_phys_sby1.txt 脚本内容:
run { allocate channel prmy1 type disk; allocate channel prmy2 type disk; allocate channel prmy3 type disk; allocate channel prmy4 type disk; allocate auxiliary channel stby type disk; duplicate target database for standby from active database spfile parameter_value_convert 'orcl','standby1' set db_unique_name='standby1' set db_file_name_convert='/orcl/','/standby1/' set log_file_name_convert='/orcl/','/standby1/' set control_files='/u01/app/oracle/oradata/standby1/standby1.ctl' set log_archive_max_processes='5' set fal_client='standby1' set fal_server='orcl' set standby_file_management='AUTO' set log_archive_config='dg_config=(orcl,standby1)' set log_archive_dest_2='service=orcl ASYNC valid_for=(ONLINE_LOGFILE,PRIMARY_ROLE) db_unique_name=orcl'; }
8. 连接目标数据库
在主库,调用RMAN并且以SYSDBA角色连接目标数据库,SYSDBA连接到辅助数据库,输入SYS的密码。
9. 产生一个新的从库
在主库中,使用RMAN执行 cr_phys_sby1.txt脚本中的命令。当这个脚本完成后,您将有一个新的备用数据库,该数据库是在没有任何临时存储的网络上创建的。
...
...
...
10. 日志切换
在主数据库上执行日志切换,备份将开始发送到从库。
11. 启动恢复过程
在从库,确保oracle_sid环境变量设置为你的物理备库的SID(即standby1)并启动恢复过程。
验证物理备份数据库是否正确执行
一旦您创建了物理备份数据库,并设置了重做传输服务,您可能要验证数据库修改正在从主数据库成功地同步到备用数据库。要查看在备用数据库上的重做数据,您应该首先识别在备用数据库上的现有的归档同步日志文件,强制日志开关并在主数据库上归档几个联机同步日志文件,然后再检查备用数据库。下面的步骤演示如何执行这些任务。
1. 查询归档文件
在备用数据库,通过查询V$ARCHIVED_LOG视图找出存在的归档同步日志文件,你可以使用query_archived_log.sql文件。
注意:根据您的机器性能,您可能会看到,在您查询视图时已应用了两个归档重做日志。
set echo on
SELECT sequence#, first_time, next_time, applied
FROM v$archived_log
ORDER BY sequence#
/
2. 归档同步日志文件
主库中,通过 ALTER SYSTEM SWITCH LOGFILE命令归档同步众多日志文件。
3. 重新查询归档文件
从库中,重新查询$ARCHIVED_LOG视图来验证archived_log同步数据接收和应用情况。
注:在完成这一步时,物理备份数据库正在运行,并提供数据保护的最大性能级别。
清除
cleanup.sh脚本提供了停止和删除创建的物理备用数据库。请注意,其他Data Guard的建立使用了这个教程,建议你在物理备用数据库完成这个清理过程。
执行cleanup.sh脚本并停止、移除备用数据库
cleanup.sh脚本内容:
export ORACLE_SID=standby1 sqlplus / as sysdba << EOI shutdown immediate exit EOI export ORACLE_SID=orcl sqlplus / as sysdba << EOI alter system set dg_broker_start=false; alter system reset log_archive_config; alter system reset log_archive_dest_2; shutdown immediate startup mount alter database noarchivelog; shutdown immediate startup alter database drop standby logfile group 4; alter database drop standby logfile group 5; alter database drop standby logfile group 6; alter database drop standby logfile group 7; exit EOI rm -rf /u01/app/oracle/admin/standby1 rm -rf /u01/app/oracle/oradata/standby1 rm -f /u01/app/oracle/oradata/orcl/srl0*.log rm -rf /u01/app/oracle/flash_recovery_area/STANDBY1 rm -rf $ORACLE_HOME/dbs/*standby1* rm -rf $ORACLE_HOME/dbs/dr*.dat rm -rf $ORACLE_HOME/dbs/hc*.dat rm -rf $ORACLE_HOME/dbs/lkSTANDBY1
结束语
1.本文档翻译自Oracle官网中关于建立oracle读写分离的文档,由于水平有限,可能会出现语义不够清楚的情况,详情参见网址:http://www.oracle.com/webfolder/technetwork/tutorials/obe/db/11g/r2/prod/ha/dataguard/physstby/physstdby.htm。
2. 此文档是经过配置完成后确认是可行的方案。要注意的是文中的路径,如:/u01/app/... 之类的为oracle默认的安装路径,在实际中我们替换成自己的安装路径就好,如:/home/oracle/app/...。
3. 完成配置后,如果发现主从数据库数据无法同步,请将数据库DataGuard的数据保护模式从最大保护切换到最高可用性。详细步骤参考:http://blog.csdn.net/lqx0405/article/details/44777143。