本文档演示如何创建一个物理备用数据库,如下描述了备用数据库最大性能模式的具体配置步骤,这是默认的数据保护模式。此文档主要演示:web
注:这里的OBE表明一种数据库保护配置,orcl是主数据库的SID,standby1是备用数据库的SID。为简单起见,在这个OBE里面主数据库和备用数据库在一台服务器上运行。sql
Oracle数据库11g RMAN介绍了从主数据库复制物理备份的命令。这减轻了主库和备用系统之前须要临时存储的压力,以及单流网络流量的限制。数据库
如今,当您在主数据库备份时,能够同时在基于并行流的网络上建立和恢复备用数据库。除了一些简单的Oracle网络设置,并创建一个目录和临时密码文件,整个备用数据库的产生能够在RMAN脚本完成。安全
RMAN会自动复制服务器参数文件到备用主机,备用主机经过网络启动辅助实例的服务器参数文件,恢复备份的控制文件,并复制全部必要的数据库文件和归档重作日志。服务器
开始演示前,你应该:网络
1. 安装Oracle Database 11g。oracle
2. 建立一个目录名为wkdir。下载并解压“physstdby.zip”文件到wkdir目录。app
在这个步骤中,要验证主数据库的配置是否正确,以支持物理备份数据库。async
你只须要一次完成这些准备任务。在完成这些步骤以后,数据库将为一个或多个备用数据库的主数据库服务。你须要执行如下步骤:工具
若是没有启用,则启用强制日志记录模式。这个命令可能须要一些时间来完成,由于它等待全部未直接写I/O完成。使用SQL*Plus执行如下命令:
SELECT force_logging FROM v$database;
ALTER DATABASE FORCE LOGGING;
Data Guard使用网络会话来传输数据保护配置的成员之间的同步数据和控制消息,这些同步的会话进行身份验证使用安全套接字层(SSL)协议或远程登陆密码文件。
这个OBE,咱们将使用随后的步骤中建立的一个远程登陆密码文件。
经过添加备份日志文件到主数据库,配置主数据库以接受同步数据。验证目录路径后,你可使用如下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 /
在主数据库中,您定义了控制重作传输服务的初始化参数,而数据库处于主角色中的初始参数。这些措施包括:
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
执行如下语句来肯定你的数据库的存档状态,而后把主数据库在ARCHIVELOG模式下启用自动归档。
在这部分文档中,你须要配置网络环境而且创建一个物理备份数据库(从库)。
注:这里,你是在单服务器环境中配置的。若是你要在不一样的两台服务器中配置环境,你须要相应地在这两个服务器上配置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) ) )
在下面的部分中,您将使用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) ) )
2. 复制远程登陆密码文件
切换路径到$ORACLE_HOME/dbs而且从主数据库系统的$ORACLE_HOME/dbs目录复制远程登陆密码文件(orapworcl)到备用数据库系统,重命名为orapwstandby1。
注意:密码文件必须从新复制每次SYSDBA或SYSOPER权限授予或撤销,只要具备这些权限的用户登陆密码的改变。若是您使用的是不一样的服务器,你可能须要FTP,或其余一些远程文件传输机制。
在从库的$ORACLE_HOME/dbs的目录下,建立名为initstandby1.ora的初始化参数文件,包含一条属性:
DB_NAME=<physical standby SID> (i.e. standby1)
4. 建立物理备份目录
在从库中,切换目录到/u01/app/oracle/admin,建立一个名称相匹配你的物理备份SID目录(即standby1),切换到新建的目录(即standby1)并建立adump目录。
在从库,在$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'; }
在主库,调用RMAN而且以SYSDBA角色链接目标数据库,SYSDBA链接到辅助数据库,输入SYS的密码。
在主库中,使用RMAN执行 cr_phys_sby1.txt脚本中的命令。当这个脚本完成后,您将有一个新的备用数据库,该数据库是在没有任何临时存储的网络上建立的。
...
...
...
10. 日志切换
在主数据库上执行日志切换,备份将开始发送到从库。
11. 启动恢复过程
在从库,确保oracle_sid环境变量设置为你的物理备库的SID(即standby1)并启动恢复过程。
一旦您建立了物理备份数据库,并设置了重作传输服务,您可能要验证数据库修改正在从主数据库成功地同步到备用数据库。要查看在备用数据库上的重作数据,您应该首先识别在备用数据库上的现有的归档同步日志文件,强制日志开关并在主数据库上归档几个联机同步日志文件,而后再检查备用数据库。下面的步骤演示如何执行这些任务。
在备用数据库,经过查询V$ARCHIVED_LOG视图找出存在的归档同步日志文件,你可使用query_archived_log.sql文件。
注意:根据您的机器性能,您可能会看到,在您查询视图时已应用了两个归档重作日志。
set echo on
SELECT sequence#, first_time, next_time, applied
FROM v$archived_log
ORDER BY sequence#
/
主库中,经过 ALTER SYSTEM SWITCH LOGFILE命令归档同步众多日志文件。
从库中,从新查询$ARCHIVED_LOG视图来验证archived_log同步数据接收和应用状况。
注:在完成这一步时,物理备份数据库正在运行,并提供数据保护的最大性能级别。
cleanup.sh脚本提供了中止和删除建立的物理备用数据库。请注意,其余Data Guard的创建使用了这个教程,建议你在物理备用数据库完成这个清理过程。
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。