首先,这并不是一篇十分详尽的安装dataguard文章,因为这样的文章网上很多,写这篇文章的初衷在于证实个人的一些想法,同时希望能对那些没有Unix环境而又想做dataguard测试的朋友有所帮助。整个过程只是一个简单的描述,把需要注意的地方用我的理解注释一下而已。其中某些章节piner在《Oracle 9i备用数据库配置使用参考手册》中描述得很清楚,我就不再螯述了,直接引用,在此感谢。
Platform: Windows2003(physical standby),WindowsXP(primary)
Oracle: physical standby和primary 都是9.2.0.6
整个过程大体分为以下几个步骤:
1、 建立备用库的controlfile
在主库中 SQL〉alter database create standby controlfile as ‘e:backupstdctl01.ctl’
2、 配置备用库的tnsnames.ora文件
PRIMARYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = testdb)
(SERVER = DEDICATED)
)
)
STANDBYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.1)(PORT = 1521))
)
(CONNECT_DATA =
(SID = testdb)
(SERVER = DEDICATED)
)
)
用tnsping测试以上tnsname.
3、 配置备用库的parameter file :inittestdb.ora
备用库的参数文件需要改动地方很少,
*.control_files='e:oracleoradatatestdbstdctl01.CTL','e:oracleoradatatestdbstdctl02.CTL','e:oracleoradatatestdbstdctl03.CTL' (指向1步骤建立的standby controlfile)
*.db_file_name_convert='d:oracleoradata','e:oracleoradata'(如果两数据库的目录结构不一样)
*.log_file_name_convert=='d:oracleoradata','e:oracleoradata'(如果两数据库的目录结构不一样)
其余参数按照默认亦可,几个比较重要的参数如下(建议修改)
*.log_archive_dest_1='location=e:oracleora92databasearchive'
*.log_archive_dest_2='service=standbydb LGWR REOPEN=300'
(设定这两个参数是为了当主库switchover为备用库,备用库switchover为主库,仍然可以进行日志的传输,这样新的主库仍旧可以切回备用库,新的备用库仍旧可以切回主库)
*.remote_archive_enable=TRUE (默认值)
*.standby_archive_dest='e:oracleora92databasearchive'
*.fal_server='PRIMARYDB' (连接主库的tnsname)
*.fal_client='STANDBYDB' (连接备用库的tnsname)
备注:不配置fal_server和fal_client也是可以的,Oracle9i具有自动补齐archivelog缺失(gap)的功能
*.DB_FILE_NAME_CONVERT
db_file_name_convert 主库和备用库的数据文件转换目录对映,如果有多个对映,逐一指明对映关系。
格式:*.db_file_name_convert=主库数据文件目录,备用库数据文件目录
例如:
一对一映射设定
*.db_file_name_convert='d:oracleoradata','e:oracleoradata'
多对多映射设定时,所有相对应路径都一一写出来
LOG_FILE_NAME_CONVERT
指明主库和备用库的log文件转换目录对映。
格式为:*. log_file_name_convert=主库log目录,备用库目录
例如:
*.log_file_name_convert=='d:oracleoradata','e:oracleoradata'
standby_file_management
这个参数也是9i的新参数,可以自动同步数据文件。
例如:
standby_file_management =auto
如果用到了该参数,将有如下限制
ALTER DATABASE RENAME
ALTER DATABASE ADD/DROP LOGFILE
ALTER DATABASE ADD/DROP STANDBY LOGFILE MEMBER
ALTER DATABASE CREATE DATAFILE AS
4、 建立物理备用库
有两种方法:
方法一 使用主库的冷备份
1) 把冷备份拷贝到备用库服务器上
2) 在备用库服务器上建立与主库服务器相同的目录结构
3) 在备用库服务器上定义ORACLE_SID环境变量 set ORACLE_SID=testdb
4) 在备用库服务器上用oradim建立service:oradim –new –sid %ORACLE_SID%
(备注:SID可以和主库不一样,SID只是用于在操作系统上标识Instance,而一个Instance可以打开任意一个数据库,所以只要备用库的db name和主库一样就可以)
5) 在备用库服务器上生成密码文件:
orapwd file=%ORACLE_HOME%databasepwd.ora password=sys
方法二 使用主库的热全备份(若使用这种方法1步骤中的standby controlfile要在做完热备后创建,因为此时才会有记录热备文件信息)
1) 在主库服务器上使用rman热全备主库,e.g.
RMAN>connect taget /
RMAN>backup database format=’e:backupbackup.bak’
2) 在主库服务器上 SQL〉alter database create standby controlfile as ‘e:backupstdctl01.ctl’,并拷贝到备用库服务器上inittestdb.ora中control_files指定的路径下.并复制多份
3) 在主库服务器上拷贝热备文件到备用库服务器上相同的路径下,本例为e:backup下
4) 在备用库服务器上set ORACLE_SID=testdb
5) 在备用库服务器上用oradim建立service:oradim –new –sid %ORACLE_SID%
6) 在备用库服务器上生成密码文件:
orapwd file=%ORACLE_HOME%databasepwd.ora password=sys
7) 在备用库服务器上使用standby controlfile恢复数据库
启动到mount 下
SQL> connect / as sysdba
Connected to an idle instance.
SQL>startup nomount pfile=e:oracleora92databaseinittestdb.ora
SQL>alter database mount standby database;
在RMAN中
RMAN> connect target /
RMAN> restore database;(此时数据会恢复到e:oracleoradatatestdb下,因为我们在inittestdb.ora中指定了db_file_name_convert参数)
SQL> recover standby database;(如果有需要恢复的日志可以运行此命令,本例可以跳过)
到此我们的物理备用库已经创建完毕,就差启动了,那么主库如何知道备用库的位置及又以什么方式(保护模式)传递redo的呢?请接着往下看
5、 配置主库的tnsnames.ora文件
STANDBYDB =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.2)(PORT = 1521))
)
(CONNECT_DATA =
(SID = testdb)
(SERVER = DEDICATED)
)
)
6、 配置主库的参数文件:inittestdb.ora
*.log_archive_dest_1='location=d:oracleora92databasearchive' (指定主库日志的归档路径)
*.log_archive_dest_2='service=standbydb LGWR REOPEN=300' (指定主库日志的第二归档路径,即通过主库tnsnames.ora文件中定义的standbydb连接指向备用库)
7、 启动物理备用库
在备用库服务器上
SQL> connect / as sysdba
Connected to an idle instance.
SQL>startup nomount pfile=e:oracleora92databaseinittestdb.ora
SQL>alter database mount standby database;
SQL>alter database recover managed standby database disconnect from session;(启动MRP进程,把归档日志应用到备份库上,注意:不管采用什么保护模式,在备用日志或者当前正在归档的日志中的内容是不能马上被应用的,必须当归档完成后才由MRPn进程应用到备用数据库)
8、 启动主库
主库的启动和一般数据库的启动没有区别,在主库服务器上
SQL> connect / as sysdba
Connected to an idle instance.
SQL>startup pfile=e:oracleora92databaseinittestdb.ora
-
9、 验证备用服务器是否工作
我们可以通过视图查看日志应用情况
SQL> SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME, APPLIED
FROM V$ARCHIVED_LOG ORDER BY SEQUENCE#;
SEQUENCE# FIRST_TIM NEXT_TIME
---------- --------- ---------
3 08-JUN-04 08-JUN-04 YES
4 08-JUN-04 08-JUN-04 YES
5 08-JUN-04 09-JUN-04 YES --新传过来的归档日志文件
或者查看alert日志文件,如有如下内容表示正在恢复,而且在等待下一个日志。
alter database recover managed standby database disconnect from session
Attempt to start background Managed Standby Recovery process
MRP0 started with pid=11
MRP0: Background Managed Standby Recovery process started
Starting datafile 1 recovery in thread 1 sequence 5
Datafile 1: '/u01/oracle/oradata/tbdb/system01.dbf'
Starting datafile 2 recovery in thread 1 sequence 5
Datafile 2: '/u01/oracle/oradata/tbdb/undotbs01.dbf'
19
Starting datafile 3 recovery in thread 1 sequence 5
Datafile 3: '/u01/oracle/oradata/tbdb/indx01.dbf'
Starting datafile 4 recovery in thread 1 sequence 5
Datafile 4: '/u01/oracle/oradata/tbdb/tools01.dbf'
Starting datafile 5 recovery in thread 1 sequence 5
Datafile 5: '/u01/oracle/oradata/tbdb/users01.dbf'
Media Recovery Waiting for thread 1 seq# 5
Wed Jun 9 02:20:04 2004
Completed: alter database recover managed standby database di
Wed Jun 9 02:28:18 2004
Media Recovery Log /u01/oracle/oradata/tbdb/archive/1_5.dbf
Media Recovery Waiting for thread 1 seq# 6
其它的备用数据库相关视图还有
V$MANAGED_STANDBY
(Physical Standby Databases Only) 会纪录当前从库的一些进程情况和进程的process id,如
rfs,mrp等
V$ARCHIVE_GAP
这里面会纪录当前从库mrp进程恢复需要的胆识还没有传到从库得日志
V$DATAGUARD_STATUS
备用库的状态与信息
V$STANDBY_LOG
备用数据库的备用日志的数量与当前状态等信息
-
10、 切换( Switchover )测试
注意:Swithover时只能先从Primary切到Standby,再从Standby切到Primary.
以下顺序不能颠倒,如果采用standby redo log的需要注意在切换前在主数据库创建同样大小的standby redo log。
主库-〉备用库-〉主库
SQL> alter database commit to switchover to physical standby with session shutdown;
SQL> shutdown immediate
SQL> startup nomount
SQL> alter database mount standby database;
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
SQL> alter database commit to switchover to primary; (切换回主库)
SQL> shutdown immediate;
SQL> startup
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
备用库-〉主库-〉备用库
SQL> alter database commit to switchover to primary;
SQL> shutdown immediate;
SQL> startup
SQL> select database_role from v$database;
DATABASE_ROLE
----------------
PRIMARY
SQL> alter database commit to switchover to physical standby with session shutdown;(切换回备用库)
SQL> shutdown immediate;
SQL> startup nomount;
SQL> alter database mount standby database;
SQL> recover managed standby database disconnect;
Media recovery complete.
SQL> select database_role from V$database;
DATABASE_ROLE
----------------
PHYSICAL STANDBY
-
11、 转换模式由最大性能到最大保护
a) 在备用库上添加备用日志
SQL>alter database add standby LOGFILE
GROUP 4 ('e:oracleoradatatestdbstdy_redo04.log') SIZE 100M,
SQL>alter database add standby LOGFILE
GROUP 5 (' e:oracleoradatatestdbstdy_redo05.log') SIZE 100M,
SQL>alter database add standby LOGFILE
GROUP 6 (' e:oracleoradatatestdbstdy_redo06.log') SIZE 100M,
SQL>alter database add standby LOGFILE
GROUP 7 (' e:oracleoradatatestdbstdy_redo07.log') SIZE 100M,
Size要和主库的大小一样,至于要添加多少组日志,则要根据实际情况,你可以查看一下备用库的RFS的trace文件和alert log,看RFS进程是否因为standby redo归档未完成而存在等待。
b) 在主库上,检查当前模式
SQL>select protection_mode from v$database;
PROTECTION_MODE
--------------------
MAXIMUM PERFORMANCE
SQL>shutdown immediate;
SQL>startup mount
SQL> alter system set log_archive_dest_2='SERVICE=standbydb LGWR SYNC AFFIRM '
scope=both;
SQL>alter database set standby database to maximize protection;
SQL>alter database open;
SQL> select protection_mode from v$database;
PROTECTION_MODE
--------------------
MAXIMUM PROTECTION
模式切换的完全的语法如下
ALTER DATABASE SET STANDBY DATABASE TO
MAXIMIZE {PROTECTION | AVAILABILITY | PERFORMANCE}
注意:
1、在Data Guard环境中,如果要在最大保护模式下,必须至少一个Standby的设置满足以
下条件
alter system set log_archive_dest_2='SERVICE=dbstandby LGWR SYNC AFFIRM';
并将主库设置到Maximum Protection,备库可以在Maximum Performance,也可设置在
Maximum Protection.
2、最大保护模式下,Standby方的MRP0仍是需要等待Primary的当前日志归档后(由Log
switch触发)才能应用到database中。这在所有模式中均一样。在failover的时候,可以
用
alter database recover managed standby database finish;
应用日志, 这样不会丢失数据.
3、最大保护模式下,处于最大保护模式下的备用数据库不能正常的关闭,必须要保持与主
库一致的模式,如果采用abort强行关闭或者系统与网络故障,在主数据库上进行的任何事
务,将导致主数据库的关闭,在alert日志中,会有如下的记载
Tue Jun 15 12:06:04 2004
Network asynch I/O wait error 3114 log 3 service 'standbydb'
LGWR: All standby destinations have failed (16098)
******************************************************
WARNING: All standby database destinations have failed
WARNING: Instance shutdown required to protect primary
******************************************************
LGWR: terminating instance due to error 16098
Instance terminated by LGWR, pid = 25034
-
12、 Failover 测试
在standby上 首先发现并解决日志GAP的问题,从主库中将日志号高于备用库的归档日志拷贝过来SQL>alter database recover managed standby database finish;——如果没有备用日志的话用:
alter database recover managed standby database finish skip standby logfile;
你也可以采用手工恢复
ALTER DATABASE REGISTER LOGFILE 'e:oracleora92databasearchive1_97.dbf';
recover standby database;
SQL>alter database commit to switchover to primary;
SQL>shutdown immediate;
SQL>startup;
-
13、 日常管理
备用服务器的管理模式与只读模式
1、启动到管理模式
SQL>shutdown immediate
SQL>startup nomount pfile=?/dbs/inittbdbsdby.ora
SQL>alter database mount standby database
SQL>alter database recover managed standby database disconnect from session;
2、启动到只读方式
SQL>shutdown immediate
SQL>startup nomount pfile=?/dbs/inittbdbsdby.ora
SQL>alter database mount standby database
SQL>alter database open read only
3、如果在管理恢复模式下到只读模式
SQL>recover managed standby database cancel;
SQL>alter database open read only;
这个时候,可以给数据库增加临时数据文件(这个在热备份的时候是没有备份过来的)
如
alter tablespace temp add tempfile '/u01/oracle/oradata/tbdb/temp01.dbf' size 100M;
4、从只读方式到管理恢复方式
SQ>recover managed standby database disconnect from session;
来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/1698901/viewspace-103262/,如需转载,请注明出处,否则将追究法律责任。
转载于:http://blog.itpub.net/1698901/viewspace-103262/