1、DATAGUARD原理

DATAGUARD是通过建立一个PRIMARY和STANDBY组来确立其参照关系。

STANDBY一旦创建,DATAGUARD就会通过将主数据库(PRIMARY)的REDO传递给STANDBY数据库,然后在STANDBY中应用REDO实现数据库的同步。

有两种类型的STANDBY:物理STANDBY和逻辑STANDBY

物理STANDBY提供与主数据库完全一样的拷贝(块到块),数据库SCHEMA,包括索引都是一样的。它是直接应用REDO实现同步的。

逻辑STANDBY则不是这样,在逻辑STANDBY中,逻辑信息是相同的,但物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转

换成SQL语句,然后在STANDBY上执行SQL语句。逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表。

DATAGUARD包含三个服务(日志传输、日志应用、角色转换)

日志传输服务控制REDO数据的传输(传输日志,实施数据库保护模式)--------------STANDBY上通过起用RFS进程接收REDO数据。

日志应用服务则一方面自动应用日志,另一方面自动检测STANDBY缺少的REDO,并从主数据库或其它STANDBY中自动查询出丢失的REDO。

DATAGUARD的几种保护模式:最大保护,最大可用,最大性能

最大保护是指除非REDO在至少一个STANDBY中可用,否则事务不能提交。如果在某个STANDBY中不可用,则主数据库的操作被停止。通常受制约比较多,在生产环境中不是很常用(性价比不好)。

最大可用是指如果STANDBY不可用,主数据库仍然可以处理事务,只是在问题被纠正后,STANDBY和主数据库进行再同步。这样的一个问题是:当再同步之前有FAILOVER时,有些数据可能会丢失。

最大性能是指主数据库的提交操作不等待STANDBY。PRIMARY和STANDBY松耦合,数据保护级别较低。

物理STANDBY可能的模式:只读模式(OPEN READONLY)和恢复模式(MANANGED

RECOVERY)

2、物理DATAGUARD实施简要过程

主数据库的准备工作:FORCE LOGGING,ENABLE ARCHIVING,一个本地归档目的地。

创建STANDBY数据库:

a.关闭主库,冷备份主库数据文件、日志文件和密码文件,然后启动主库,在主库上创建STANDBY的控制文件:alter

database create standby controlfile as '文件名'

b.准备参数文件,将参数文件、备份的主库文件和STANDBY控制文件拷贝到STANDBY系统。

需要更改的参数有:standby_archive_dest-----接收的归档日志存放处

db_file_name_convert和log_file_name_convert-----仅当主库和STANDBY库在同一系统下时用

log_archive_dest_1-----本地归档目的地

log_archive_dest_2='service=standby'-----归档到STANDBY的目的地

standby_file_management=auto

remote_archive_enable=true

fal_server

fal_client

instance_name-----当主库和STANDBY库在同一系统下时该参数用于区分主库

lock_name_space-----当主库和STANDBY库在同一系统下时指定STANDBY的实例名和INSTANCE_NAME相同

c.如果是WINDOWS系统,需要创建WINDOWS服务。

d.配置两台机器的tnsnames.ora,双方都能tnsping通

e.在主库和STANDBY库上配置监听

f.起用STANDBY系统上的死连接检测:sqlnet.ora中设置sqlnet.expire_time=2

g.在STANDBY上创建SPFILE

h.启动STANDBY:

startup nomount

alter database mount standby database

i.初始化日志应用服务

alter database recover managed standby database disconnect

from session;

3、DATAGUARD维护

a.日志传送服务

有些情况下,你可能需要在归档日志和应用日志之间有个时间间隔,此时可以通过在STANDBY上指定参数log_archive_dest_n中指定delay=minutes属性。

STANDBY上的日志应该与主库上的日志大小相同,另外STANDBY上的日志组应该比主库多,因为这样归档操作才有时间完成。也就是RFS(日志接

收)进程在使用STANDBY的日志前,不用等待该日志被归档。最简单判断日志组是否够的方法是查看警告日志和RFS的TRACE文件。

增加STANDBY日志文件的方法:

alter database 语句中使用add standby

logfile子句。相关视图v$standby_log,v$logfile

增加STANDBY日志组的方法:

alter database add standby logfile group 10 ('文件名1','文件名2')

size 100M对于多个

STANDBY共享归档日志文件目的地,有些情况下需要指定log_archive_dest_n参数的dependency属性,该属性的作用是说明该目的地依赖于父目的地的成功归档。

参数log_archive_dest_n还可以指定reopen、max_failures、sync、async属性。通过给该参数指定LGWR或者ARCH属性以选择是用LGWR还是ARCH进程传送日志。

用于日志接收的几个进程是:LGWR,ARCH,RFS,FAL。FAL进程用于解决日志缝。

设置数据保护模式的语句为:alter database set standby database to

maximun(protection|availability|performance)

b.日志应用服务

对于物理STANDBY,日志应用服务涉及到下面几个进程:RFS,ARC,MRP。MRP是管理恢复进程。

启动STANDBY的恢复操作的几个命令:alter database recover managed standby

database(启动前台会话);alter database recover managed standby database

disconnect from session(启动后台会话,也就是说会话可以继续干别的事情);alter database

recover managed standby database cancel(停止日志应用).

可以通过查询视图v$managed_standby查看日志应用情况。

c.数据文件管理

当主库新创建数据文件,可定义参数standby_file_management为auto,让standby也自动创建数据文件。如果主库和

standby的数据文件的目录结构不一样,可以设定db_file_name_convert将主库上的文件名转换成standby上的文件名。如果

standby_file_management设为auto,则不能在standby上重命名或创建数据文件、日志文件。

每分钟主库会询问standby是否有gap,该行为被称为heartbeat.

可以查询视图v$archived_gap,如果发现有GAP,则可以从主库上将日志文件拷贝到standby,然后将相关文件注册到standby,具体方法是:alter

database register logfile

'文件名'。当然也可以通过设置参数fal_server,fal_client,让日志应用服务自动处理gap问题。

对于STANDBY日志应用服务,下面几个视图有助于监控:v$managed_standby,v$archived_dest_status,v$archived_log,v$log_status,v$dataguard_status.

可以设置参数log_archive_trace对归档进行不同级别的跟踪。

d.角色转换

ORACLE支持两种形式的角色转换----switchover和failover

switchover包含两个步骤,首先主库被转换成STANDBY,然后STANDBY被转换成主库

switchover的准备工作:完成角色转换需要改变的参数(必须改变所有STANDBY上的

log_archive_dest_n和log_archive_dest_state_n);确保主库和所有STANDBY都有连接;确认没有用户连接

到数据库;对于RAC环境确保只有一个实例是活动状态;角色转换之前,主库实例应该是OPEN状态,而STANDBY实例是MOUNT状态,因为这样的

话,转换过程中STANDBY数据库也可以应用归档日志,如果STANDBY为READONLY,切换操作仍然可以进行,只是要花一点额外的时间;如果切

换操作包含逻辑STANDBY,那么,主库实例和STANDBY实例都必须为OPEN状态;将要转换成主库的STANDBY变成归档模式;取消在该

STANDBY库上的日志延迟。

switchover的步骤:在当前主库上,首先确认可以执行switchover操作(select

switchover_status from v$database,如果值为TO

STANDBY则可以切换,否则需要检查当前DATAGUARD配置是否运行正常),然后将主库切换为STANDBY(执行ALTER

DATABASE COMMIT TO SWITCHOVER TO PHYSICAL

STANDBY;这样原控制文件被备份并生成新的STANDBY控制文件,然后只要重新启动该库为STANDBY模式就可以了);以上操作完成后,在原

STANDBY数据库上,需要查询原主库的切换信息是否被目标STANDBY接收到(SELECT

SWITCHOVER_STATUS FROM V$DATABASE;如果结果为SWITCHOVER

PENDING说明STANDBY切换为PRIMARY是可行的,否则需要检查DATAGUARD的配置是否运行正常),然后执行ALTER

DATABASE COMMIT TO SWITCHOVER TO

PRIMARY;将STANDBY转换成PRIMARY,并重新启动该库。这里需要说明的是如果该库在线重做日志不存在,该切换语句会自动创建它们,然而

这样一来,会花费很长的时间。因此ORACLE建议手工增加在线重做日志。手工增加在线重做日志的方法有两种:第一种是将原主库的日志拷贝到原

STANDBY,并且定义参数log_file_name_convert,让它将standby和新的日志联系起来。第二种方法是DROP所有目标

STANDBY上存在的日志,并且用命令ALTER

DATABASE ADD STANDBY

LOGFILE创建新的日志。switchover的最后一步是将新生成的STANDBY转换成恢复模式,并将新PRIMARY进行一次归档操作。

failover的准备工作:完成角色转换需要改变的参数(必须改变所有STANDBY上的log_archive_dest_n和

log_archive_dest_state_n);确保主库和所有STANDBY都有连接;对于RAC环境确保只有一个实例是活动状态;如果要进行

failover操作的STANDBY当前运行于最大保护模式,则应该将它转换成最大性能模式(通过命令ALTER

DATABASE SET STANDBY DATABASE TO MAXIMIZE PERFORMANCE;)

failover的步骤:首先发现并解决日志GAP的问题,然后从其它库中将日志号高于本库的日志拷贝过来并应用这些日志,如果你没有手工注册新的日志,那么可以执行下面的语句ALTER

DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;否则需要执行的语句为ALTER

DATABASE RECOVER MANAGED STANDBY DATABASE FINISH SKIP STANDBY

LOGFILE;接下来执行ALTER DATABASE COMMIT TO SWITCHOVER TO

PRIMARY;完成切换并重新启动新的主库,可能的话对主库进行一次备份。

e.启动STANDBY

STARTUP NOMOUNT;

ALTER DATABASE MOUNT STANDBY DATABASE;

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT

FROM SESSION;

f.关闭STANDBY

首先确认是否处于恢复状态:SELECT PROCESS, STATUS FROM

V$MANAGED_STANDBY;

取消恢复操作:ALTER DATABASE RECOVER MANAGED STANDBY DATABASE

CANCEL;

SHUTDOWN IMMEDIATE;

g.让standby运行于只读访问模式

启动STANDBY为只读模式:

STARTUP NOMOUNT;

ALTER DATABASE MOUNT STANDBY DATABASE;

ALTER DATABASE OPEN READ ONLY;

将恢复模式的STANDBY转换成read only模式:

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

ALTER DATABASE OPEN READ ONLY;

h.让STANDBY从READ ONLY转变成恢复模式

ALTER DATABASE RECOVER MANAGED STANDBY DATABASE DISCONNECT

FROM SESSION;

i.让为只读模式的STANDBY执行排序操作应该注意的问题:

排序操作不能使用非临时表空间,临时表空间必须是本地管理的,并且只包含临时文件

如果在创建STANDBY时主库没有临时表空间,则需要在主库上创建临时表空间,并执行ALTER SYSTEM SWITCH

LOGFILE;将redo传给STANDBY。如果要给STANDBY的临时表空间增加临时文件,需要先将STANDBY转换成READ

ONLY模式,并执行命令ALTER TABLESPACE temp1 ADD TEMPFILE

'/disk1/oracle/dbs/s_temp1.dbf' SIZE 10M REUSE;增加临时文件。

j.可以通过对STANDBY的备份实现对数据库的备份。

k.主库上的操作和STANDBY的应对:

如果你执行ALTER DATABASE CLEAR UNARCHIVED

LOGFILE或者打开数据库时使用RESETLOGS,那么必须重新创建STANDBY。

如果你在主库上执行ALTER DATABASE

ENABLE|DISABLE,如果你改变表空间的状态,如果你设置了参数STANDBY_FILE_MANAGEMENT为AUTO并创建表空间或者增加数据文件,则不需要对STANDBY进行操作。

如果你在主库上删除了表空间或者数据文件,你需要在STANDBY上等日志应用后在操作系统上删除相关数据文件。

如果你在主库上重命名了数据文件,你也要在STANDBY上重命名(因为是对控制文件的改变,所以没有日志传过去,因此两边都要进行相同的操作)

如果你在主库上改变了控制文件,你就要重新创建STANDBY控制文件或者重建STANDBY数据库。

如果你在主库上增加或删除日志文件,你也需要在STANDBY上进行同步变化。

具体方法为:先取消恢复,如果STANDBY_FILE_MANAGEMENT为AUTO,则改为MANUAL,然后使用命令ALTER

DATABASE ADD STANDBY LOGFILE 'prmy3.log' SIZE 100K;增加日志文件或者用命令ALTER

DATABASE DROP STANDBY LOGFILE

'prmy3.log'DROP掉日志文件,最后恢复参数STANDBY_FILE_MANAGEMENT的值。

如果你在主库上进行了nologging|unrecoverable等操作,则应该将包含这些变化的表空间拷贝到STANDBY。

如果你改变了主库的参数文件,那么你也应该改变STANDBY的参数文件。

l.监控进程

SELECT PROCESS, CLIENT_PROCESS, SEQUENCE#, STATUS FROM

V$MANAGED_STANDBY;

m.监控恢复操作的进程

SELECT ARCHIVED_THREAD#, ARCHIVED_SEQ#, APPLIED_THREAD#,

APPLIED_SEQ# FROM V$ARCHIVE_DEST_STATUS;

dategurd oracle_Oracle Dataguard 基本原理相关推荐

  1. dategurd oracle_Oracle之11g DataGuard

    1.什么是DataGuard DataGuard是Oracle推出的一项专门针对oracle数据库的高可用技术,在8i之前被称之为Standby Dtabase,从9i开始正式更名为DataGuard ...

  2. ORACLE 11G DATA GUARD配置之Dataguard基本原理

    1.DATAGUARD原理 DATAGUARD是通过建立一个PRIMARY和STANDBY组来确立其参照关系. STANDBY一旦创建,DATAGUARD就会通过将主数据库(PRIMARY)的REDO ...

  3. dategurd oracle_Oracle 时间和日期处理

    -- Oracle时间 SELECT SYSDATE FROM dual; -- 系统时间 SELECT SYSTIMESTAMP FROM dual; -- 当前系统时间戳 SELECT CURRE ...

  4. Golden Gate 与 Oracle DataGuard的区别

    Golden Gate 与 Oracle DataGuard的区别 项           目 GoldenGate TDM Oracle DataGuard(物理) Oracle DataGuard ...

  5. ORACLE 11G DATA GUARD配置之Dataguard简介

    Oracle DataGuard是Oracle自带的数据同步功能,基本原理是将日志文件从原数据库传输到目标数据库,然后在目标数据库上应用这些日志文件,从而使目标数据库与源数据库保持同步,是一种数据库级 ...

  6. Oracle Dataguard 介绍

    Oracle DataGuard介绍 一. DataGuard的基本原理 当某次事务处理对生产数据库中的数据作出更改时,Oracle数据库将在一个联机重做日志文件中记录此次更改.在DataGuard中 ...

  7. Computer OS系统基本原理

    Computer OS系统基本原理 第一章 绪论(考概念) 什么是OS? o 操作系统是一组控制和管理计算机软硬件资源.合理地对各类作业进行调度以及方便用户使用的程序集合. o 操作系统是位于硬件层( ...

  8. XGBoost4J-Spark基本原理

    XGBoost4J-Spark基本原理 XGBoost4J-Spark是一个项目,旨在通过使XGBoost适应Apache Spark的MLLIB框架,无缝集成XGBoost和Apache Spark ...

  9. Docker基本原理概述

    Docker基本原理概述 Docker是一个用于开发,交付和运行应用程序的开放平台.Docker能够将应用程序与基础架构分开,从而可以快速交付软件.借助Docker,可以以与管理应用程序相同的方式来管 ...

  10. 多机多卡训练基本原理

    多机多卡训练基本原理 在工业实践中,许多较复杂的任务需要使用更强大的模型.强大模型加上海量的训练数据,经常导致模型训练耗时严重.比如在计算机视觉分类任务中,训练一个在ImageNet数据集上精度表现良 ...

最新文章

  1. 确认和回调_【短线回调,确认突破点】
  2. 个人知识管理的29个原则--摘录
  3. 直接插入排序、希尔排序
  4. 芯片技术从未止步 助力AI安防迈向新阶段
  5. ERROR 2003 (HY000): Can‘t connect to MySQL server on ‘localhost‘ (10061)的解决办法
  6. JavaScript学习笔记(备忘录)
  7. leetcode47. 全排列 II(回溯)
  8. linux进程管理之mm_struct,【转】Linux进程管理之SMP负载平衡(续二)
  9. 一台电脑安装多个Redis服务
  10. oracle 查询创建了哪些存储过程
  11. 基本的 Python socket 模块
  12. 从面试题中看Java的Reference(引用)
  13. logback打印出mybatis sql日志(转载)
  14. UG/NX 装配克隆
  15. 牛客每日练习----あなたの蛙が帰っています,おみやげをまらいました,写真がとどいています
  16. flutter基础 dart语言学习笔记
  17. python静态属性和静态方法_Python之路系列:面向对象初级:静态属性、静态方法、类方法...
  18. python 测试框架nose (nosetests)
  19. 第四次作业:“师路南通网站”用户体验分析
  20. curl: (60) Peer‘s Certificate issuer is not recognized

热门文章

  1. python 正则表达式1
  2. mfc c++string、char与char*之间的关系
  3. MySQL取每组的前N条记录
  4. Java并发编程基础-锁-synchronized状态变换
  5. python简单查询用户
  6. 搭建Web和FTP站点
  7. 【Linux】目录中 / 和 ~ 的区别
  8. as没有add as library选项
  9. gradle mysql方言_基于Spring Boot技术栈的博客系统企业级实战教程分享
  10. 堆载预压弹性变形怎样计算公式_真空预压排水固结法原理特点与优缺点