DataGuard小结--1

来源:互联网 发布:2017淘宝骗保师 编辑:程序博客网 时间:2024/06/03 21:42

Dataguard在Oracle的数据库中作为灾备和集群都有很多的应用,本人在数据库中也接触到了DG,下面总结下在本次搭建中过程和经验,网看到的大神们发现错误的地方,猛烈拍砖!

本次环境:

Red Hat Enterprise Linux Server release 6.4 (Santiago)

SQL*Plus: Release 11.2.0.4.0 Production

一、Dataguard 的原理


简单描述:

1)primary端生成日志

2)通过网络传输日志

3)在standby端重演日志

DG的三种模式:最大性能,最大保护,最大可用—其中最大保护基本不会使用

三种模式的区别

模式的不同在配置上的区别主要是log_archive_dest_2的配置不同,默认是archn

Log_archive_dest_2=(service=primary)最大性能

Log_archive_dest_2=(service=primary LGWR SYNC AFFIRM) 最大保护

Log_archive_dest_2=(service=primary LGWR SYNC AFFIRM) 最大可用

DG模式

抽取日志文件

抽取日志进程

优点

缺点

最大可用

Redo log

LGWR、SYNC、AFFIRM

尽可能的保证数据不丢失,当满足在线日志写入到standby redo的时候才会commit,但是若commit失败,也不会关闭,而是自动转化为最大性能模式,恢复后,自动转换为最大可用模式

不能保证两端数据库的一致性,

最大性能

Archivelog或redo log

LGWR ASYNC或者ARCH

基本不对primary端产生影响,事务写入自己的redo就可以了commit;redo可以一步传输到standby端

缺省模式

最大保护

Redo log

LGWR、SYNC、AFFIRM

数据不丢失,一旦数据没有写入standby database,则primary database自动关闭

Primary database经常性的关闭,影响生产库的正常运转

 

详细过程根据不同的模式选择的进程不同,不再一一赘述。

二、DG的配置

打开源端和备端的alert日志

1、DG配置的要求

1)、OS平台一直,小版本可以不一致,建议一直

cat/etc/issue

2)、确定交易量估算带宽

在高峰期跑AWR,查看每秒redo大小,以此进行估算

3)、主库必须为归档模式

selectlog_mode from v$database;

4)、主库强制写日志

selectforce_logging from v$database;

alterdatabase force logging;

5)、保证两台主机之间网络的连通性

互ping

2、配置DG

原则:减少生产主机的停机时间,能先在备机上完成的现在备机上做

1)、在备机上安装数据库软件

2)、备份主机spfile文件

create spfile='/tmp/primary.ora' from pfile;

尽管没有必要创建备用重做日志,这还是一个很好的做法。备用重做日志可使主数据库中发生的更改几乎实时地反应在备用数据库中,这一概念称为实时应用 (RTA)。因此,此处我们将在主数据库中创建一个备用重做日志(注意在主数据库中创建备用重做日志。RMAN 将在备用数据库中创建它们):

SQL> alter database add standby redo logfile group 4 (‘/oradata/sby_redo01.rdo') size 50M;
SQL> alter database add standby redo logfile group 5 (‘/oradata/sby_redo02.rdo') size 50M;
SQL> alter database add standby redo logfile group 6 (‘/oradata/sby_redo03.rdo') size 50M;
SQL> alter database add standby redo logfile group 7 (‘/oradata/sby_redo04.rdo') size 50M;

这将创建 4 个备用重做日志组。

3)、生成备机controlfile

alter database create standby controlfile as '/tmp/standby_ctl';

4)、将参数文件和控制文件scp到standby端

scp /tmp/standby_ctl 10.1.25.2:/u01/oradata

scp /tmp/primary.ora 10.1.25.2:/u01/oradata/standby.ora

5)、修改standby端参数文件

A.修改参数文件中控制文件的位置

B.修改数据文件和日志文件参数(原路径,新路径)

*.db_file_convert=’/oradata/’,’/u01/oradata’

*.log_file_convert=’/ oradata/’,’/u01/oradata’

如果是多路径,则’/oradata/’,’/u01/oradata’  ’/oradata1/’,’/u01/oradata1’中间使用空格分开,

‘/dev/ryb*’,‘/dev/rstby*’     ---系统可以自动对应

C.增加dg参数

注:fal=fetch archive log

注:client端取抓取server端的日志,这两个参数主要用于切换时使用

*.fal_server=primary端的tnsname.ora    ----指定standby端取那个地址取归档日志

*.fal_client=standby端的tnsname.ora    ----指定standby端把归档日志存放到什么位置

*.standby_file_management=auto

============*.standby_archive_dest=’location=/arch2’  ----在11g中已经废弃!

*.log_archive_dest_1=’location=/arch1’    ---指定standby端归档日志存放到什么位置

*.log_archive_dest_2=’service=standby’

standby is a Net serviceName in the tnsnames.ora;

D、

6)、修改primary端参数

Primary此时处于open状态

SQL> alter system set log_archive_dest_2=’service=primary’scope=spfile;

Primary is a Net serviceName in the tnsnames.ora;

SQL> alter system set fal_server=standbyscope=both;

SQL> alter system set fal_client=primaryscope=both;

SQL> alter system set db_file_convert=’/u01/oradta’,’/oradata’scope=both;

SQL> alter system set log_file_convert=’/u01/oradta’,’/oradata’scope=both;

7)、创建tnsname.ora

primary =

(DESCRIPTION =

  (ADDRESS = (PROTOCOL =tcp)(HOST = 10.10.55.133)(PORT = 1521))

  (CONNECT_DATA =

    (SERVER = DEDICATED)

    (SERVICE_NAME = ytcs)

  )

)

standby =

(DESCRIPTION =

  (ADDRESS = (PROTOCOL =tcp)(HOST = 10.10.55.133)(PORT = 1521))

  (CONNECT_DATA =

    (SERVER = DEDICATED)

    (SERVICE_NAME = ytcs)

  )

)

确定tnsping网络是好的;

启动备端的监听:lsnrctl start

8)、备份primary端数据库

RMAN> backup database format=’/u01/backup/full_%T_%U’;

RMAN>exit

9)、将备份信息scp到standby端

scp /u01/backup/full* 10.1.25.2:/u01/oradata/

10)、在standby端恢复数据库

SQL>startup nomount pfile=’ /u01/oradata/standby.ora’;

RMAN>resotre controlfile from ‘’;

RMAN>alter database mount standby database;

RMAN>catalog start with ‘/u01/oradata/’;

RMAN>crosscheck backup;

RMAN>run{

set newname for datafile 1 to ‘/u01/oradata/system01.dbf’;

set newname for datafile 2 to ‘/u01/oradata/sysaux01.dbf’;

set newname for datafile 3 to ‘/u01/oradata/undotbs01.dbf’;

set newname for datafile 4 to ‘/u01/oradata/users01.dbf’;

restore database;

switch datafile all;

}

11)、在standby端启动DG

SQL> alter database recover managed standby databasedisconnect from session;

12)、检查DG在源端和目标端的归档日志的使用

SQL>archive log list;

可以进行测试:

在源端创建表,在备端查看测试表是否存在。

三、DG打开

SQL> alter database recover managed standby database cancel;

SQL> alter database open read only;

SQL> alter database recover managed standby databasedisconnect from session;

许久以来,反对使用物理备用数据库构建Data Guard 环境的传统因素之一是备用数据库的被动性。在 Oracle 数据库 10g 和以前的版本中,您可以打开物理备用数据库进行只读活动(卸去一些报告工作负载),但必须在停止恢复进程后。在这些版本中,如果 Data Guard 是您的 DR 解决方案的一部分,因为怕滞后,您不能承担长时暂停恢复进程的代价,所以物理备用数据库对于只读活动用处全无。

使用 Oracle 数据库 11g,情况将有所不同:您可以通过只读模式打开物理备用数据库,并重新启动恢复进程。这意味着您可以继续与主数据库保持同步,同时能使用备用数据库进行报告。(在以前的版本中,您也可从备用数据库中获取备份。)让我们看一下它的工作原理。

四、DG切换

1、检查是否满足切换条件

1)、检查主备两端的sequence是否一致;

select max(sequence#) from v$archived_log where name is notnull;

2)、检查主库

select name,database_role,protection_mode,switchover_status fromv$database;

switchover_status:必须为to_standby才可以进行转换;

3)、检查备库

select name,database_role,protection_mode,switchover_status fromv$database;

switchover_status:NOT ALLOWED状态说明正常,因为备库不允许主动切为备库

4)、检查主库上的会话

若存在会话,不允许切换

select username,sid from v$session where username is not null;

5)、将主库切换为备库

SQL> alter database commit to switchover to physical standby;

若此时存在会话,可以使用以下语句:

SQL> alter database commit to switchover to physical standbywithsession shutdown;

6)、将主库重启到mount状态

SQL> shutdown immediate

SQL> startup mount;

SQL> select switchover_status from v$database;

显示:TO PRIMARY,此时两个库状态都是备库

7)、再次查询备库的状态

SQL> select switchover_status from v$database;

显示:to_primary,可以进行切换

8)、切换备库到主库

SQL> alter database commit to switchover to primary;

SQL> alter database commit to switchover to primary  withsession shutdown;

9)、将现在的主库启动到open状态

SQL> select status from v$instance;

SQL> alter database open;

SQL> select switchover_status from v$database;

至此,主库启动完成;

若物理备库(bj)在最近一次启动时是只读模式,则先将数据库正常关闭再起库。

SQL> SHUTDOWNIMMEDIATE;

SQL> STARTUP;

10)、将现在的备库重新开启日志应用

SQL> alter database recover managed standby databasedisconnect from session;

11)、在现在的主库上切换日志

SQL> alter system switch logfile;

12)、在主备库上查看归档日志信息

SQL> archive log list;

SQL> select max(sequence#) from v$archived_log where name isnot null;

0 0
原创粉丝点击