WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606
全部博文(599)
分类: Oracle
2010-01-25 21:38:57
在本章中描述的步骤以最高性能模式配置备数据库,这是默认的数据保护模式。并假设你在服务器参数文件(SPFILE)中指定了初始化参数,替代了文本初始化参数文件(PFILE)。
一、为备数据库创建准备主数据库
在你创建备数据库之前,你必须首先确保正确地配置好主数据库。
1、允许强制记日志
在数据库创建之后使用下面的 SQL 语句将主数据库置于FORCE LOGGING 模式:
SQL> ALTER DATABASE FORCE LOGGING;
这条语句可能需要相当长的时间才能完成,因为它会等待所有未记日志的直接写I/O 完成。
2、 创建口令文件
如果没有已经存在的口令文件则创建一个。在 Data Guard 配置中的每个数据库必须使用口令文件,并且对于SYS 用户的口令文件在每个系统上必须相同,以确保重做数据传输成功。
3、 配置备重做日志
最大保护和最大可用性模式是需要备重做日志的,并且对于所有数据库推荐 LGWR ASYNC 传送模式。Data Guard 从备重做日志比单独从归档重做日志文件能恢复和应用更多重做数据。
你应该在创建备数据库的时候,计划备重做日志配置并创建所有所需的日志组和组成员。为了提高可用性,考虑多重备重做日志文件,类似于多重联机重做日志文件的方式。
执行下述步骤来配置备重做日志。
第 1 步确保主和备数据库上的日志文件尺寸是相同的。
当前备重做日志文件的尺寸必须与当前主数据库联机重做日志文件的尺寸完全符合。
例如,如果主数据库使用两个联机重做日志组,其日志文件是200K,则备重做日志组也应
该是200K 大小的日志文件。
第 2 步确定备重做日志文件组的适当数目。
最少地,配置应该比主数据库上的联机重做日志文件组的数目多一个备重做日志文件组。然而,推荐的备重做日志文件组数目依赖于主数据库上的线程数。使用下面的等式来确定备重做日志文件组的适当数目。
(每个线程的日志文件的最大数目+1)×线程最大数目
使用这个等式减少了主实例的日志写(LGWR)进程因为在备数据库上无法分配备重做日志文件而被锁住的可能性。例如,如果主数据库每个线程有2 个日志文件,并有2 个线程,则在备数据库上需要有6 个备重做日志文件组。
注:
逻辑备数据库根据工作负载可能需要更多的备重做日志文件(或额外的ARCn 进程)。这是因为逻辑备数据库也写联机重做日志文件,这优先于备重做日志文件。因此,备重做日志文件可能没有联机重做日志文件归档速度快。
第 3 步检验相关数据库参数和设置。
检验在 SQL CREATE DATABASE 语句上的MAXLOGFILES 和MAXLOGMEMBERS子句使用的值,不会限制你能添加的重做日志文件组和成员。唯一覆盖由MAXLOGFILES和MAXLOGMEMBERS 子句指定的限制的方法就是重建主数据库或控制文件。
第 4 步创建备重做日志文件组。
要创建新的备重做日志文件组,你必须拥有 ALTER DATABASE 系统权限。备数据库开始使用新创建的备重做数据,下一时刻在主数据库上发生日志切换。例子1 和例子2 显示了如何使用ALTER DATABASE 语句和不同的ADD STANDBY LOGFILE GROUP子句创建一个新的备重做日志文件组。
例子 1 添加一个备重做日志文件组到一个指定的线程
下面的语句添加一个新的备重做日志文件组到一个备数据库,并指派到 THREAD 5:
SQL> ALTER DATABASE ADD STANDBY LOGFILE THREAD 5
2> ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
THREAD 子句只有在你想添加一个或更多备重做日志文件组到指定的主数据库线程。如果你没有包括THREAD 子句并且配置使用Real Application Clusters(RAC),Data Guard会在运行时当不同RAC 实例需要时自动指派备重做日志文件组到线程。
例子 2 添加一个备重做日志文件组到一个指定的组号
你也能使用 GROUP 子句指定标识组的号码:
SQL> ALTER DATABASE ADD STANDBY LOGFILE GROUP 10
2> ('/oracle/dbs/log1c.rdo','/oracle/dbs/log2c.rdo') SIZE 500M;
使用组号能使得管理备重做日志文件组更容易。然而,组号必须在1 到MAXLOGFILES子句的值之间。不要跳过日志文件组号(就是说,不要编号组为10、20、30、等等),否则你会使用备数据库控制文件中的额外空间。
注:
虽然备重做日志只有在数据库运行在备角色时才使用,Oracle 建议你在主数据库上创建一个备重做日志,使得主数据库能快速切换到备角色而不需要额外的DBA 干涉。考虑使用Oracle 企业管理器来在你的主和备数据库上自动配置备重做日志。
4、设置主数据库初始化参数
在主数据库上,你定义当数据库处于主角色时控制重做传输服务的初始化参数。当主数据库转换到备角色时,你需要添加额外的参数来控制接收重做数据和日志应用服务。
例3显示了你在住数据库上维护的主角色初始化参数,这个例子表现了主数据库位于Chicago,一个物理备数据库位于Boston 的Data Guard 配置。在例3显示的参数对于Chicago 数据库当它运行在主或备数据库角色时都是有效的。配置举例使用下面所示的名字:
数据库 DB_UNIQUE_NAME Oracle 网络服务名
主 chicago chicago
物理备 boston boston
例子 3主数据库:主角色初始化参数
DB_NAME=
DB_UNIQUE_NAME=
LOG_ARCHIVE_CONFIG='DG_CONFIG=(
CONTROL_FILES='/arch1/chicago/control1.ctl','/arch2/chicago/control2.ctl'
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/chicago/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=
LOG_ARCHIVE_DEST_2= 'SERVICE=
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
LOG_ARCHIVE_FORMAT=%t_%s_%r.arc
LOG_ARCHIVE_MAX_PROCESSES=30
这些参数控制重做传输服务如何传送重做数据到备系统和本地文件系统上的重做数据的归档。注意到举例指定了LGWR 进程和异步(ASYNC)网络传输来传LOG_ARCHIVE_DEST_2 初始化参数上的重做数据。这些是推荐的设置并且需要备重做日志文件。
例子 4 显示了在主数据库上额外的备角色初始化参数。这些参数在主数据库转换到备角色时起效果。
例子4 主数据库:备角色初始化参数
FAL_SERVER=
FAL_CLIENT=
DB_FILE_NAME_CONVERT='
LOG_FILE_NAME_CONVERT='/arch1/boston/','/arch1/chicago/','/arch2/boston/','/arch2/chicago/'
STANDBY_FILE_MANAGEMENT=AUTO
例子4 中所示指定初始化参数设置主数据库来解决中断,从新的主数据库转换新的数据文件和日志文件路径名,并在这个数据库处于备角色时归档收到的重做数据。使用上述主和备角色集的初始化参数,在角色转换后不需要更改任何参数。
5、 允许归档
如果没有允许归档,执行下面的语句将主数据库置于 ARCHIVELOG 模式并允许自动归档:
SQL> SHUTDOWN IMMEDIATE;
SQL> STARTUP MOUNT;
SQL> ALTER DATABASE ARCHIVELOG;
SQL> ALTER DATABASE OPEN;
二、创建物理备数据库的逐步指导
本节描述了你执行创建物理备数据库的任务。
1、创建主数据库数据文件的备份拷贝
你能使用主数据库的任何备份拷贝来创建物理备数据库,只要你有必要的归档重做日志文件来完全恢复数据库。Oracle 推荐你使用恢复管理工具(RMAN)。
2、为备数据库创建控制文件
如果备份过程需要你关闭主数据库,执行下面的 SQL*Plus 语句来启动主数据库:
SQL> STARTUP MOUNT;
然后,为备数据库创建控制文件,并打开主数据库允许用户访问,如下面举例所示:
SQL> ALTER DATABASE CREATE STANDBY CONTROLFILE AS '/tmp/boston.ctl';
SQL> ALTER DATABASE OPEN;
3、为备数据库准备初始化参数文件
执行下面的步骤来创建备初始化参数文件。
第 1 步拷贝主数据库参数文件到备数据库。
从主数据库使用的服务器参数文件(SPFILE)创建一个文本初始化参数文件;文本初始化参数文件能拷贝到备位置并修改。例如:
SQL> CREATE PFILE='/tmp/initboston.ora' FROM SPFILE;
第 2 步在物理备数据库上设置初始化参数。
虽然在你从主系统拷贝来的文本初始化参数文件中的大多数初始化参数设置也适用于物理备数据库,但是需要进行一些修改。
例子 5 显示了备初始化参数文件中部分,对于物理备数据库进行的修改。
例子 5 为物理备数据库修改初始化参数
.
.
DB_NAME=
DB_UNIQUE_NAME=
LOG_ARCHIVE_CONFIG='DG_CONFIG=(
CONTROL_FILES='/arch1/boston/control1.ctl','/arch2/boston/control2.ctl'
DB_FILE_NAME_CONVERT='
LOG_FILE_NAME_CONVERT='/arch1/chicago/','/arch1/boston/','/arch2/
LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc
LOG_ARCHIVE_DEST_1='LOCATION=/arch1/boston/ VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=
LOG_ARCHIVE_DEST_2='SERVICE=
LOG_ARCHIVE_DEST_STATE_1=ENABLE
LOG_ARCHIVE_DEST_STATE_2=ENABLE
REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE
STANDBY_FILE_MANAGEMENT=AUTO
FAL_SERVER=
FAL_CLIENT=
注意该例子假设使用LGWR进程来传送重做数据到本地和在LOG_ARCHIVE_DEST_2初始化参数上的远程目的地。另外,确保在主和备数据库上设置COMPATIBLE 初始化参数为相同值。如果该值不同,重做传输服务可能无法从主数据库传送重做数据到备数据库。在Data Guard 配置中,COMPATIBLE 必须设为最小值
使用SHOW PARAMETERS命令来检查没有其它的参数需要更改总是一个很好的习惯。
4、从主系统拷贝文件到备系统
使用操作系统拷贝工具将下面的二进制文件从主系统拷贝到备系统:
创的备份数据文件
创建的备控制文件
创建的初始化参数
5、 设置环境以支持备数据库
执行下面的步骤以创建一个基于 Windows 的服务,创建一个口令文件,设置Oracle 网络环境,以及创建一个SPFILE。
第 1 步创建一个基于Windows 的服务。
如果备系统是运行在基于 Windows 的系统上,使用ORADIM 工具来创建Windows 服务和口令文件。例如:
WINNT> oradim -NEW -SID
第 2 步创建一个口令文件。
在Windows 以外的平台上,创建一个口令文件,然后为SYS 用户设置与在主数据库上的SYS 用户相同的口令。为了成功传输重做,在Data Guard 配置中的每个数据库上的SYS用户的口令都必须相同。
第 3 步为主和备数据库配置监听。
在主和备站点上,使用 Oracle 网络管理器为相关数据库配置监听。
要启动监听(获得新的定义),在主和备系统上输入下面的LSNRCTL 工具命令:
% lsnrctl stop
% lsnrctl start
第 4 步创建 Oracle 网络服务名。
在主和备系统上,使用 Oracle 网络管理器来为主和备数据库创建网络服务名,为重做传输服务所使用。
Oracle 网络服务名必须解析一个连接描述符,使用当你为主和备数据库配置监听器时指定的同样的协议、主机地址、端口、和服务。连接描述符也必须指定使用专用服务器。
第 5 步为备数据库创建一个服务器参数文件。
在一个空闲的备数据库上,使用SQL CREATE 语句来从步骤2 中编辑的文本初始化参
数文件,为备数据库创建一个服务器参数文件。例如:
SQL> CREATE SPFILE FROM PFILE='initboston.ora';
6、启动物理备数据库
执行下面的步骤来启动物理备数据库和重做应用。
第 1 步启动物理备数据库。
在备数据库上,执行下面的 SQL 语句来启动和安装数据库:
SQL> STARTUP MOUNT;
第 2 步启动重做应用。
在备数据库上,执行下面的命令来启动重做应用:
SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT FROM SESSION;该语句包含 DISCONNECT FROM SESSION 选项,使得重做应用运行在后台会话中。
第 3 步测试归档操作到物理备数据库。
在这个例子中,直到日志切换之后,重做数据到远程备位置的传输才会发生。默认地,当联机重做日志文件满的时候,日志切换发生。要强制日志切换,使得重做数据立即传送,在主数据库上使用下面的ALTER SYSTEM 语句。例如:
SQL> ALTER SYSTEM SWITCH LOGFILE;
7、检验物理备数据库正确执行
一旦你创建物理备数据库并设立重做传输服务,你可能需要检查数据库更改成功地被从主数据库传送到备数据库。要在备数据库上看到接收到重做数据,你首先应该在备数据库上确认现有的归档重做日志文件,在主数据库上强制日志切换并归档一些联机重做日志文件,然后再次检查备数据库。下面的步骤显示如何执行这些任务。
第 1 步确认现有的归档重做日志文件。
在备数据库上,查询 V$ARCHIVED_LOG 视图以确认归档重做日志中现有的文件。例如:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
2 FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
8 11-JUL-02 17:50:45 11-JUL-02 17:50:53
9 11-JUL-02 17:50:53 11-JUL-02 17:50:58
10 11-JUL-02 17:50:58 11-JUL-02 17:51:03
3 rows selected.
第 2 步强制日志切换以归档当前的联机重做日志文件。
打开主数据库,执行 ALTER SYSTEM SWITCH LOGFILE 语句以强制日志切换并归档当前联机重做日志文件组:
SQL> ALTER SYSTEM SWITCH LOGFILE;
第 3 步在备数据库上检查新的重做数据已归档。
在备数据库上,查询 V$ARCHIVED_LOG 视图来检查重做数据已收到并归档到被数据库:
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME
2> FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIME NEXT_TIME
---------- ------------------ ------------------
8 11-JUL-02 17:50:45 11-JUL-02 17:50:53
9 11-JUL-02 17:50:53 11-JUL-02 17:50:58
10 11-JUL-02 17:50:58 11-JUL-02 17:51:03
11 11-JUL-02 17:51:03 11-JUL-02 18:34:11
4 rows selected.
归档的重做日志文件现在可以应用到物理被数据库上了。
第 4 步检查新归档的重做日志文件已应用。
在备数据库上,查询 V$ARCHIVED_LOG 视图来检查归档重做日志文件已应用。
SQL> SELECT SEQUENCE#,APPLIED FROM V$ARCHIVED_LOG
2 ORDER BY SEQUENCE#;
SEQUENCE# APP
--------- ---
8 YES
9 YES
10 YES
11 YES
4 rows selected.