Oracle Data Guard

时间:2022-03-23 10:32:44

DG 是 Oracle Data Guard 的简称。也就是Oracle11g的 数据卫士。

由于在工作中 Oracle和 SQL SERVER2008 同时都需要维护管理。给我的感觉这里的 DG 其实和 Sql Server 2008的镜像实现的功能是一样的(当然更强大一些)。DG 中的物理备用库 尤其和 Sql Server 2008 的镜像实现的功能是一样的。但也有不同点:DG中的物理备用库可以在特定条件下 以只读或读写方式打开。而镜像则不可以(2012版本虽然可以读,但还是不能打开),当然 Sql Server 2008 的日志传送功能实现的 热备份库,是可以只读的。DG中的逻辑备用库既可以读又可以写(如果写的话需要闪回数据库后才能继续和主库保持同步)基于逻辑备用库的结构可以和

主库的不一样,这点Sql Server 2008的复制订阅方式实现的从库有些类似。具体有哪些不同点,这里就不累述了,大家自己看书自通吧。

DG使用3中服务来管理 REDO数据的传送、REDO数据的应用、更改数据库角色。

1、REDO传输服务:控制从主生产库将REDO数据自动传输到一个或多个归档目的地。

2、日志应用服务:即在备用库上应用REDO数据,保持与主库事务同步。可以从归档redo日志文件和备用redo日志文件中应用。

3、角色转换服务:使用切换或故障转移操作,把备用库更改为主生产库。有两种切换方式:

a、switchover (无数据丢失)      b、faileover (会有数据丢失情况)

DG的3中保护模式:

1、最大保护模式

该模式下确保了一个全面的零数据丢失灾难恢复解决方案。Redo记录由日志LGWR进程从主库同步

传输到备用数据库,并直到确认事务数据至少在一个备用服务器的磁盘上可用时,才在主库上提

交事务。如果最后一个备用库不可用时,主库将停止处理服务并紧接着挂起。

2、最高性能模式

该模式下当主库处理事务时,Redo数据由日志LGWR进程异步方式传输到备用数据库中。但是主库

的事务提交不用等待备用库确认已接收才提交操作。该模式也是默认的保护模式

3、最高可用模式

该模式和最大保护模式差不多,但是如果最后一个备用库不可用时,主库事务提交不会停止。而是

会自动转换到最高性能模式。等备库恢复后,自动再转换回最高可用模式。

DG实现的进程结构为:

主库通过LGWR进程将REDO数据传输到备用库的 远程文件服务器进程RFS中,同时还写入本地在线redo日志文件;

本地在线日志文件在满足某个条件时将在线日志利用 ARCH归档进程写本地归档日志文件中;远程文件服务器

RFS进程从主库接收到REDO记录后,写入备用服务的备用REDO日志文件中,同样在满足某个条件的情况下,在

用ARCH归档进程写入归档REDO日志文件;备用库利用管理恢复进程MRP将REDO记录应用到物理备用数据库中;如果

是逻辑备用库的话则利用逻辑备用进程LSP将经过SQL转换的REDO记录应用到逻辑备用库中。

一、Data Guard配置(Data GuardConfigurations)

Data Guard是一个集合,由一个primary 数据库(生产数据库)及一个或多个standby数据库(oracle10g 最多9个 oracle11g 最多30 个)组成。

组成Data Guard的数据库通过Oracle Net 连接,并且有可能分布于不同地域。只要各库之间可以相互通信,它们的物理位置并没有什么限制.

即可以通过命令行方式管理primary数据库或standby 数据库,也可以通过Data Guard broker 提供的专用.命令行界面(DGMGRL),或者通过OEM图形化界面管理。

1.Primary数据库

Data Guard包含一个primary 数据库即被大部分应用访问的生产数据库,该库即可以是单实例数据库,也可以是RAC。

2.Standby数据库

Standby 数据库是primary 数据库的复制(事务上一致)。在同一个DataGuard 中可以最多创建30 个standby数据库。一旦创建完成,Data Guard 通过应用primary 数据库的redo 自动维护每一个standby 数据库。Standby数据库同样即可以是单实例数据库,也可以是RAC 结构。standby 数据库,通常分三类:逻辑standby 和物理standby及快照standby

逻辑Standby

通过接收primary数据库的redo log并转换成sql 语句,然后在standby 数据库上执行SQL 语句(SQLApply)实现同步。是逻辑上与primary 数据库相同,结构可以不一致。逻辑standby 可以以read-write 模式打开,可以在任何时候访问逻辑standby数据库。逻辑standby可以通过在standby 数据库创建额外的索引、物化视图等提高查询性能并满足特定业务需要。又可以创建新的schema然后在这些schema 中执行ddl 或者dml 操作等。

物理Standby

通过接收并应用primary数据库的redo log 以介质恢复的方式(Redo Apply)实现同步。即块对块复制。物理standby 与primary 数据库完全一模一样。Oracle10g的DG中物理standby数据库在应用日志的时候是不可以打开的。Oracle11g开始支持以只读形式打开时接收并且应用Redo数据 。被称为 Active Data Guard。如果数据库指定了flashback area 的话,也可以被临时性的置为read-write 模式。操作完之后将数据库闪回到操作前的状态(闪回之后,Data Guard 会自动同步,不需要重建standby)。

快照Standby

快照Standby数据库是Oracle11g的全新特性。通过从主数据库接收Redo数据,只接收而不应用Redo数据。直到快照Standby数据库转换为物理Standby数据库之后,首先抛弃任何对快照Standby数据库的更新,然后再做Redo数据应用。

二、Data Guard服务(Data Guard Services)

1、REDO传输服务(Redo TransportServices)

控制redo 数据的传输到一个或多个归档目的地。

2、Log应用服务(Log Apply Services)

应用redo 数据到standby 数据库,以保持与primary 数据库的事务一致。redo 数据即可以从standby 数据库的归档文件读取,也可直接应用standby redo log 文件(如果实时应用打开了的话)。

3、角色转换服务(Role Transitions)

Dg 中只有两种角色:primary 和standby。所谓角色转换就是让数据库在这两个角色中切换。切换也分两种:switchover和failover

switchover:转换primary数据库与standby 数据库。switchover 可以确保不会丢失数据。

failover:当primary数据库出现故障并且不能被及时恢复时,会调用failover 将一个standby 数据库转换为新的primary 数据库。在最大保护模式或最高可用性模式下,failover 可以保证不会丢失数据。

三、Data Guard保护模式(Data Guard Protection Modes)

1、最大保护(Maximum protection)

这种模式能够确保绝无数据丢失。要实现这一步当然是有代价的,它要求所有的事务在提交前其redo不仅被写入到本地的online redo log,还要同时提交到standby 数据库的standby redo log,并确认redo 数据至少在一个standby 数据库可用(如果有多个的话),然后才会在primary数据库上提交。如果出现了什么故障导致standby数据库不可用的话,primary 数据库会被shutdown。

2、最高性能(Maximum performance)

这种模式提供在不影响primary数据库性能前提下*别的数据保护策略。事务可以随时提交,当前primary 数据库的redo 数据也需要至少写入一个standby 数据库,该模式是异步完成redo log传输的。

3、最高可用性(Maximum availability)

这种模式提供在不影响primary数据库可用前提下*别的数据保护策略。其实现方式与最大保护模式类似,也是要求所有事务在提交前必须保障redo 数据至少在一个standby 数据库可用,不过与之不同的是,如果出现故障导入无法同时写入standby 数据库redo log,primary数据库并不会shutdown,而是自动转为最高性能模式,等standby数据库恢复正常之后,它又会再自动转换成最高可用性模式。

最大保护及最高可用性需要至少一个standby数据库redo 数据被同步写入。三种模式都需要指定LOG_ARCHIVE_DEST_n 初始化参数。

四、Data Guard操作界面(方式)

oracle 提供了多种方式搭建、操作、管理、维护Data Guard配置,

比如:

1、OEM(Oracle Enterprise Manager)

Orcale EM 提供了一个窗口化的管理方式,基本上只需要点点鼠标就能完全dg的配置管理维护等操作

2、Sqlplus命令行方式

命令行方式的管理,本系列文章中主要采用的方式。

3、DGMGRL(Data Guard broker命令行方式)

就是Data Guard Broker,不过是命令行方式的操作。

五、Data Guard的软硬件需求

1、硬件及操作系统需求

同一个Data Gurid配置中的所有oracle 数据库必须运行于相同的平台。比如inter 架构下的32 位linux 系统可以与inter架构下的32 位linux 系统组成一组Data Guard。另外,如果服务器都运行于32 位的话,64 位HP-UX 也可以与32 位HP-UX 组成一组Data Guard。

不同服务器的硬件配置可以不同,但是必须确保standby 数据库服务器有足够的磁盘空间用来接收及应用redo 数据。primary 数据库和standby 数据库的操作系统必须一致,不过操作系统版本可以略有差异,primary 数据库和standby 数据库的目录路径也可以不同。

2、软件需求

Data Guard是Oracle 企业版的一个特性。标准版是不支持地。

同一个Data Guard配置中所有数据库初始化参数:COMPATIBLE 的值必须相同。

Primary 数据库必须运行于归档模式,并且务必确保在primary 数据库上打开FORCE LOGGING,以避免用户通过nologging 等方式避免写redo 造成对应的操作无法传输到standby 数据库。

Primary 和standby 数据库均可应用于单实例或RAC 架构下,并且同一个data guard 配置可以混合使用逻辑standby 和物理standby。

Primary 和standby 数据库可以在同一台服务器,但需要注意各自的数据文件存放目录,避免重写或覆盖。

使用具有sysdba系统权限的用户管理primary 和standby 数据库。

建议数据库必须采用相同的存储架构。比如存储采用ASM/OMF的话,那不分primarty 或是standby也都需要采用ASM/OMF。另外还有很重要一点,注意各服务器的时间设置,不要因为时区/时间设置的不一置造成同步上的。

六、REDO LOGS(OnlineRedo Logs,ArchivedRedo Logs, StandbyRedo Logs)

REDO:中文直译是重做,首先重做是oracle对操作的处理机制,我们操作数据(增册改)并非直接反映到数据文件,而是先被记录(就是online redo log ),等时机合适的时候,再由相应的进程操作提交到数据文件。

把所有的online redo logs都保存下来,就相当于拥有了数据库做过的所有操作,

这就是archived redo logs,简称archive log 即归档日志。

由于standby 数据库的数据通常都来自于primary 数据库,是通过RFS 进程接收primary 数据库的redo,保存在本地,就是Standby redo logs,然后standby 数据库的相关进程读取接收到的redo 数据,再将其写入standby 数据库。保存之后数据通过两种方式,物理standby 通过redo 应用,逻辑standby通过sql 应用,不管是哪种应用,都是应用redo log 中的内容(默认情况下应用archived redo logs,如果打开了实时应用,则直接从standby redo logs 中读取)。对于primary 数据库和逻辑standby 数据库,online redo log 文件肯定是必须的,而对于物理standby 是否还需要redo log 呢?因为物理standby 通常不会有写操作,所以物理standby 应该不会生成有redo 数据。为保证数据库的事务一致性必然需要有归档,也就是说不管primary 或standby 都必须运行于归档模式。

standby redo logs是standby 数据库特有的文件(如果配置了的话),其存储特性,配置特

性等等都与online redo logs非常类似,不过它存储的是接收自primary 数据库的redo 数据,而online redo logs中记录的是本机中的操作记录。

物理standby创建步骤

一、准备工作

不管物理standby还是逻辑standby,其初始创建都是要依赖primary 数据库。逻辑standby是基于物理 standby的,也就是说要建逻辑standby必须先搭建物理standby.

1、打开Forced Logging模式

SQL> alter database force logging;

关于FORCELOGGING

有一些DDL 语句可以通过指定NOLOGGING 子句的方式避免写redo log(目的是提高速度,某些时候确实有效),指定数据库为FORCE LOGGING 模式后,数据库将会记录除临时表空间或临时回滚段外所有的操作而忽略类似NOLOGGING 之类的指定参数。如果在执行force logging 时有nologging之类的语句在执行,则force logging 会等待直到这类语句全部执行。FORCE LOGGING 是做为固定参数保存在控制文件中,因此其不受重启之类操作的影响(只执行一次即可),如果想取消,可以通过alter database noforce logging 语句关闭强制记录。

2、确保数据库处于归档模式

SQL> archive log list;

如果当前primary数据库并未处于归档模式,可通过下列命令将数据库置为归档模式:

SQL> STARTUP MOUNT;

SQL> ALTER DATABASE ARCHIVELOG;

SQL> ALTER DATABASE OPEN;

3、创建密码文件或设置SSL(大多公司企业用密码文件,简单又方便)

同一个Data Guard配置中所有数据库必须都拥有独立的密码文件,并且必须保证同一个Data Guard 配置中所有数据库服务器的SYS 用户拥有相同密码以保证redo 数据的顺利传输,因为redo传输服务通过认证的网络会话来传输redo 数据,而会话使用包含在密码文件中的SYS 用户密码来认证。

4、配置Standby Redo Log

对于最大保护和最高可用性模式,Standby数据库必须配置standby redo log,并且oracle 推荐所有数据库都使用LGWR ASYNC 模式传输。

oracle 提供了一些标准的建议如下:

4.1、确保standby redo log的文件大小与primary 数据库online redo log 文件大小相同。

4.2、创建适当的日志组

一般而言,standby redo日志文件组数要比primary 数据库的online redo 日志文件组数至少多一个。推荐standby redo 日志组数量基于primary 数据库的线程数(这里的线程数可以理解为rac 结构中的rac节点数)。推荐的公式可以做参考:

(每线程的日志组数+1)*最大线程数

例如primary 数据库有两个线程,每个线程分配两组日志,则standby 日志组数建议为6 组,使用这个公式可以降低primary 数据库实例LGWR 进程锁住的可能性。

逻辑standby 数据库有可能需要视工作量增加更多的standby redo log 文件(或增加归档进程),因为逻辑standby 需要同时写onlineredo log 文件。

Standby redo log的操作方式与online redo log 几乎一模一样,只不过在创建或删除时需要多指定一个standby关键字,例如添加:

SQL> alter database add standby logfilegroup 4

SQL> alter database drop standby logfilegroup 4;

验证standby redo log文件组是否成功创建

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

5、设置初始化参数

对于primary 数据库,需要定义几个primary 角色的初始化参数控制redo 传输服务,还有几个附加的standby 角色的参数需要添加以控制接收redo 数据库并应用(switchover/failover 后primary/standby 角色可能互换,所以建议对于两类角色相关的初始化参数都进行配置)。

譬如几个重要的初始化参数:

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

DB_UNIQUE_NAME为每一个数据库指定一个唯一的名称,该参数一经指定不会再发生变化。

LOG_ARCHIVE_CONFIG该参数通过DG_CONFIG 属性罗列同一个Data Guard 中所有

DB_UNIQUE_NAME(含primary db及standby db),以逗号分隔

例如:LOG_ARCHIVE_CONFIG='DG_CONFIG=(beijing,Jinhua)'

CONTROL_FILES  控制文件所在路径。

FAL_SERVER 存档日志进程服务(FAL 是Fetch Archived Log 的缩写)

DB_FILE_NAME_CONVERT

LOG_FILE_NAME_CONVERT

STANDBY_FILE_MANAGEMENT

如果primary 数据库数据文件发生修改(如新建,重命名等)则按照本参数

的设置在standby中做相应修改。设为AUTO 表示自动管理。设为MANUAL

表示需要手工管理。

LOG_ARCHIVE_DEST_n归档文件的生成路径。

LOG_ARCHIVE_FORMAT指定归档文件格式。

LOG_ARCHIVE_MAX_PRODUC指定归档进程的数量(1-30)。

6、创建备份(手工复制数据文件或通过RMAN) ---primary 库操作

7、创建控制文件--primary库操作

通过下列语句为standby数据库创建控制文件

SQL> alter database create standbycontrolfile as 'd:\backup\xxx01.ctl';

创建完控制文件之后到standby数据库创建完成这段时间内,要保证primary 数据库不再有结构性的变化(比如增加表空间等等),不然primary 和standby同步时会有问题。

8、复制文件到standby服务器

至少三部分:数据文件,控制文件,修改过的初始化参数文件,注意路径。

9、配置standby数据库

简单描述一下步骤:

1).创建新的OracleServiceJinhua。

2).创建密码文件,注意保持密码与primary数据库一致。

3).配置监听并启动

4).修改primary和standby 的tnsnames.ora,各自增加对应的Net Service Name。

5).创建服务器端的初始化文件

10、启动standby

加载到mount 状态即可。

SQL> STARTUP MOUNT;

启动redo 应用

SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE DISCONNECT FROM

SESSION;

启动实时应用

SQL> ALTER DATABASE RECOVER MANAGEDSTANDBY DATABASE USING CURRENT LOGFILE

DISCONNECT FROM SESSION;

提示:disconnect fromsession子句并非必须,该子句用于指定启动完应用后自动退出到命令操作符前,如果不指定的话,当前session就会一直停留处理redo 应用,如果想做其它操作,就只能新建一个连接。

实践

单机搭建物理Standby。

兄弟我资源有限,在同一台机器上搭建部署OracleData Guard,但其创建过程与多机并无区别。因为环境原因没有把详细代码贴出来,如果遇到问题 IE-》baidu。主要分两阶段配置,分别是配置primary 数据库和配置standby 数据库。只要按照前面的步骤部署搭建一般不会遇到棘手的问题。:

一、Primary数据库配置及相关操作

1、确认主库处于归档模式

SQL> archive log list;

2、将primary数据库置为FORCE LOGGING 模式:

SQL> alter database force logging;

3、创建standby数据库控制文件

SQL> alter database create standbycontrolfile as 'd:\backup\xxx.ctl';

4、创建密码口令文件

orapwd file=D:\OracleDB\app\Administrator\product\11.2.0\dbhome_1\dbs\PWDbeijing.ora password=oracle entries=8

5、创建primary数据库客户端初始化参数文件

SQL> create pfile from spfile;

将该初始化参数文件复制一份,做为standby数据库的客户端初始化参数文件

修改客户端初始化参数文件,增加下列内容

DB_NAME=beijing

DB_UNIQUE_NAME=Beijing

LOG_ARCHIVE_CONFIG='DG_CONFIG=(beijing,Jinhua)'

CONTROL_FILES=’/ORACLEDB/dg_test/Beijing/control01.ctl’,’/ORACLDB/dg_test/beijing/control02.ctl’

LOG_ARCHIVE_DEST_1='LOCATION=/oracledb/arch1/Beijing/

VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=beijing’

LOG_ARCHIVE_DEST_2='SERVICE=Jinhua ASYNC

VALID_FOR=(ALL_LOGFILES,ALL_ROLE)DB_UNIQUE_NAME=Jinhua’

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_STATE_2=ENABLE

LOG_ARCHIVE_FORMAT=%t_%s_%r.arc

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

#--------配置standby角色的参数用于角色转换

FAL_SERVER=Jinhua

DB_FILE_NAME_CONVERT=’/oracledb/dg_test/Jinhua’,’/oracledb/dg_test/beijing'

LOG_FILE_NAME_CONVERT=’/oracledb/arch1/Jinhua',’/oracledb/arch1/beijing',

’/oracledb/arch2/Jinhua’,’/oracledb/arch2/beijing’

STANDBY_FILE_MANAGEMENT=AUTO

通过pfile 重建spfile

SQL> shutdown immediate

SQL> create spfile from pfile='initbeijing.ora';

6、RMAN备份数据库

7、复制数据文件到standby服务器

(所有数据文件,备份的控制文件及客户端初始化参数文件)

8、配置listener及net service names。

listener.ora

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = wenzhongzhao)(PORT= 1522))

)

)

tnsnames.ora

BEIJING=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = wenzhongzhao)(PORT= 1522))

)

(CONNECT_DATA =

(SERVICE_NAME = beigjing)

)

)

JINHUA=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = jh-18)(PORT= 1522))

)

(CONNECT_DATA =

(SERVICE_NAME = Jinhua)

)

)

备库

listener.ora

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = jh-18)(PORT= 1522))

)

)

tnsnames.ora

BEIJING =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = wenzhongzhao)(PORT= 1522))

)

(CONNECT_DATA =

(SERVICE_NAME = beijing)

)

)

JINHUA=

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = jh-18)(PORT= 1522))

)

(CONNECT_DATA =

(SERVICE_NAME = Jinhua)

)

)

完之后重启listener:

lsnrctl stop

lsnrctl start

通过tnsping 测试tnsnames 是否正确有效:

tnsping Beijing

二、Standby数据库配置及相关操作

9、通过ORADIM创建新的OracleService

Oradim –NEW –SID Jinhua –STARTMODE MANUAL

10、创建密码文件,注意保持sys密码与primary 数据库一致。

orapwd file=D:\OracleDB\app\Administrator\product\11.2.0\dbhome_1\dbs\PWDJinhua.ora password=oracle entries=8

11、修改初始化参数文件

增加下列参数

db_unique_name=beijing

LOG_ARCHIVE_CONFIG='DG_CONFIG=(beijing,Jinhua)'

CONTROL_FILES=’/ORACLEDB/dg_test2/control01.ctl’,’/ORACLEDB/dg_test2/control02.ctl’

LOG_ARCHIVE_FORMAT=log%t_%s_%r.arc

LOG_ARCHIVE_DEST_1='LOCATION= oracledb/arch1/Jinhua/

VALID_FOR=(ALL_LOGFILES,ALL_ROLES)DB_UNIQUE_NAME=Jinhua’

LOG_ARCHIVE_DEST_STATE_1=ENABLE

#---下列参数用于角色切换

LOG_ARCHIVE_DEST_2='SERVICE=beijing ASYNC

VALID_FOR=(ONLINE_LOGFILES,PRIMARY_ROLE)DB_UNIQUE_NAME=beijing

LOG_ARCHIVE_DEST_STATE_2=ENABLE

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

DB_FILE_NAME_CONVERT=’/oracledb/dg_test2/beijing,’/oracledb/dg_test2/Jinhua

LOG_FILE_NAME_CONVERT=’/oracledb/arch1/beijing',’/oracledb/arch1/Jinhua’,

‘/oracledb/arch2/Beijing/’,’oracledb/arch2/Jinhua/’

FAL_SERVER=beijing

STANDBY_FILE_MANAGEMENT=AUTO

通过该pfile 创建spfile

SQL> create spfile frompfile='D:\backup\initJinhua.ora';

11、配置Standby Redo Log

在主库查看日志组的数量和每个日志文件的大小

SQL>SELECT GROUP#, BYTES FROM V$LOG;

在备库库查看日志组的数量和每个日志文件的大小

SQL>SELECT GROUP#, BYTES FROM V$STANDBY_LOG;

创建日志组和redo log文件

SQL>

ALTER DATABASE ADD STANDBYLOGFILE group01 ('/oracledb/db_test2/dgredlog01.rdo') SIZE 50M;

SQL>

ALTER DATABASE ADD STANDBY LOGFILEgroup02 ('/oracledb/db_test2/dgredlog02.rdo') SIZE 50M;

SQL>

ALTER DATABASE ADD STANDBYLOGFILE group 03('/ oracledb/db_test2/dgredlog03.rdo') SIZE 50M;

SQL>

ALTER DATABASE ADD STANDBYLOGFILE group 04('/ oracledb/db_test2/dgredlog04.rdo') SIZE 50M;

12、启动standby到mount

SQL> startup mount;

13、启动redo应用

SQL> alter database recover managedstandby database disconnect from session;

14、查看同步情况

首先连接到primary数据库

SQL> show parameter instance_name;

SQL> alter system switch logfile;

SQL> select max(sequence#) fromv$archived_log;

连接到standby数据库

SQL> show parameter instance_name;

SQL> select max(sequence#) fromv$archived_log;

l  主备库切换

1.查看主库的状态

SQL> SELECTSWITCHOVER_STATUS FROM V$DATABASE;

2.将主库切换至备用模式

SQL> ALTER DATABASECOMMIT TO SWITCHOVER TO PHYSICAL STANDBY WITH SESSION SHUTDOWN;

3.关闭、装载主数据库

SQL> SHUTDOWN ABORT;

SQL> STARTUP MOUNT;

4.查看备库准备向主库模式切换

SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;

5.切换备库至主库模式

SQL>ALTER DATABASE COMMIT TO SWITCHOVER TO PRIMARY WITH SESSION SHUTDOWN;

6.打开新的主数据库

SQL> ALTER DATABASE OPEN;

7. 在新的备库服务器上启动 REDO apply。

SQL> ALTER DATABASE RECOVER MANAGED STANDBYDATABASE USING CURRENT LOGFILE DISCONNECT FROM SESSION;

日常监控日志传送服务

检查日志传输服务:

Select * from v$archived_log;

检查Standby数据库的Redo 使用情况

SELECT * FROM V$STANDBY_LOG;

监控日志传输性能

SELECT * FROM V$REDO_DEST_RESP_HISTOGRM;

Oracle 会自动发现和解决日志缺失问题。这里就不啰嗦了。

手动解决日志缺失方法

1、 查询日志缺失(物理standby)

select * from v$archive_gap;

2、 日志缺失查询(逻辑standby)

Select* form dba_logstdby_log a wherenext_change# not  in

(select first_change# fromdba_logstdby_log b where a.thread#=b.thread#)

3、 找到缺失日志路径(primary)

select * from v$archive_log where …

4、 将缺失的日志拷贝到 standby 上并注册它们

Alter database regiser logfile ‘缺失日志路径’

修改保护模式(MOUNT状态下)

主数据库修改为最高可用模式

Alterdatabase set standby database to maximize availability;

主数据库修改为最大保护模式

Alterdatabase set standby database to maximize protection;

主数据库修改为最高性能模式

Alterdatabase set standby database to maximize performance;

查询数据库保护模式及远程目的地数据模式

SELECT * FROM V$DATABASE;

SELECT * FORM  V$ARCHIVE_DEST_STATUS;

逻辑Standby

前提必须条件:启用最小补充日志。用已部署的物理Standby做基础。

1、 在物理Standby数据库上停止Redo数据应用。

ALTERDATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

2、 在Redo日志中加入日志挖掘器(Logminer)数据字典

EXECUTEDBMS_LOGSTDBY.BUILD;

3、 转换物理Standby数据库为逻辑Standby数据库

ALTERDATABASE RECOVER TO LOGICAL STANDBY new_db_name;

该过程数据库DBID会改变。new_db_name指定一个数据库名称(和主数据库名称不一样)主要用来标识新的逻辑Standby数据库。

4、 打开逻辑Standby数据库

ALTER DATABASE OPEN RESETLOGS;

5、 开始应用Redo数据

ALTERDATABASE START LOGICAL STANDBY APPLY IMMEDIATE;

6、 全库备份逻辑Standby。因为从主库拷贝的备份不能用于还原逻辑Standby数据库。