ITPub博客

首页 > Linux操作系统 > Linux操作系统 > Windows平台Dataguard测试

Windows平台Dataguard测试

原创 Linux操作系统 作者:fjmingyang 时间:2019-05-17 08:12:06 0 删除 编辑

首先,这并不是一篇十分详尽的安装dataguard文章,因为这样的文章网上很多,写这篇文章的初衷在于证实个人的一些想法,同时希望能对那些没有Unix环境而又想做dataguard测试的朋友有所帮助。整个过程只是一个简单的描述,把需要注意的地方用我的理解注释一下而已。其中某些章节piner在《Oracle 9i备用数据库配置使用参考手册》中描述得很清楚,我就不再螯述了,直接引用,在此感谢。

Platform: Windows2003(physical standby),WindowsXP(primary)

Oracle: physical standbyprimary 都是9.2.0.6

整个过程大体分为以下几个步骤:

1、 建立备用库的controlfile

在主库中 SQLalter 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_serverfal_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建立serviceoradim –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) 在主库服务器上 SQLalter database create standby controlfile as ‘e:backupstdctl01.ctl’,并拷贝到备用库服务器上inittestdb.oracontrol_files指定的路径下.并复制多份

3) 在主库服务器上拷贝热备文件到备用库服务器上相同的路径下,本例为e:backup

4) 在备用库服务器上set ORACLE_SID=testdb

5) 在备用库服务器上用oradim建立serviceoradim –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要和主库的大小一样,至于要添加多少组日志,则要根据实际情况,你可以查看一下备用库的RFStrace文件和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/,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2006-04-03

  • 博文量
    66
  • 访问量
    48243