admin管理员组

文章数量:1531703

2024年1月11日发(作者:)

Oracle Data Guard实施与维护方案

Oracle Data Guard实施方案

1. 项目背景介绍

在2台RedHat5.4上使用ORACLE 的DataGuard组件实现容灾。设备配置(VMWare虚拟机环境)清单如下:

主机型号 数据实例

ORCL

ORCL

配置

CPU:1

MEM:2G

CPU:1

MEM:2G

数据库版本

Oracle 11gR2 11.2.0.1

Oracle 11gR2 11.2.0.1

RedHat

5.4(32位)

RedHat

5.4(32位)

Oracle Data Guard实施方案

2. Oracle DataGuard 介绍

备用数据库(standby database)是ORACLE 推出的一种高可用性(HIGH AVAILABLE)数据库方案,在主节点与备用节点间通过日志同步来保证数据的同步,备用节点作为主节点的备份,可以实现快速切换与灾难性恢复。

 STANDBY DATABASE的类型:

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

两种类型的工作原理可通过如下图来说明:

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

logical standby则不是这样,在logical standby中,逻辑信息是相同的,但

物理组织和数据结构可以不同,它和主库保持同步的方法是将接收的REDO转换成SQL语句,然后在STANDBY上执行SQL语句。逻辑STANDBY除灾难恢复外还有其它用途,比如用于用户进行查询和报表,但其数据库用户相关对象均需要有主键。

本次实施将选择物理STANDBY(physical standby)方式

Oracle Data Guard实施方案

 对主库的保护模式可以有以下三种模式:

– Maximum protection (最高保护)

–Maximum availability (最高可用性)

–Maximum performance (最高性能)

三种保护模式区别如下:

保护模式

最高保护

数据丢失保护

零数据丢失

双重故障保护

零数据丢失

单重故障保护

最少的数据丢失

重做传输

LGWR SYNC — 将重做同步传输至两个站点,网络中断会导致主Database宕机

LGWR SYNC — 重做同步传输

LGWR ASYNC 或 ARCH —

重做异步传输

 基于项目应用的特征及需求,本项目比较适合采用Maximum availability (最最高可用性

最高性能

高可用性)模式实施。

Oracle Data Guard实施方案

3. Dataguard 实施前提条件和注意事项:

 灾备环境中的所有节点必须安装相同的操作系统,尽可能令详细补丁也保持相同。

 灾备环境中的所有节点必须安装完全相同版本的Oracle数据库软件,包括版本号和发布号,比如必须都是Oracle 11.2.0.1

 主库必须处于归档(ARCHIVELOG)模式。

 灾备环境中所有节点的硬件和操作系统架构必须相同

 主库可以是单实例,也可以是RAC。

 主节点和备用节点之间的硬件配置可以不同,比如CPU数量,内存数量,存储的配置等等。

 配置灾备环境的数据库用户必须具有SYSDBA权限。

Oracle Data Guard实施方案

4. Oracle软件安装

1. 要实施DataGurad的前,需要在主机RedHat-Primary和备机RedHat-Standby上进行ORACLE软件的基础安装。

2. 备机基础软件的安装有两种方式供选择:

1) 源始安装介质安装

采用ORACLE数据库安装介质进行软件安装。

2) “克隆”主站源数据库

分别对主站源数据库进行tar压缩并FTP/rcp至备机上,然后展开压缩文件。

 通常出于便捷的原因,备机的Oracle初始建立可采用上述的第二种方式。测试环境中直接对虚拟机进行了拷贝,因此相当于采用了第二种方式。现场环境下,如果主节点不是RAC环境,也可以采用第二种方式。

4.1 环境配置

RedHat5-Primary (primary , IP 192.168.204.131)以下简称主库

Single Instance Primary

IP

Oracle

Instance

Data,Control File,Redo File

说明

192.168.204.131

单实例

ORCL

$ORACLE_BASE/oradata

RedHat5-Standby (standby, IP 192.168.204.132) ,以下简称从库。

Single Instance Standby

IP

Oracle

Instance

Data,Control File,Redo File

说明

192.168.204.132

单实例

ORCL

$ORACLE_BASE/oradata

Oracle Data Guard实施方案

4.2 系统硬件环境检查

4.2.1 检查内存相关项

检查服务器的内存,可以通过下列命令:

[root@localhost ~]# grep MemTotal /proc/meminfo

另外与内存相关的swap 交换分区的设置也很重要,通常有下列的规则:

实际内存 建议swap 交换空间大小

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

1G-2G 1.5 倍于内存

2G-16G 与内存相同

超过16G 设置为16G 即可

查看当前服务器swap 交换分区大小,可以通过下列命令:

[root@localhost ~]# grep SwapTotal /proc/meminfo

查看系统当前共享内存,可以通过df 命令,例如:

[root@localhost ~]# df -h /dev/shm

4.2.2 查看系统架构

本步用来查看处理器的架构类型,需要确认ORACLE 安装包与处理器架构相符,不然安装时必然报错。查看当前系统的处理器架构可以通过下列命令:

[root@localhost ~]# uname –m

i686

4.2.3 检查磁盘空闲空间

首先/tmp 至少要有1g 的空闲空间,查看/tmp 的磁盘空间,也可以通过df 命令查看,例如:

[root@localhost ~]# df -h /tmp

在执行安装之前,建议执行df -h 命令,查看当前是否有充裕的空闲空间来安装和创建数据库。

[root@jssnode1 ~]# df –h

Oracle Data Guard实施方案

4.3 安装操作系统软件包

(32位 RedHat5.4)

binutils-2.17.50.0.6

compat-libstdc++-33-3.2.3

elfutils-libelf-0.125

elfutils-libelf-devel-0.125

elfutils-libelf-devel-static-0.125

gcc-4.1.2

gcc-c++-4.1.2

glibc-2.5-24

glibc-common-2.5

glibc-devel-2.5

ksh-20060214

libaio-0.3.106

libaio-devel-0.3.106

libgcc-4.1.2

libgomp-4.1.2

libstdc++-4.1.2

libstdc++-devel-4.1.2

make-3.81

sysstat-7.0.2

查看软件包是否已经安装:

[root@localhost ~]# rpm -aq binutils compat-libstdc++-33

[root@localhost ~]# rpm -aq | grep elfutils-libelf

[root@localhost ~]# rpm -aq | grep gcc

[root@localhost ~]# rpm -aq | grep glibc

[root@localhost ~]# rpm -aq | grep ksh

[root@localhost ~]# rpm -aq | grep libaio

[root@localhost ~]# rpm -aq | grep libgcc

[root@localhost ~]# rpm -aq | grep libgomp

[root@localhost ~]# rpm -aq | grep libstdc++

[root@localhost ~]# rpm -aq | grep make-3

[root@localhost ~]# rpm -aq | grep sysstat

[root@localhost ~]# rpm -aq | grep unixODBC

通过以上命令来查看是否有未安装的软件包,可将未安装的软件包放到~/rpm下,因有些包会相互依赖,最简单的方式是将rpm包下的软件包一起安装:

[root@localhost ~]#cd rpm

[root@localhost rpm]#pwd

/root/rpm

[root@localhost rpm]#ls

compat-libstdc++-

gcc-c++-

libstdc++-

Oracle Data Guard实施方案

[root@localhost rpm]#rpm –Uvh *

 64位需安装的操作系统软件包

binutils-2.17.50.0.6

compat-libstdc++-33-3.2.3

compat-libstdc++-33-3.2.3 (32 bit)

elfutils-libelf-0.125

elfutils-libelf-devel-0.125

gcc-4.1.2

gcc-c++-4.1.2

glibc-2.5-24

glibc-2.5-24 (32 bit)

glibc-common-2.5

glibc-devel-2.5

glibc-devel-2.5 (32 bit)

glibc-headers-2.5

ksh-20060214

libaio-0.3.106

libaio-0.3.106 (32 bit)

libaio-devel-0.3.106

libaio-devel-0.3.106 (32 bit)

libgcc-4.1.2

libgcc-4.1.2 (32 bit)

libstdc++-4.1.2

libstdc++-4.1.2 (32 bit)

libstdc++-devel 4.1.2

make-3.81

sysstat-7.0.2

unixODBC-2.2.11

unixODBC-2.2.11 (32 bit)

unixODBC-devel-2.2.11

unixODBC-devel-2.2.11 (32 bit)

4.4 修改内核参数

下列将要进行配置的核心参数均拥有默认值(或者说最小值),需要对其进行配置的原因,是为了获得更好了性能,因此对于产品服务器来说,务必根据实际情况进行配置,不适当的值反倒可能适得其反。

使用vi 命令编辑/etc/ 文件,例如:

[root@localhost ~]# vi /etc/

将下列内容加入该文件:

-max-nr = 1048576

-max = 6815744

= 2097152

= 536870912

= 4096

= 250 32000 100 128

_local_port_range = 9000 65500

_default = 262144

_max = 4194304

_default = 262144

_max = 1048586

Oracle Data Guard实施方案

注意,某些参数可能已经存在于该文件,注意修改参数值即可。这里各参数所指定的值仅供参考,请根据实际情况进行修改,一般来说只需要对 这个参数的参数值进行修改即可,该参数建议修改为物理内存的一半(以字节为单位)。

编辑完之后存盘退出,然后运行下列命令重新加载并验证参数是否正确:

[root@jssnode1 ~]# sysctl -p

4.5 修改系统时间

修改主机与备机的系统时间一致

4.6 创建用户和组及安装目录并配置环境变量

创建用户和组:

[root@localhost ~]# groupadd oinstall

[root@localhost ~]#groupadd dba

[root@localhost ~]#useradd -g oinstall -G dba oracle

[root@localhost ~]#passwd oracle

验证nobody用户:

[root@localhost ~]#id nobody

创建Oracle的安装目录:

注: (因虚拟机环境安装Linux时没有手动分区,导致挂载点” /”空间不足,所以将oracle安装到了/home/db下,现场环境下Oracle应安装到/opt或单独分区)

[root@localhost ~]# cd /home

[root@localhost home]#mkdir db

改变文件系统/home/db的所有者为oracle,以便将Oracle安装到此目录

[root@localhost home]#chown oracle:oinstall db

切换到oracle用户,修改.bash_profile

[oracle@localhost ~]$ vi .bash_profile

# .bash_profile

# Get the aliases and functions

if [ -f ~/.bashrc ]; then

. ~/.bashrc

fi

Oracle Data Guard实施方案

# User specific environment and startup programs

ORACLE_SID=orcl

ORACLE_BASE=/home/db/oracle

ORACLE_HOME=$ORACLE_BASE/product/11.2.0/db_1

export ORACLE_SID ORACLE_BASE ORACLE_HOME

export LD_ASSUME_KERNEL=2.6.18

export NLS_LANG="AMERICAN_16GBK"

umask 022

PATH=$PATH:/$ORACLE_HOME/bin:$HOME/bin

export PATH

4.7 安装Oracle数据库

本节略

Oracle Data Guard实施方案

5. 配置DataGuard过程

5.1 备注

“SQL>”:表示在sqlplus环境下执行,通常是以sysdba身份登录来执行命令

“$”或” [oracle@localhost ~]$”:表示在命令行中执行的命令

5.2 判断DataGuard是否安装

SQL>select * from v$option where parameter = 'Oracle Data Guard’;

5.3 网络配置

192.168.204.131(orcl)------------------------------------192.168.204.132(orcldg)

5.4 监听配置

 主库

[oracle@localhost ~]$ cd $ORACLE_HOME/network/admin

[oracle@localhost admin]$ vi

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

)

)

SID_LIST_LISTENER =

(SID_LIST =

Oracle Data Guard实施方案

(SID_DESC =

(GLOBAL_DBNAME = orcl)

(SID_NAME = orcl)

(ORACLE_HOME = /home/db/oracle/product/11.2.0/db_1)

)

)

注意:SID_LIST_LISTENER 配置的是静态注册,如果没有该参数,而且Data

Guard 启动顺序又不正确,那么在主库可能会报 PING[ARC1]: Heartbeat failed

to connect to standby 'orcl_st'. Error is 12514. 错误,导致归档无法完成。

[oracle@localhost admin]$ vi

ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

ORCLDG =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcldg)

)

)

 备库

[oracle@localhost admin]$ vi

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

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

)

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

Oracle Data Guard实施方案

(GLOBAL_DBNAME = orcldg)

(SID_NAME = orcl)

(ORACLE_HOME = /home/db/oracle/product/11.2.0/db_1)

)

)

[oracle@localhost admin]$ vi

ORCL =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcl)

)

)

ORCLDG =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = orcldg)

)

)

5.5 主库前期准备

设置强制写日志

SQL> select FORCE_LOGGING from v$database;

NO

SQL> alter database force logging;

SQL> select FORCE_LOGGING from v$database;

YES

Oracle Data Guard实施方案

5.6 创建口令文件并将文件传输到备库

在主库上创建密码文件,并将文件传到备库的相关位置

[oracle@localhost dbs]$ pwd

/home/db/oracle/product/11.2.0/db_1/dbs

[oracle@localhost bin]$ orapwd file=$ORACLE_HOME/dbs/orapworcl password=oracle

[oracle@localhost bin]$ cd $ORACLE_HOME/dbs/

[oracle@localhost dbs]$ ls

缺省情况下,win下口令文件的格式是,unix下的格式是orapwSID(大小写敏感)

传送文件:

[oracle@localhost dbs]$scp -cp orapworcl

**************.204.132://home/db/oracle/product/11.2.0/db_1/dbsorapworcl 100% 1536 1.5KB/s 00:00

[oracle@localhost dbs]$

5.7 创建备份库需要的控制文件并传输到备库

创建控制文件

SQL>shutdown immediate

SQL>startup mount;

SQL>alter database create standby controlfile as '/tmp/stdby_';

SQL>alter database open;

$scp -rp /tmp/stdby_

**************.204.132://home/db/oracle/oradata/ORCL/controlfile/

$scp -rp /tmp/stdby_

**************.204.132://home/db/oracle/flash_recovery_area/ORCL/controlfile/

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

手工复制几份(未执行)

$ cd /tmp/

$ cp sdtby_ stdby_

$ cp sdtby_ stdby_

Oracle Data Guard实施方案

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

5.8 修改主库初始化参数

创建主库pfile

sql > create pfile from spfile;

修改pfile

[oracle@localhost dbs]$vi

*.db_unique_name=orcl

*.log_archive_config='dg_config=(orcl,orcldg)'

*.log_archive_dest_1='location=/home/db/oracle/oradata/ORCL/archive

valid_for=(all_logfiles,all_roles) db_unique_name=orcl'

*.log_archive_dest_2='service=orcldg lgwr async

valid_for=(online_logfiles,primary_role) db_unique_name=orcldg'

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=defer

*.log_archive_format=%t_%s_%

*.fal_server=orcldg

*.fal_client=orcl

*.standby_file_management=auto

pfile 拷贝到备库上

[oracle@localhost dbs]$scp –rp

/home/db/oracle/product/11.2.0/db_1/dbs/

**************.204.132:/home/db/oracle/product/11.2.0/db_1/dbs/

创建主库spfile

SQL>Shutdown immediate

SQL>startup pfile='//home/db/oracle/product/11.2.0/db_1/dbs/'

SQL> create spfile from pfile='//home/db/oracle/product/11.2.0/db_1/dbs/';

SQL> shutdown immediate;

SQL > startup

5.9 修改数据库运行在归档模式下

SQL > SHUTDOWN IMMEDIATE;

SQL > STARTUP MOUNT;

Oracle Data Guard实施方案

SQL > ALTER DATABASE ARCHIVELOG;

SQL > ALTER DATABASE OPEN;

5.10 备份生产数据库

$scp -rp /home/db/oracle/oradata/ORCL **************.204.132://home/db/oracle/oradata/$scp –rp/home/db/oracle/admin/******************.204.132://home/db/oracle/admin5.11 修改备库pfile

[oracle@localhost dbs]$vi

*.db_unique_name=orcldg

*.log_archive_config='dg_config=(orcldg,orcl)'

*.log_archive_dest_1='location=/home/db/oracle/oradata/ORCL/archive

valid_for=(all_logfiles,all_roles) db_unique_name=orcldg'

*.log_archive_dest_2='service=orcl lgwr async

valid_for=(online_logfiles,primary_role) db_unique_name=orcl'

*.log_archive_dest_state_1=enable

*.log_archive_dest_state_2=enable

*.log_archive_format=%t_%s_%

*.fal_server=orcl

*.fal_client=orcldg

*.standby_file_management=auto

*.control_files='/home/db/oracle/oradata/ORCL/controlfile/stdby_','/home/db/oracle/flash_recovery_area/ORCL/controlfile/stdby_'

5.12 在备库上创建spfile

sql>shutdown immediate

sql>create spfile from pfile;

Oracle Data Guard实施方案

5.13 启动物理备用数据库

SQL>startup nomount

SQL>alter database mount standby database;

5.14 配置Standby Redo Log

在两边都配置standby redo log

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

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

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

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

在主备库创建日志组和redo log文件

SQL> ALTER DATABASE ADD STANDBY LOGFILE group

4('/home/db/oracle/product/11.2.0/db_1/dbs/') SIZE 50M;

SQL> ALTER DATABASE ADD STANDBY LOGFILE group 5

('/home/db/oracle/product/11.2.0/db_1/dbs/') SIZE 50M;

SQL>ALTER DATABASE ADD STANDBY LOGFILE group 6

('/home/db/oracle/product/11.2.0/db_1/dbs/') SIZE 50M;

SQL>ALTER DATABASE ADD STANDBY LOGFILE group

7('/home/db/oracle/product/11.2.0/db_1/dbs/') SIZE 50M;

备注:

删除日志组redo log文件的方法

SQL>ALTER DATABASE DROP STANDBY LOGFILE GROUP N;(N代表数字)

5.15 Start Redo Apply

在主数据库上设置DataGuard的保护模式.把主数据库启动到mount状态设置好DataGuard的保护模式.

SQL>alter system set log_archive_dest_state_2=ENABLE scope=both;

SQL>shutdown immediate;

SQL>startup mount;

SQL>alter database set standby database to maximize availability;

SQL>alter database open;

Oracle Data Guard实施方案

在备用数据库上启动日志传输

#实时应用日志

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

session;

查看哪些归档日志被APPLY了

SQL>select sequence#,applied from v$archived_log order by sequence#;

在主库

强制日志切换到当前的online redo log file.

SQL>alter system archive log current;

在备库

查看新的被归档的redo data

SQL>

SELECT SEQUENCE#, FIRST_TIME, NEXT_TIME FROM V$ARCHIVED_LOG ORDER BY

SEQUENCE#;

在备库查看接收到的被应用的redo

SQL> select sequence#,applied from v$archived_log order by sequence#;

查看数据库的角色

SQL>select database_role,protection_mode,protection_level from v$database;

在主库查看日志传送情况

SQL> Select dest_name,status,error from v$archive_dest;

DEST_NAME STATUS ERROR

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

LOG_ARCHIVE_DEST_1 VALID

LOG_ARCHIVE_DEST_2 VALID

31 rows selected.

两个节点都正常。

验证同步情况

在主库切换日志:

SQL> alter system switch logfile;

Oracle Data Guard实施方案

System altered.

SQL> select sequence# from v$archived_log;

SEQUENCE#

----------

15

16

SQL> alter system switch logfile;

System altered.

SQL> select sequence# from v$archived_log;

SEQUENCE#

----------

17

18

在备库进行验证:

SQL> select sequence#,applied from v$archived_log;

SEQUENCE# APP

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

13 YES

4 NO

14 YES

15 YES

16 YES

18 NO

16 YES

Oracle Data Guard实施方案

17 YES

18 YES

19 YES

同步成功。 至此Oracle 的Data Guard 环境已经搭建完成。

5.16 DataGuard日常维护

在日常维护中,请严格按照以下顺序来操作:

启动顺序

启动的时候,先启动备库,然后启动主库。

一、启从、主库的监听Listener

从库orcldg:

$lsnrctl start

主库orcl:

$lsnrctl start

二、启动备库数据库,执行如下:

$sqlplus “/ as sysdba”

SQL> startup nomount

SQL> alter database mount standby database;

disconnect;

#让备库处于standby

#开始同步

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE

三、启动主库数据库(上述第二步执行完毕后,方可执行如下命令):

SQL>startup

Oracle Data Guard实施方案

关闭顺序

关闭的时候正好相反,先关闭主库,然后关闭从库。

 关闭主库

CMD>su – oracle

CMD>sqlplus “/ as sysdba”

SQL>shutdown immediate;

 关闭从库

telnet 120.4.7.50

su – oracle

CMD>sqlplus “/ as sysdba”

SQL>alter database recover managed standby database cancel; #停止同步

SQL>shutdown immediate

查看备库的数据

SQL>alter database recover managed standby database cancel;

SQL> alter database open read only;

Database altered.

SQL> select count(1) from user_tables;

…….

SQL操作完成后,需执行以下语句以令从库继续处于接收状态:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE

disconnect;

5.17 主备库切换

1. 查看主库的状态:确认a是否可以做switch over

 不能切换的情况

Oracle Data Guard实施方案

SQL>SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

SESSIONS

ACTIVE

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

select sid,SERIAL# from v$session where sid>10;

SID SERIAL#

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

12 14

17 3

查出当前连接session

SQL> select distinct from v$mystat ss;

杀掉其他session

SQL> alter system kill session '12,14';

System altered

 可以切换的情况

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

TO STANDBY

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

SQL> alter database commit to switchover to physical standby with session shutdown;

3.关闭、装载主数据库

SQL> shutdown abort;

SQL> startup mount;

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

SQL> SELECT SWITCHOVER_STATUS FROM V$DATABASE;

SWITCHOVER_STATUS

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

TO PRIMARY

1 row selected

注:如果是TO PRIMARY表示可以正常切换,不过还会遇到NOT ALLOWED和PENDING或者LATENT,实际操作下来如果备库的switchover_status为not allowed或者to primary都可以正常切换

5.切换备库至主库模式

SQL> alter database commit to switchover to primary with session shutdown;

6.打开新的主数据库

SQL> ALTER DATABASE OPEN;

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

Oracle Data Guard实施方案

SQL> alter database recover managed standby database using current logfile

disconnect from session;

5.18 灾难恢复(failover)

Step 1 Flush any unsent redo from the primary database to the target standby

database

SQL> ALTER SYSTEM FLUSH REDO TO target_db_name;

Step 2 Verify that the standby database has the most recently archived redo log

file for each primary database redo thread.

SQL> SELECT UNIQUE THREAD# AS THREAD, MAX(SEQUENCE#) -

> OVER (PARTITION BY thread#) AS LAST from V$ARCHIVED_LOG;

SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';

Step 3 Identify and resolve any archived redo log gaps.

SQL> SELECT THREAD#, LOW_SEQUENCE#, HIGH_SEQUENCE# FROM V$ARCHIVE_GAP;

SQL> ALTER DATABASE REGISTER PHYSICAL LOGFILE 'filespec1';

Step 4 Repeat Step 3 until all gaps are resolved.

Step 5 Stop Redo Apply.

Issue the following SQL statement on the target standby database:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE CANCEL;

Step 6 Finish applying all received redo data.

Issue the following SQL statement on the target standby database:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE FINISH;

Step 7 Verify that the target standby database is ready to become a primary

database.

Step 8 Switch the physical standby database to the primary role.

Issue the following SQL statement on the target standby database:

Oracle Data Guard实施方案

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

Step 9 Open the new primary database.

SQL> ALTER DATABASE OPEN;

Step 10 Back up the new primary database.

Oracle recommends that a full backup be taken of the new primary database.

Step 11 Restart Redo Apply if it has stopped at any of the other physical standby

databases in your Data Guard configuration.

For example:

SQL> ALTER DATABASE RECOVER MANAGED STANDBY DATABASE USING CURRENT LOGFILE -

> DISCONNECT FROM SESSION;

附:

1. 启动到管理模式

SQL>shutdown immediate;

SQL>startup nomount;

SQL>alter database mount standby database;

SQL>alter database recover managed standby database 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;

SQL> alter database open read only;

本文标签: 安装数据库主库查看配置