Oracle11g ——Data Guard部署

为了不停止业务系统,采用rman创建DG,步骤如下:

修改备机与主机时间保持一致

考虑是否对备库打开闪回 fj.pngOracle Data Guard的配置.doc

友情提示:实现Snapshot Standby数据库功能并不需要开启主库和备库的闪回数据库(Flashback Database)功能,与是否开启闪回数据库无关。

查看Data Guard是否安装:

select * from v$option o where o.PARAMETER in ('Oracle Data Guard','Active Data Guard');

同步传输:

当用户在主库提交数据的时候,会在sga的redo缓冲区中首先记录redo信息,在提及操作的时候lgwr会将redo数据写入redo数据文件中,那么这个时候lns进程会实时的将redo数据从主库的redo缓冲区传送到备库,在备库使用rfs接受数据,传入standby logfile中,进而应用redo数据(sql apply)。在应用完成后rfs将信息返回主库进程,告知该redo条目已经在备库应用完毕,lgwr收到lns的确认消息,从而提示提交成功。

在最高可用性中,如果主库收不到备库应用的确认消息,那么会通过net_timeout值超时,继续完成本次操作,那么lns进程将不会在获得sga中的重做数据,只有当下次日志switch的时候才主动去尝试获得lns数据,如果期间还是没有和备库完成通信,当超过net_timeout参数的时候会继续停止,主机事务也继续完成,但当存在于最大保护模式下,那么必须等到备库应用redo的确认消息,那么就会停止数据库的运行操作。

异步传输:

异步传输模式就是指主库不必要等待备库应用redo的确认消息,就会完成提交工作(见下图),但是增加了数据丢失的风险性。

因为某种原因导致lns进程无法传输数据到备库:

当数据库运行最高可用性下,当主库无法与备库进行通信,那么主库依然可以完成事务的提交,lgwr依然可以写入online redo日志,在没法通信期间主库可能会产生很多归档日志,那么oracle为了在备库和主库能够再次通信应用redo日志的情况,会进行自动处理间隔操作。具体就是主库arch进程会不停ping备库,当和备库通信连接后,那么arch进程通过备库的rfs进程获得备库控制文件中最后应用的归档日志信息,将丢失的归档日志通过arch进程传送与备库进行应用。当在主库进行redo 日志切换的时候,lns进程会再次和备库的rfs进程通信继续完成redo条目的传送,arch传送的归档日志在后台进行应用。当备库和主库redo条目同步后arch的任务随即完成。

一、主库配置

1、确认主库处于归档模式下,为force logging--能保证直接路径下的写入也进行日志归档。

Select log_mode,force_logging from v$database;--应为archivelog,yes

SQL> select log_mode ,force_logging from v$database;

LOG_MODE     FOR

------------ ---

ARCHIVELOG   NO

alter database force logging;

关闭数据库,修改为归档模式

Shutdown immediate;

Startup mount;

Alter database archivelog;

2、配置Redo传输认证

需要所有备库的的密码文件与主库一致,备库可以通过copy主库密码文件的方法完成。

3、配置主库用于接收Redo数据

创建的standby redo log 的大小要与redo文件保持一致

Select group#,bytes from v$log;

SQL> Select group#,bytes from v$log;

    GROUP#      BYTES

---------- ----------

         1   52428800

         2   52428800

         3   52428800

此时主库每组日志的日志成员的大小都是50M,因此,创建的standby redo log大小也是50M

创建适当数量的standby redo log 组数,公式如下:

如果主库是单实例数据库库,standby redo log组数=主库日志总数+1;

如果主库是Rac数据库,standby redo log组数=(所有节点中日志组数最大值+1)*RAC节点数;

因此,本数据库需创建3+1=4组standby redo log日志。

确认数据库参数MAXLOGFILES和MAXLOGMEMBERS不会限制Standby Redo Log创建

MAXLOGFILES和MAXLOGMEMBERS这两参数是在使用“CREATE DATABASE”语句创建数据库时做的限制,用于限制数据库日志文件的最大数量和日志组的最大数量。
  如果在创建数据库时没有注意这个问题会导致Standby Redo Log无法创建的问题,解决方法只能是创新创建主库或者重新创建主库的控制文件。所以,一定要做好前期的规划

查看MAXLOGFILES的方法:

使用trace文件来查看

执行alter database backup controlfile to trace;然后在udump目录下查找生成的文件获得

如果执行上述命令未生成相应的控制文件,可以通过给上面的命令附加as语句来显示指定生成的文件地址和文件名来实现。

alter database backup controlfile to trace as '/u01/app/oracle/admin/orcl/udump/control.ctl';

查看v$controlfile_record_section来获得,其中的redo log就是maxlogfiles值。

SQL> select TYPE,RECORDS_TOTAL from v$controlfile_record_section;

TYPE                         RECORDS_TOTAL

---------------------------- -------------

DATABASE                                 1

CKPT PROGRESS                           11

REDO THREAD                              8

REDO LOG                                16

创建standby redo log,共创建4组,大小为50m

alter database add standby logfile group 4('/home/oracle/app/oradata/eaidb/stdbyredo04.log'size 50m;

alter database add standby logfile group 5('/home/oracle/app/oradata/eaidb/stdbyredo05.log'size 50m;

alter database add standby logfile group 6('/home/oracle/app/oradata/eaidb/stdbyredo06.log'size 50m;

alter database add standby logfile group 7('/home/oracle/app/oradata/eaidb/stdbyredo07.log'size 50m;

查看standby redo log创建结果

SQL> select group#,thread#,sequence#,archived,status from v$standby_log;

    GROUP# THREAD# SEQUENCE# ARCHIVED STATUS

1 4 0 0 YES UNASSIGNED

2 5 0 0 YES UNASSIGNED

3 6 0 0 YES UNASSIGNED

4 7 0 0 YES UNASSIGNED

 

4、配置主库参数名(tnsname.ora),主库为pra,备库为pradg

EAIDB =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = eaidb)

    )

  )

EAIDBDG =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.0.3)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = eaidbdg)

    )

  )

5、在主库添加如下参数:

--主库添加参数

--alter system set db_unique_name=eaidb scope=spfile;

--通过db_unique_name属性指定数据库

alter system set log_archive_config='dg_config=(eaidb,eaidbdg)' scope=both;

alter system set log_archive_dest_1= 'location=/home/oracle/app/arch/eaidb valid_for=(all_logfiles,all_roles)  db_unique_name=eaidb' scope=both;

--默认为最高性能模式,若修改为最大可用模式,应为SERVICE=ORAVS LGWR ASYNC AFFIRM--使用异步传输

alter system set log_archive_dest_2= 'service=eaidbdg lgwr async valid_for=(online_logfiles,primary_role)  db_unique_name=eaidbdg' scope=both;

--valid_for属性指定传输及接收对象,该属性有两个值:redo_log_type和database_role,可以理解为:发送指定角色生成的指定类型的日志文件,该参数的目的是为了确保,一旦发生角色切换后数据库的正常运转

其中redo_log_type和database_role可供选择的参数如下:

Redo_log_type:online_logfile/standby_logfile/all_logfiles

Database_role:primary_role/standby_role/all_roles

Valid_for参数的默认值是:valid_for=(all_logfiles,all_roles)

alter system set standby_file_management=auto scope=both;

--以下为作为备库角色时,所需要用到的参数

alter system set log_archive_dest_state_1=enable scope=both;

alter system set log_archive_dest_state_2=enable scope=both;

alter system set fal_server=eaidbdg scope=both;

alter system set fal_client=eaidb scope=both;

alter system set db_file_name_convert='/home/oracle/app/oracle/oradata/eaidbdg/','/home/oracle/app/oradata/eaidb/' scope=spfile;

alter system set log_file_name_convert='/home/oracle/app/oracle/oradata/eaidbdg/','/home/oracle/app/oradata/eaidb/' scope=spfile;

环境应配置的初始化参数见最后。

建立DataGuard的两种方式

1、使用rman复制库方式建立dg

使用修改的参数文件启动standby至nomount状态。

[oracle@localhost eaidb]$ rman target / auxiliary sys/admin@eaidbdg

Recovery Manager: Release 11.2.0.1.0 - Production on Mon Sep 15 15:33:39 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database: EAIDB (DBID=3224004228)

connected to auxiliary database: EAIDB (not mounted)

RMAN> duplicate target database for standby dorecover nofilenamecheck;

或在线复制:duplicate target database for standby nofilenamecheck from active database;

Starting Duplicate Db at 15-SEP-14

using target database control file instead of recovery catalog

allocated channel: ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: SID=1149 device type=DISK

contents of Memory Script:

{

   set until scn  10096169;

   restore clone standby controlfile;

}

executing Memory Script

executing command: SET until clause

Starting restore at 15-SEP-14

using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore

channel ORA_AUX_DISK_1: restoring control file

channel ORA_AUX_DISK_1: reading from backup piece /home/oracle/rman_bak/eaidb/eaidb_0tpiioi8_1_1_20140915

channel ORA_AUX_DISK_1: piece handle=/home/oracle/rman_bak/eaidb/eaidb_0tpiioi8_1_1_20140915 tag=TAG20140915T143544

channel ORA_AUX_DISK_1: restored backup piece 1

channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:01

output file name=/home/oracle/app/oracle/oradata/eaidbdg/control01.ctl

output file name=/home/oracle/app/oracle/flash_recovery_area/eaidbdg/control02.ctl

Finished restore at 15-SEP-14

contents of Memory Script:

{

   sql clone 'alter database mount standby database';

}

executing Memory Script

sql statement: alter database mount standby database

contents of Memory Script:

{

   set until scn  10096169;

   set newname for tempfile  1 to 

 "/home/oracle/app/oracle/oradata/eaidbdg/temp01.dbf";

   switch clone tempfile all;

   set newname for datafile  1 to 

 "/home/oracle/app/oracle/oradata/eaidbdg/system01.dbf";

   set newname for datafile  2 to 

 "/home/oracle/app/oracle/oradata/eaidbdg/sysaux01.dbf";

   set newname for datafile  3 to 

 "/home/oracle/app/oracle/oradata/eaidbdg/undotbs01.dbf";

   set newname for datafile  4 to 

 "/home/oracle/app/oracle/oradata/eaidbdg/users01.dbf";

   set newname for datafile  5 to 

 "/home/oracle/app/oracle/oradata/eaidbdg/EAI_TSPACE.dbf";

   restore

   clone database

   ;

}

executing Memory Script

executing command: SET until clause

executing command: SET NEWNAME

renamed tempfile 1 to /home/oracle/app/oracle/oradata/eaidbdg/temp01.dbf in control file

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 15-SEP-14

using channel ORA_AUX_DISK_1

channel ORA_AUX_DISK_1: starting datafile backup set restore

channel ORA_AUX_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_AUX_DISK_1: restoring datafile 00001 to /home/oracle/app/oracle/oradata/eaidbdg/system01.dbf

channel ORA_AUX_DISK_1: restoring datafile 00002 to /home/oracle/app/oracle/oradata/eaidbdg/sysaux01.dbf

channel ORA_AUX_DISK_1: restoring datafile 00003 to /home/oracle/app/oracle/oradata/eaidbdg/undotbs01.dbf

channel ORA_AUX_DISK_1: restoring datafile 00004 to /home/oracle/app/oracle/oradata/eaidbdg/users01.dbf

channel ORA_AUX_DISK_1: restoring datafile 00005 to /home/oracle/app/oracle/oradata/eaidbdg/EAI_TSPACE.dbf

channel ORA_AUX_DISK_1: reading from backup piece /home/oracle/rman_bak/eaidb/eaidb_0spiioi0_1_1_20140915

channel ORA_AUX_DISK_1: piece handle=/home/oracle/rman_bak/eaidb/eaidb_0spiioi0_1_1_20140915 tag=TAG20140915T143544

channel ORA_AUX_DISK_1: restored backup piece 1

channel ORA_AUX_DISK_1: restore complete, elapsed time: 00:00:25

Finished restore at 15-SEP-14

contents of Memory Script:

{

   switch clone datafile all;

}

executing Memory Script

datafile 1 switched to datafile copy

input datafile copy RECID=4 STAMP=858353748 file name=/home/oracle/app/oracle/oradata/eaidbdg/system01.dbf

datafile 2 switched to datafile copy

input datafile copy RECID=5 STAMP=858353748 file name=/home/oracle/app/oracle/oradata/eaidbdg/sysaux01.dbf

datafile 3 switched to datafile copy

input datafile copy RECID=6 STAMP=858353748 file name=/home/oracle/app/oracle/oradata/eaidbdg/undotbs01.dbf

datafile 4 switched to datafile copy

input datafile copy RECID=7 STAMP=858353748 file name=/home/oracle/app/oracle/oradata/eaidbdg/users01.dbf

datafile 5 switched to datafile copy

input datafile copy RECID=8 STAMP=858353748 file name=/home/oracle/app/oracle/oradata/eaidbdg/EAI_TSPACE.dbf

contents of Memory Script:

{

   set until scn  10096169;

   recover

   standby

   clone database

    delete archivelog

   ;

}

executing Memory Script

executing command: SET until clause

Starting recover at 15-SEP-14

using channel ORA_AUX_DISK_1

starting media recovery

--在主端使用RMAN的Duplicate创建dg,如果主备库数据文件与重做日志文件目录相同,要添加 nofilenamecheck ,否则不需要添加

如果副本数据库与目标库不在同一台机器上,并且副本数据库的在线日志文件路径与目标库相同,NOFILENAMECHECK 

则运行duplicate命令时必须指定NOFILENAMECHECK参数以避免冲突提示。此处oracle表现的很傻,它不知道你要恢复的路径是在另一台机器上,它只是认为要恢复到的路径怎么跟目标数据库表现的一样呢?会不会是要覆盖目标数据库啊,为了避免这种情形,于是它就报错。所以一旦异机恢复,并且路径相同,那么你必须通过指定NOFILENAMECHECK来避免oracle的自动识别

2、使用rman恢复方式建立dg

备份主库

run{

allocate channel c1 type disk;

allocate channel c2 type disk;

backup database format "/home/oracle/rman_bak/eaidb/whole_%U";

backup format "/home/oracle/rman_bak/eaidb/log_%U" archivelog all;

backup spfile format "/home/oracle/rman_bak/eaidb/spfile_%U";

release channel c1;

release channel c2;

}

生成standby控制文件

rman>copy current controlfile for standby to '/home/oracle/rman_bak/eaidb/standby.ctl';

6、在备库进行恢复:

[oracle@DellServer-B ~]$ rman target /

Recovery Manager: Release 11.2.0.1.0 - Production on Thu Sep 4 18:45:58 2014

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

connected to target database (not started)

RMAN> set dbid 3224004228

executing command: SET DBID

RMAN> startup nomount;

startup failed: ORA-01078: failure in processing system parameters

LRM-00109: could not open parameter file '/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initeaidbdg.ora'

starting Oracle instance without parameter file for retrieval of spfile

Oracle instance started

Total System Global Area     158662656 bytes

Fixed Size                     2211448 bytes

Variable Size                 92275080 bytes

Database Buffers              58720256 bytes

Redo Buffers                   5455872 bytes

RMAN> restore spfile to pfile '/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initeaidbdg.ora' from '/home/oracle/rman_bak/eaidb/spfile_0aphm3eb_1_1';

Starting restore at 04-SEP-14

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=67 device type=DISK

channel ORA_DISK_1: restoring spfile from AUTOBACKUP /home/oracle/rman_bak/eaidb/spfile_0aphm3eb_1_1

channel ORA_DISK_1: SPFILE restore from AUTOBACKUP complete

Finished restore at 04-SEP-14

修改还原的pfile文件

由于备库内存较小,因此删除相关参数,只保留memory_target的值

[oracle@DellServer-B dbs]$ more initeaidbdg.ora 

*.audit_file_dest='/home/oracle/app/oracle/admin/eaidbdg/adump'

*.audit_trail='db'

*.compatible='11.2.0.0.0'

*.control_files='/home/oracle/app/oracle/oradata/eaidbdg/control01.ctl','/home/oracle/app/oracle/flash_recovery_area/eaidbdg/control02.ctl'

*.db_block_size=8192

*.db_domain=''

*.db_file_name_convert='/home/oracle/app/oradata/eaidb/','/home/oracle/app/oracle/oradata/eaidbdg/'

*.db_name=eaidb

*.db_unique_name=eaidbdg

*.db_recovery_file_dest='/home/oracle/app/oracle/flash_recovery_area/eaidbdg'

*.diagnostic_dest='/home/oracle/app'

*.dispatchers='(PROTOCOL=TCP) (SERVICE=eaidbXDB)'

*.fal_client='EAIDBDG'

*.fal_server='EAIDB'

*.log_archive_config='dg_config=(eaidbdg,eaidb)'

*.log_archive_dest_1='location=/home/oracle/app/arch/eaidbdg valid_for=(all_logfiles,all_roles)  db_unique_name=eaidbdg'

*.log_archive_dest_2='service=eaidb lgwr async valid_for=(online_logfiles,primary_role)  db_unique_name=eaidb'

*.log_archive_dest_state_1='ENABLE'

*.log_archive_dest_state_2='ENABLE'

*.log_file_name_convert='/home/oracle/app/oradata/eaidb/','/home/oracle/app/oradata/eaidbdg/'

*.memory_target=3221225472

*.open_cursors=300

*.processes=1000

*.remote_login_passwordfile='EXCLUSIVE'

*.sessions=1105

*.standby_file_management='AUTO'

*.undo_tablespace='UNDOTBS1'

--创建相关目录

Mkdir - p /home/oracle/app/oracle/admin/eaidbdg/adump

Mkdir -p /home/oracle/app/oracle/oradata/eaidbdg

Mkdir -p /home/oracle/app/oracle/flash_recovery_area/eaidbdg

Mkdir -p /home/oracle/app/arch/eaidbdg

7、使用主库copy过来的密码文件

Cp /home/oracle/rman_bak/orapweaidb /home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/orapweaidbdg

8、将主机上生成的standby控制文件放到初始化参数指定的目录中

Cd /home/oracle/rman_bak/eaidbdg/

[oracle@DellServer-B eaidb]$ cp standby.ctl /home/oracle/app/oracle/oradata/eaidbdg/control01.ctl

[oracle@DellServer-B eaidb]$ cp standby.ctl /home/oracle/app/oracle/flash_recovery_area/eaidbdg/control02.ctl

9、启动备库数据库至nomount状态

startup nomount pfile='/home/oracle/app/oracle/product/11.2.0/dbhome_1/dbs/initeaidbdg.ora';

10、启动备库至mount状态

Alter database mount;

11、指定备份集路径,并restore数据文件

RMAN> catalog start with '/home/oracle/rman_bak/eaidb';

Starting implicit crosscheck backup at 10-SEP-14

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=193 device type=DISK

Crosschecked 10 objects

Finished implicit crosscheck backup at 10-SEP-14

Starting implicit crosscheck copy at 10-SEP-14

using channel ORA_DISK_1

Finished implicit crosscheck copy at 10-SEP-14

searching for all files in the recovery area

cataloging files...

no files cataloged

searching for all files that match the pattern /home/oracle/rman_bak/eaidb

List of Files Unknown to the Database

=====================================

File Name: /home/oracle/rman_bak/eaidb/orapweaidb

File Name: /home/oracle/rman_bak/eaidb/tnsnames.ora

File Name: /home/oracle/rman_bak/eaidb/standby.ctl

Do you really want to catalog the above files (enter YES or NO)? YES

cataloging files...

cataloging done

List of Cataloged Files

=======================

File Name: /home/oracle/rman_bak/eaidb/standby.ctl

List of Files Which Where Not Cataloged

=======================================

File Name: /home/oracle/rman_bak/eaidb/orapweaidb

  RMAN-07517: Reason: The file header is corrupted

File Name: /home/oracle/rman_bak/eaidb/tnsnames.ora

  RMAN-07517: Reason: The file header is corrupted

RMAN> run{

2> set newname for datafile 1  to  '/home/oracle/app/oracle/oradata/eaidbdg/system01.dbf';

3> set newname for datafile 2  to  '/home/oracle/app/oracle/oradata/eaidbdg/sysaux01.dbf';

4> set newname for datafile 3  to  '/home/oracle/app/oracle/oradata/eaidbdg/undotbs01.dbf';

5> set newname for datafile 4  to  '/home/oracle/app/oracle/oradata/eaidbdg/users01.dbf';

6> set newname for datafile 5  to  '/home/oracle/app/oracle/oradata/eaidbdg/EAI_TSPACE.dbf';

7> restore database;

8> switch datafile all;

9> }

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

executing command: SET NEWNAME

Starting restore at 10-SEP-14

using channel ORA_DISK_1

channel ORA_DISK_1: starting datafile backup set restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_DISK_1: restoring datafile 00002 to /home/oracle/app/oracle/oradata/eaidbdg/sysaux01.dbf

channel ORA_DISK_1: restoring datafile 00004 to /home/oracle/app/oracle/oradata/eaidbdg/users01.dbf

channel ORA_DISK_1: restoring datafile 00005 to /home/oracle/app/oracle/oradata/eaidbdg/EAI_TSPACE.dbf

channel ORA_DISK_1: reading from backup piece /home/oracle/rman_bak/eaidb/whole_04phm3dq_1_1

channel ORA_DISK_1: piece handle=/home/oracle/rman_bak/eaidb/whole_04phm3dq_1_1 tag=TAG20140904T174322

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:00:16

channel ORA_DISK_1: starting datafile backup set restore

channel ORA_DISK_1: specifying datafile(s) to restore from backup set

channel ORA_DISK_1: restoring datafile 00001 to /home/oracle/app/oracle/oradata/eaidbdg/system01.dbf

channel ORA_DISK_1: restoring datafile 00003 to /home/oracle/app/oracle/oradata/eaidbdg/undotbs01.dbf

channel ORA_DISK_1: reading from backup piece /home/oracle/rman_bak/eaidb/whole_05phm3dq_1_1

channel ORA_DISK_1: piece handle=/home/oracle/rman_bak/eaidb/whole_05phm3dq_1_1 tag=TAG20140904T174322

channel ORA_DISK_1: restored backup piece 1

channel ORA_DISK_1: restore complete, elapsed time: 00:00:15

Finished restore at 10-SEP-14

datafile 1 switched to datafile copy

input datafile copy RECID=7 STAMP=857901549 file name=/home/oracle/app/oracle/oradata/eaidbdg/system01.dbf

datafile 2 switched to datafile copy

input datafile copy RECID=8 STAMP=857901549 file name=/home/oracle/app/oracle/oradata/eaidbdg/sysaux01.dbf

datafile 3 switched to datafile copy

input datafile copy RECID=9 STAMP=857901549 file name=/home/oracle/app/oracle/oradata/eaidbdg/undotbs01.dbf

datafile 4 switched to datafile copy

input datafile copy RECID=10 STAMP=857901549 file name=/home/oracle/app/oracle/oradata/eaidbdg/users01.dbf

datafile 5 switched to datafile copy

input datafile copy RECID=11 STAMP=857901549 file name=/home/oracle/app/oracle/oradata/eaidbdg/EAI_TSPACE.dbf

Recover database;

释义:switch datafile all--更新控制文件中datafile的路径。以至在recover 时 可以在还原后的目录进行查找,否则将到主库中标明的路径下进行寻找文件。

需要对临时表空间进行处理,否则切换时有错误。

12、应用日志

启动物理备库:startup mount;--恢复完成后,已经为mount状态。

创建standby redo log file用于接收主库传过来的日志:由于主库已经提前创建好了4组standby redo log file,备库在切换时,会根据log_file_name_convert参数转换后自动创建与之对应的standby redo log file日志组,因此此步可省略。

也可手动创建

alter database add standby logfile group 4('/home/oracle/app/oracle/oradata/eaidbdg/stdbyredo04.log'size 50m;

alter database add standby logfile group 5('/home/oracle/app/oracle/oradata/eaidbdg/stdbyredo05.log'size 50m;

alter database add standby logfile group 6('/home/oracle/app/oracle/oradata/eaidbdg/stdbyredo06.log'size 50m;

alter database add standby logfile group 7('/home/oracle/app/oracle/oradata/eaidbdg/stdbyredo07.log'size 50m;

开启归档日志应用

alter database recover managed standby database disconnect from session;

启动redo apply

alter database recover managed standby database using current logfile disconnect from session;

13、验证备库处于正常运行中

select sequence#, first_time, next_time from v$archived_log order by sequence# desc;

主库切换日志(alter system switch logfile)后,再次查看,是否增加。

14、调整备库为READ ONLY WITH APPLY状态

查看备库状态:

·  select open_mode from v$database;

取消备库的自动恢复

·  alter database recover managed standby database cancel;

Open备库调整为READ ONLY状态:

Alter database open;

--开启实时应用

Alter database recover managed standby database using current logfile disconnect;

释义:using current logfile:当备库收到日志后,尽快完成恢复。

15、保护模式可以相互转换

Alter database set standby to maximize{protection|availability|performance};

16、

-----主备库switchover、failover切换

1、进行switchover切换

在切换前确保只有一个节点处于启动状态,其余节点关闭

切换前先在主库执行

Alter system switch logfile;

主库执行:

Alter database commit to switchover to physical standby with session shutdown;

在备库Rac1节点上执行:

Alter database commit to switchover to primary with session shutdown;

Alter database open;--查看数据库的当前状态是否open。

--主库切换后,需shutdown,然后重新startup mount状态后,才可作为备库使用

--切换后的备库

Shutdown immediate;

Startup mount;

Alter database open;

Alter database recover managed standby database using current logfile disconnect from session;--启用实时传输模式real apply time

不能切换的情况:

Select switchover_status from v$database;:session active

在这种情况下,说明还有活动的session,需要kill掉,只留下当前sys进程:

Select sid,serial# from v$session where sid>10;

Select distinct ss.sid from v$mystat ss;

Alter system kill session 12,4;

SELECT 'kill -9 '||p.spid,'alter system kill session '''||v.sid||','||v.SERIAL#||''''

FROM V$SESSION v ,v$process p   

WHERE v.TYPE = 'USER' 

AND v.SID <> (SELECT DISTINCT SID FROM V$MYSTAT)  

AND v.paddr=p.addr;

2、failover切换

当主库宕机后,可直接将备库切换为主库。

Alter database recover managed standby database finish;------用于failover切换使用

将备库切换为主库:切换后为mount状态

Alter database commit to switchover to primary;

重启数据库

Shutdown immediate;

Startup;

查看角色切换是否成功

Select open_mode,database_role,switchover_status from v$database;

Failover切换后,由于只有一个数据库,建议立即对数据库做全备(rman备份),源主库恢复后即和DG没有任何关系,若开启Flash back或可reinstate,若未开启,则只能将源主库重建为备库。

查看是否使用Real Time apply

Select recovery_mode from v$archive_dest_status;

主备库的启动、关闭顺序

启动时:先启动备库的listener----启动备库---启动主库监听---启动主库

关闭时:关闭主库---关闭备库

如有日志裂缝:

查看是否有日志GAP:

Select unique thread#,max(sequence#) over (partition by thread#) last from v$archived_log;

Select thread#,low_sequence#,high_sequence# from v$archive_gap;

如果有,则拷贝到指定位置。

手工注册这些日志:

Alter database register logfile 路径;

修改数据保护模式,可按照下列方法进行:

1、关闭数据库,重启到mount状态,如果是rac数据库,需要关闭所有实例,然后只启动一个实例到mount状态。(备库)

Shutdown immediate;

Startup mount;

2、修改模式

Alter database set standby database to maximize availability;

物理DataGuard之Snapshot Standby功能:

Snapshot Standby功能可将备库置于“可读写状态”,用于不方便在生产环境中主库中测试的内容,如模拟上线任务等测试,当备库读写状态下任务完成后,可以轻松的完成Snapshot Standby数据库角色切回备库角色,恢复与主库数据同步。在Snapshot Standby状态下备库可以接受主库传过来的日志,但是不能将变化应用在备库中。

步骤如下:

1、停止Redo Apply

SQL> alter database recover managed standby database cancel;

2、确保当前备库处于Mount状态

SQL> select switchover_status,open_mode,database_role from v$database;

SWITCHOVER_STATUS    OPEN_MODE            DATABASE_ROLE

-------------------- -------------------- ----------------

NOT ALLOWED          READ ONLY            PHYSICAL STANDBY

SQL> shutdown immediate;

Database closed.

Database dismounted.

ORACLE instance shut down.

SQL> startup mount;

ORACLE instance started.

Total System Global Area 9954570240 bytes

Fixed Size                  2215904 bytes

Variable Size            5167382560 bytes

Database Buffers         4764729344 bytes

Redo Buffers               20242432 bytes

Database mounted.

SQL> select switchover_status,open_mode,database_role from v$database;

SWITCHOVER_STATUS    OPEN_MODE            DATABASE_ROLE

-------------------- -------------------- ----------------

NOT ALLOWED          MOUNTED              PHYSICAL STANDBY

3、确保闪回恢复区已指定

注:实现Snapshot Standby数据库功能并不需要开启主库和备库的闪回数据库(Flashback Database)功能,与是否开启闪回数据库无关。

确认主备库闪回功能未开启:

SQL> select FLASHBACK_ON from v$database;

FLASHBACK_ON

------------------

NO

SQL> show parameter db_recovery_file_dest

NAME                                 TYPE        VALUE

------------------------------------ ----------- ------------------------------

db_recovery_file_dest                string      /home/oracle/app/flash_recovery_area

db_recovery_file_dest_size           big integer 10G

4、调整备库到Snapshot Standby状态

SQL> alter database convert to snapshot standby;

Database altered.

Alert.log:

alter database convert to snapshot standby

Starting background process RVWR

Fri Nov 07 10:00:12 2014

RVWR started with pid=26, OS id=26599 

Allocated 30753968 bytes in shared pool for flashback generation buffer

Created guaranteed restore point SNAPSHOT_STANDBY_REQUIRED_11/07/2014 10:00:12

krsv_proc_kill: Killing 261993005058 processes (all RFS)

Begin: Standby Redo Logfile archival

End: Standby Redo Logfile archival

RESETLOGS after incomplete recovery UNTIL CHANGE 11425874833850

Resetting resetlogs activation ID 930761855 (0x377a4c7f)

Online log /home/oracle/app/oradata/dgoravs/redo01.log: Thread 1 Group 1 was previously cleared

Online log /home/oracle/app/oradata/dgoravs/redo02.log: Thread 1 Group 2 was previously cleared

Online log /home/oracle/app/oradata/dgoravs/redo03.log: Thread 1 Group 3 was previously cleared

Online log /home/oracle/app/oradata/dgoravs/redo04.log: Thread 1 Group 4 was previously cleared

Online log /home/oracle/app/oradata/dgoravs/redo05.log: Thread 1 Group 5 was previously cleared

Standby became primary SCN: 11425874833848

Fri Nov 07 10:00:14 2014

Setting recovery target incarnation to 2

CONVERT TO SNAPSHOT STANDBY: Complete - Database mounted as snapshot standby

Completed: alter database convert to snapshot standby

5、将备库置于对外可读写状态

SQL> select switchover_status,open_mode,database_role from v$database;

SWITCHOVER_STATUS    OPEN_MODE            DATABASE_ROLE

-------------------- -------------------- ----------------

NOT ALLOWED          MOUNTED              SNAPSHOT STANDBY

SQL> alter database open;

SQL> select switchover_status,open_mode,database_role from v$database;

SWITCHOVER_STATUS    OPEN_MODE            DATABASE_ROLE

-------------------- -------------------- ----------------

NOT ALLOWED          READ WRITE           SNAPSHOT STANDBY

6、测试备库处于Snapshot Standby数据库对主库日志的接收

特别注意的是,原理上实现Snapshot Standby数据库功能是基于闪回数据原理的,因此任何导致闪回数据库无法回退的动作在这里也要规避,否则Snapshot Standby数据库将无法回到曾经的备库恢复状态。特别注意的是,原理上实现Snapshot Standby数据库功能是基于闪回数据原理的,因此任何导致闪回数据库无法回退的动作在这里也要规避,否则Snapshot Standby数据库将无法回到曾经的备库恢复状态。

需要稍等几分钟才会传输过来日志

7、恢复Snapshot Standby数据库为Physical Standby数据库

重启备库至Mount状态。

恢复物理备库身份:

SQL> alter database convert to physical standby;

重启备库到自动恢复日志状态:

需要重新启动数据库:

Shutdown immediate;

Startup mount;

SQL> alter database recover managed standby database disconnect from session;--查文件是否传输,alert.log日志内容

SQL> alter database recover managed standby database cancel;

SQL> alter database open;

SQL> select switchover_status,open_mode,database_role from v$database;

SWITCHOVER_STATUS    OPEN_MODE            DATABASE_ROLE

-------------------- -------------------- ----------------

NOT ALLOWED          READ ONLY            PHYSICAL STANDBY

SQL> alter database recover managed standby  database using current logfile disconnect from session;

SQL> select switchover_status,open_mode,database_role from v$database;

SWITCHOVER_STATUS    OPEN_MODE            DATABASE_ROLE

-------------------- -------------------- ----------------

NOT ALLOWED          READ ONLY WITH APPLY PHYSICAL STANDBY

8、至此,整个流程结束。

下列参数为Primary角色相关的初始化参数

DB_NAME

注意保持同一个Data Guard中所有数据库DB_NAME相同

例如:DB_NAME=Dave

DB_UNIQUE_NAME

为每一个数据库指定一个唯一的名称,该参数一经指定不会再发生变化,除非DBA主动修改它

例如:DB_UNIQUE_NAME=DavePre

LOG_ARCHIVE_CONFIG

该参数用来控制从远端数据库接收或发送REDO数据,通过DG_CONFIG属性罗列同一个Data Guard中所有DB_UNIQUE_NAME(含Primary数据库和Standby数据库),以逗号分隔,SEND/NOSEND属性控制是否可以发送,RECEIVE/NORECEIVE属性控制是否能够接收

例如:LOG_ARCHIVE_CONFIG='DG_CONFIG=(DavePre,DaveDG)'

LOG_ARCHIVE_DEST_n

归档文件的生成路径。该参数非常重要,并且属性和子参数也特别多(可以直接查询Oracle官方文档。Data Guard白皮书第14章专门介绍了该参数各属性及子参数的功能和设置)。例如:

LOG_ARCHIVE_DEST_1='LOCATION=l:/oracle/oradata/Dave VALID_FOR=(ALL_LOGFILES,ALL_ROLES) DB_UNIQUE_NAME=DavePre'

LOG_ARCHIVE_DEST_STATE_n

是否允许REDO传输服务传输REDO数据到指定的路径。该参数共拥有4个属性值,功能各不相同。

REMOTE_LOGIN_PASSWORDFILE

推荐设置参数值为EXCLUSIVE或者SHARED,注意保证相同Data Guard配置中所有DB服务器SYS密码相同

以下参数为与Standby角色相关的参数(建议在Primary数据库的初始化参数中也进行设置,这样即使发生角色切换,新的Standby也能直接正常运行)

FAL_SERVER

指定一个Net服务名,该参数值对应的数据库应为Primary角色。当本地数据库为Standby角色时,如果发现存在归档中断的情况,该参数用来指定获取中断的归档文件的服务器

例如:FAL_SERVER=DavePre

提示:FAL是Fetch Archived Log的缩写

FAL_SERVER参数支持多个参数值的哟,相互间以逗号分隔

FAL_CLIENT

又指定一个Net服务名,该参数对应数据库应为Standby角色。当本地数据库以Primary角色运行时,向参数值中指定的站点发送中断的归档文件

例如:FAL_CLIENT=DaveDG

FAL_CLIENT参数也支持多个参数值,相互间以逗号分隔。

DB_FILE_NAME_CONVERT

Standby数据库的数据文件路径与Primary数据库数据文件路径不一致时,可以通过设置DB_FILE_NAME_CONVERT参数的方式让其自动转换。该参数值应该成对出现,前面的值表示转换前的形式,后面的值表示转换后的形式

例如:DB_FILE_NAME_CONVERT='f:/oradata/DavePre','l:/oradata/DaveDG'

LOG_FILE_NAME_CONVERT

  使用方式与上相同,只不过LOG_FILE_NAME_CONVERT专用来转换日志文件路径

例如:

LOG_FILE_NAME_CONVERT='f:/oradata/DavePre','l:/oradata/DaveDG'

STANDBY_FILE_MANAGEMENT

如果Primary数据库数据文件发生修改(如新建、重命名等)则按照本参数的设置在Standby数据库中作相应修改。设为AUTO表示自动管理。设为MANUAL表示需要手工管理

例如:STANDBY_FILE_MANAGEMENT=AUTO

对于归档失败的处理,LOG_ARCHIVE_DEST_n参数有几个属性,可以用来控制归档过程中出现故障时应该采取的措施。

1REOPEN 指定时间后再次尝试归档

使用REOPEN=seconds(默认为300秒)属性,在指定时间重复尝试向归档目的地进行归档操作,如果该参数值设置为0,则一旦失败就不会再尝试重新连接并发送,直到下次REDO数据再被归档时会重新尝试。

例如,设置REOPEN100秒:

LOG_ARCHIVE_DEST_2='SERVICE=DavePrimary LGWR ASYNC REOPEN=100' 

2ALTERNATE 指定替补的归档目的地

ALTERNATE属性定义一个替补的归档目的地,所谓替补就是一旦主归档目的地因各种原因无法使用,则临时向ALTERNATE属性中指定的路径写。

例如:

LOG_ARCHIVE_DEST_1='LOCATION=/disk1 ALTERNATE=LOG_ARCHIVE_DEST_2' 

LOG_ARCHIVE_DEST_STATE_1=ENABLE  

LOG_ARCHIVE_DEST_2='LOCATION=/disk2' 

LOG_ARCHIVE_DEST_STATE_2=ALTERNATE 

上述参数设置归档路径为/disk1,当/disk1路径下无法成功归档时,自动尝试向/disk2路径下归档文件。

从功能上来看,REOPENALTERNATE是有一定重复的,不过需要注意一点,REOPEN属性比ALTERNATE属性的优先级要高,如果你指定REOPEN属性的值>0,则LGWR(或ARCn)进程会首先尝试向主归档目的地写入,直到达到最大重试次数,如果仍然写入失败,才会向ALTERNATE属性指定的路径写。

 

3MAX_FAILURE 控制失败尝试次数

REOPEN指定失败后重新尝试的时间周期,MAX_FAILURE则控制失败尝试的次数。

例如,设置LOG_ARCHIVE_DEST_1在本地归档文件时,如果遇到错误,则每隔100秒尝试一次,共尝试不超过3次,设置如下:

LOG_ARCHIVE_DEST_1='LOCATION=E:/ora10g/oradata/jsspdg/ REOPEN=100 MAX_FAILURE=3'  

来自 “ ITPUB博客 ” ,链接:http://blog.itpub.net/28258625/viewspace-1368541/,如需转载,请注明出处,否则将追究法律责任。

转载于:http://blog.itpub.net/28258625/viewspace-1368541/

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值