简单好用的物理DataGuard(DG)配置

 

Oracle Dataguard Real-time Apply

 

 TOC \o "1-3" \h \z \u 一、基本概念... PAGEREF _Toc219714405 \h 2

1.1  Oracle Dataguard 的三种保护模式... PAGEREF _Toc219714406 \h 2

1.1.1最大性能(maximize performance)模式... PAGEREF _Toc219714407 \h 2

1.1.2最大可用(maximize availability)模式... PAGEREF _Toc219714408 \h 2

1.1.3 最大保护(maximize protection)模式... PAGEREF _Toc219714409 \h 2

1.2  Oracle Dataguard两种日志传输方式... PAGEREF _Toc219714410 \h 2

1.2.1 Arch. PAGEREF _Toc219714411 \h 2

1.2.2 LGWR.. PAGEREF _Toc219714412 \h 2

二、操作步骤... PAGEREF _Toc219714413 \h 2

2.1设置主库为force logging. PAGEREF _Toc219714414 \h 3

2.1.2设置主库为归档模式:... PAGEREF _Toc219714415 \h 3

2.1.3设置dataguard的保护模式:... PAGEREF _Toc219714416 \h 3

2.2创建备库... PAGEREF _Toc219714417 \h 4

2.2.1 拷贝参数文件和密码文件... PAGEREF _Toc219714418 \h 4

2.2.2 拷贝数据文件... PAGEREF _Toc219714419 \h 4

2.2.3 拷贝控制文件... PAGEREF _Toc219714420 \h 4

2.2.4 Dataguard的启动... PAGEREF _Toc219714421 \h 4

3.设置自动传输归档... PAGEREF _Toc219714422 \h 5

3.1参数的修改... PAGEREF _Toc219714423 \h 6

3.1.1修改备库standby_archive_dest参数... PAGEREF _Toc219714424 \h 6

3.1.2修改主库上的log_archive_dest_2参数... PAGEREF _Toc219714425 \h 6

3.2.测试自动传输归档... PAGEREF _Toc219714426 \h 7

4.设置自动应该归档... PAGEREF _Toc219714427 \h 8

5.实时应用归档(Real-time Apply) PAGEREF _Toc219714428 \h 8

三、日常维护... PAGEREF _Toc219714429 \h 9

6.1.查看 standby的应用模式... PAGEREF _Toc219714430 \h 9

6.2.查看是否已经实时应用归档... PAGEREF _Toc219714431 \h 10

6.3.查看 standby redo logfile 状态... PAGEREF _Toc219714432 \h 10

6.4查看未归档的信息... PAGEREF _Toc219714433 \h 10

附:standby db的各种模式的启动与改变... PAGEREF _Toc219714434 \h 11


Oracle Dataguard Real-time Apply

一、基本概念

1.1  Oracle Dataguard 的三种保护模式

1.1.1最大性能(maximize performance)模式

最大性能(maximize performance)是data guard默认的保护模式。primay上的事务commit前不需要从standby上收到反馈信息,该模式在primary故障时可能丢失数据,但standby对primary的性能影响最小。

1.1.2最大可用(maximize availability)模式

在正常情况下,最大可用模式和最大保护模式一样;在standby不可用时,最大可用模式会自动降低成最大性能模式,所以standby故障不会导致primay不可用。只要至少有一个standby可用的情况下,即使primary down机,也能保证不丢失数据。

1.1.3 最大保护(maximize protection)模式

最大保护(maximize protection)是最高级别的保护模式。primay上的事务在commit前必须确认redo已经传递到至少一个standby上,如果所有standby不可用,则primary会挂起。该模式能保证零数据丢失。

1.2  Oracle Dataguard两种日志传输方式

1.2.1 Arch:传统的日志传送方式。现在只有在最大性能模式时才能采用。归档日志通过primary上的arch进程传送给standby的RFS进程。

1.2.2 LGWR:oracle9i开始可以使用LGWR即时将日志传送到standby,而不再需要等到归档操作时才传送,已减少可能的数据丢失。在三种保护模式下都可以使用该方式传送日志。使用LGWR方式传送,在standby库上必须先建立standby redo logfile。其中LGWR还分为LGWR ASYNC(异步)和LGWR SYNC(同步)两种。

 

二、操作步骤

 

说明:本次设计中采用的是最大性能(maximize performance)和异步 (LGWR ASYNC)传输模式。

首先要确保主库是归档、force logging模式。

2.1设置主库为force logging

检查主DB是否为force logging 模式,使用如下SQL:

select force_logging from v$database;如果结果为NO,则使用如下SQL改变为强制日志模式。

  SQL> alter database force logging;

此操作的目的用于忽略nologging选项不记录redo的请求。也就是说强制日志模式,就是所有的操作都会记入日志。

(注意:取消foece logging的SQL为:alter database no force logging;)

2.1.2设置主库为归档模式:

    SQL> archive log list

Database log mode              Archive Mode

Automatic archival             Enabled

Archive destination            /data/foxcom/arch

Oldest online log sequence     5330

Next log sequence to archive   5332

Current log sequence           5332

如果不是归档模式请使用以下命令

    SQL> shutdown immediate

    SQL> startup mount

    SQL> alter database archivelog;

然后再通过archive log list命令查看是否是归档模式。

2.1.3设置dataguard的保护模式:

默认是最大性能模式(maximize performance),我们在这里也是采用的最大性能模式,不需要做更改。

SELECT database_role, protection_mode, protection_level  FROM v$database;

SQL> select DATABASE_ROLE,PROTECTION_MODE,PROTECTION_LEVEL from v$database;

DATABASE_ROLE  PROTECTION_MODE     PROTECTION_LEVEL

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

PRIMARY      MAXIMUM PERFORMANCE  MAXIMUM PERFORMANCE

2.2创建备库

建立一个与主库相同的数据库。创建完之后shutdown备库

2.2.1 拷贝参数文件和密码文件

将主数据库的目录下 $ORACLE_HOME/dbs (Windows是在database下)下的参数文件initsid.ora,和密码文件 PWDsid.ora (本例是initfoxcom.ora, PWDfoxcom.ora)拷贝到standby数据库相同目录的文件夹下。密码文件要确保一至,在自动传输归档的时候要确保主从库的sys密码相同,否则不能自动传输归档。(这里与REMOTE_LOGIN_PASSWORDFILE参数有关)

2.2.2 拷贝数据文件

    使用 select file_name,tablespace_name from dba_data_files ;语句查看表空间对应的数据文件,记得在COPY过程中对照相应的数据文件不要漏掉。

在主DB上设置表空间为备份模式

select 'alter tablespace ' ||name||' BEGIN backup;' from v$tablespace;

   将得到的结果copy到Toad/或者Sqlplus中执行,使得所有的表空间处于备份模式,在执行过程中 temp表空间会出现错误,略过即可。

   将主库上的所有*.dbf文件copy到备库的相应目录下。(在这里你可以使用scp或者FTP等操作完成copy)

   copy结束后,将主库上的表空间设置为正常模式。命令就是将上述的begin backup  修改为end backup。

   2.2.3拷贝控制文件

     在主库上使用命令:alter database create standby controlfile as '/u01/standby.ctl'

     将生成的控制文件’standby.ctl’copy到备库上,并覆盖备库的所有控制文件(默认是3个,通常情况下,都设置4个,其中3个在默认在$ORACLE_BASE/oradata/,第四个在/data/$ORACLE_SID/下,这里的位置可以通过show parameter control_files来显示)。

      即拷贝standby.ctl文件到Stand By DB 控制文件目录 ,并且复制三份 ,分别起名为control01.ctl, control02.ctl , control03.ctl

   如果有多元化control文件请覆盖相应的control文件。

2.2.4 Dataguard的启动

SQL> startup nomount 
SQL> alter database mount standby database
SQL> recover standby database

SQL> recover standby database;

ORA-00279: change 1037178658 generated at 01/14/2009 09:53:58 needed for thread 1

ORA-00289: suggestion : /data/foxcom/arch/1_1813.arc

ORA-00280: change 1037178658 for thread 1 is in sequence #1813

 

Specify log: {=suggested | filename | AUTO | CANCEL}

记住1_1813.arc 然后从主库上将这个归档以及大于这个序号的归档copy到备库上。然后输入 auto

auto

这样的话就会应用归档。应用完之后会提示如下

ORA-00308: cannot open archived log '/data/foxcom/arch/1_1813.arc'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

 

ORA-00308: cannot open archived log '/data/foxcom/arch/1_1813.arc'

ORA-27037: unable to obtain file status

Linux Error: 2: No such file or directory

Additional information: 3

提示Linux Error: 2: No such file or directory

到此,一个手动应用归档的dataguard创建完成了,不过这样的dataguard管理起来比较麻烦,需要手动copy归档文件、创建数据文件、应用归档。下面配置一个完全自动管理的dataguard。

 

3.设置自动传输归档

 

由于备库的创建跟主库相同,所以好多参数就不需要修改了

*.log_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

*.db_file_name_convert='/u02/oradata/orcl/','/u03/oradata/orcl/'

。这里只需要修改几个参数(主库:log_archive_dest_2、 备库:standby_archive_dest、standby_file_management)就ok了。

其中:

STANDBY_ARCHIVE_DEST is used when logs are transmitted automatically from the primary database.  We use this parameter to determine where these logs should be placed.

LOG_ARCHIVE_DEST_1 is the location where we look for logfiles by default when recovering the standby database.  It is recommended to set the values of STANDBY_ARCHIVE_DEST and LOG_ARCHIVE_DEST to the same values in most cases.

3.1参数的修改

3.1.1修改备库standby_archive_dest参数

备库上的standby_archive_dest参数表示主库上的归档传到备库上的归档路径,默认值是?/dbs/arch,而通常情况下,归档路径我们都不是取的默认值,所以这个参数需要修改,要跟备库上的归档路径相同,查看备库上的归档路径也就是log_archive_dest_1的值。可以通过以下命令查看:
SQL> show parameter log_archive_dest_1
 
NAME               TYPE        VALUE
----------------------------- ----------- ----------------------------
log_archive_dest_1     string      LOCATION=/data/foxcom/arch
log_archive_dest_10    string
或者SQL> archive log list
Database log mode              Archive Mode
Automatic archival             Enabled
Archive destination            /data/foxcom/arch
Oldest online log sequence     1
Next log sequence to archive   3
Current log sequence           3
中的Archive destination 对应的值。
这样的话自动应用归档的时候,不需要人工作任何的干预了。
使用下面的命令进行备库上的standby_archive_dest参数

  ALTER SYSTEM SET standby_archive_dest='/data/foxcom/arch' scope=both;

修改成功之后可以通过show parameter standby_archive_dest查看
SQL> show parameter standby_archive_dest   
 
NAME                                 TYPE        VALUE
------------------------------------ ----------- ------------------------------
standby_archive_dest                 string      /data/foxcom/arch
SQL>
查看的信息如上所示表示执行成功。下面修改主库的log_archive_dest_2参数
 

3.1.2修改主库上的log_archive_dest_2参数

在主库上使用如下命令来修改参数值

ALTER SYSTEM SET log_archive_dest_2='SERVICE=standby' scope=both;

其中'SERVICE=standby'中的standby是PrimaryDB中的tnsnames.ora中设置的 standby的连接方式,如下所示:这里只是举个例子

STANDBY =

  (DESCRIPTION =

    (ADDRESS_LIST =

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

    )

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = foxcom)

    )

  )

在修改log_archive_dest_2之前,首先要确保 在主db上能够tnsping通standby。这样的话就需要在备库上启动监听,命令:lsnrctl start,从库上的监听启动之后在主db上用tnsping standby 查看是否ping的通,命令如下

FOXCOMDB.$tnsping standby

TNSPingUtility for Linux: Version9.2.0.7.0 - Production on 05-JAN-2009 10:22:09

Copyright (c) 1997 Oracle Corporation.  All rights reserved.

Used parameter files:

/u01/product/oracle/network/admin/sqlnet.ora

Used TNSNAMES adapter to resolve the alias

Attempting to contact (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = 10.194.18.18)(PORT = 1521))) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = foxcom)))

OK (0 msec)

出现以上信息说明能够tnsping通。

 

配置備庫參數:standby_file_management=auto,创建数据文件或者新的表空间的时候,如果数据库使用的是文件系统,那么不需要任何人为的干预。

 

3.2.测试自动传输归档

在主db上用使用以下sql 
SQL> alter system switch logfile;
 
System altered.
通过alter system switch logfile对主库进行强制归档,生产arch文件,然后在standbydb上查看归档是否自动传输过来,傳過來以後,standby上執行recover standby database;手動應用歸檔.(使用auto)
需要注意的是通过自动传输归档要确保两个dataguard的所有数据库的sys密码相同(与主库上的REMOTE_LOGIN_PASSWORDFILE参数有关,此参数通常情况下的设置是),否则无法传输归档。从db上的归档如果自动传输过来了,就配置ok了。如果没传输成功的话,请注意以下几点:
a.       网络是否畅通
b.      Sys密码文件是否相同
c.       tnsping是否能够ping的通(这包括主db上的tnsnames.ora中的链接方式是否正确以及从db上的监听是否start
按照以上的修改,如果一切正常的话,现在就可以实现自动传输归档了。若有问题请参照以上步骤是否设置的正确。
 

4.设置自动应用归档

在上述步骤中的StandbyDB是启动到mount状态(startup nomount  \  Alter database mount standby database)的,我们使用的是手动归档的方式来应用归档(alter database recover standby database)的
设置成自动应用归档的话需要使用以下sql
alter database recover managed standby database disconnect from session;
(查看歸檔狀態select recovery_mode from v$archive_dest_status where dest_id=2;)
 
 

5.实时应用归档(Real-time Apply)(oracle 9i無實時應用功能)

在基本概念中已经讲过通过LGWR可以实现即时传输归档,而不再需要等到归档操作时才传送,这样可最大话的减少数据的损失,要想实现实时应用归档(Real-time Apply),必须要采用LGWR的方式传输归档。在修改为LGWR传输日志方式的时候必须要在备库上添加standby redo logfile。下面我们来添加standby redo logfile。

5.1添加standby redo logfile  

在添加standby redo logfile之前首先要停止上述第4步设置的standby自动应用归档状态

SQL> alter database recover managed standby database cancel;

Database altered.

使用以上sql命令可以停止自动应用归档

如果没有停止自动恢复状态就添加standby logfile,会报错:

ORA-01156: recovery in progress may need access to files

然后添加standby redo logfile。

为备库添加standby logfile,这里要保证standby logfile与主库联机日志文件相同大小。

    添加standby logfile的规则是:

    备用日志最少应该比redo log 组多一个。推荐的standby logfile数目依赖于主库上的线程数。

官方公式(英文):

(maximum number of logfiles for each thread + 1) * maximum number of threads

(每线程日志文件最大数目 + 1 ) * 线程数

通过以下命令来添加standby logfile,这里我们添加了4个standby logfile。

注意: 在為standby添加standby_logfile時,首先使用如下SQL查詢standby_log的group#是否已經存在.

select * from v$standby_log;(或select group# from v$standby_log;),然後再執行如下命令添加

alter database add standby logfile

        group 4 ('/data/foxcom/standby_log4.log') size50m,

        group 5 ('/data/foxcom/standby_log5.log') size50m,

        group 6 ('/data/foxcom/standby_log6.log’) size50m,

        group 7 ('/data/foxcom/standby_log7.log') size50m;

同样删除Standby logfile 通过以下sql

alter database drop standby logfile group 8;

注意standby logfile的group名不能和primary的redo logfile group重复,因为我的primay已经有3组日志了,这里添加的三组standby logfile从group 4开始。同时standby redo logfile的大小和primary的redo logfile保持一致。

添加完standby logfile之后再在primary上修改为用LGWR传送日志

修改日志的传输方式,在主庫上使用以下命令

SQL> alter system set log_archive_dest_2='service=standby lgwr async noaffirm';

当然你也可以使用以下比较详细的参数,具体值的信息略。

alter system set log_archive_dest_2='SERVICE=standby lgwr async noaffirm VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE) DB_UNIQUE_NAME=foxcom

上面的设置完成之后使用

在備庫上設置如下命令:

Alter database recover managed standby database using current logfile disconnect from session; 这个命令启动实时应用归档。

下面通过这个sql来查看是否是Real-time Apply

SQL> select recovery_mode from v$archive_dest_status where dest_id=2;

RECOVERY_MODE

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

MANAGED REAL TIME APPLY

三、日常维护

Dataguard日常维护与点检

6.1.查看 standby的应用模式

SQL> select recovery_mode from v$archive_dest_status where dest_id=2;

RECOVERY_MODE

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

MANAGED REAL TIME APPLY

 

6.2.查看是否已经实时应用归档

SQL>

SELECT process,status,thread#,sequence#, block#, blocks

  FROM v$managed_standby;

 

PROCESS       BLOCK#     BLOCKS STATUS        SEQUENCE#

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

ARCH               1          2 CLOSING            5348

ARCH           83969        853 CLOSING            5358

MRP0            2541     102400 APPLYING_LOG       5359

RFS                0          0 IDLE                  0

RFS             2416        127 IDLE               5359

其中MRP 的SEQUENCE#与RFS的SEQUENCE# 相等,说明实时应用归档成功。

6.3.查看 standby redo logfile 状态

SQL> SELECT GROUP#,THREAD#,SEQUENCE#,ARCHIVED,STATUS FROM V$STANDBY_LOG;

 

    GROUP#    THREAD#  SEQUENCE# ARCHIVED STATUS

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

         4          1       5359 YES      ACTIVE

         5          1          0 NO       UNASSIGNED

         6          0          0 YES      UNASSIGNED

         7          0          0 YES      UNASSIGNED

6.4查看未归档的信息

SQL> select name,creator,sequence#,applied,completion_time from v$archived_log where applied='NO';

 

 

 

6.5查看未归档的信息

select dest_name,status,error from v$archive_dest;
附:standby db的各种模式的启动与改变

(1)启动到管理模式

SQL>shutdown immediate;   #关闭数据库

SQL>startup nomount;       #启动到nomount状态

SQL>alter database mount standby database;  #启动到mount状态

SQL>alter database recover managed standby database disconnect from session; #启动自动应用归档状态。

以上命令是启用自动应用归档,但是并没有启动实时应用归档,要启用使用应用归档必须使用以下sql实现

recover managed standby database using current logfile disconnect from session;

 

(2)启动到只读方式

SQL>shutdown immediate;

SQL>startup nomount;

SQL>alter database mount standby database;

SQL>alter database open read only;

(3)如果在管理恢复模式下到只读模式

SQL>recover managed standby database cancel;

alter database recover managed standby database finish;

SQL>alter database open read only;

 

(4)从只读方式到管理恢复方式

SQL>recover managed standby database disconnect from session;

如果执行这条命令出现如下错误,是由于standby 库在read only状态有session正在连接,请断开standby db的session 就ok了。

SQL> recover managed standby database disconnect from session;

ORA-01093: ALTER DATABASE CLOSE only permitted with no sessions connected

 

 

 

1.设置闪回恢复区

  SQL> alter system set db_recovery_file_dest_size=2G;

  系统已更改。

  SQL> alter system set db_recovery_file_dest='e:/oracle/back';

  系统已更改。

  2.取消备库的自动恢复状态

  SQL> alter database recover managed standby database cancel;

  数据库已更改。

  3.创建一个还原点

  SQL> create restore point restore_point_test guarantee flashback database;

  还原点已创建。

  4.在主库归档当前日志,确保前一步创建还原点的scn的归档日志已经传到备库

  SQL> alter system archive log current;

  系统已更改。

  5.将主库到备库的归档目的地的状态设置为defer

  SQL> alter system set log_archive_dest_state_2=defer;

  系统已更改。

  6.激活备库到read/write状态

  SQL> alter database activate standby database;

  数据库已更改。

  SQL> alter database open;

  数据库已更改。

 

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

转载于:http://blog.itpub.net/26524282/viewspace-1306443/

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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值