Oracle Standby Database 实现方案

Oracle Standby Database 实现方案 

From: http://wanow.blog.hexun.com/4672755_d.html

字号:大 中 小

版本:V20060328.01.01


Standby Database的工作原理


1. Oracle 与
High Availability, Disaster Recovery 及 Data Duplicate 相关功能的产品概述


Oracle 的
High Availability 功能,Oracle 是从下面几个方面来诠释的:

(1) System faults and crashes

(2) Application and middleware
failures

(3) Network failures

(4) Media failures

(5) Human Error

(6) Disasters and extended
outages

(7) Planned downtime, maintenance and
management tasks

上述第六项就包含了disaster recovery 在内。因此 disaster
recovery 应该算做 high availability 的一个方面了。

总的来说,除了以Oracle database 本身参数进行性能调解外,Oracle
提供支持high availability 相关产品主要有下面几种:

(1) Oracle Fail Safe on NT

(2) Oracle Parallel Server

(3) Oracle Parallel Fail Safe

(4) Oracle Advanced Quening

(5) Oralce Advanced Replication

(6) Oracle Standby Database

在Duplication data 方面主要有用于distributed data
功能的Advanced Replication 和我们讨论过 standby database

从参与讨论的帖子来看,相关的问题是集中在OPS,standby database 和
Advanced Replication 的选择,因此我就先将这三种产品做一下比较。

OPS (Oracle Parallel Sever)

OPS 最原始的设计初衷就是system/application high
availability。与其他产品相比较:

OPS 是多个单CUP机或SMP(Symmetric Multi-Processing system)
的cluster (MPP Massively Parallel Processing) 。cluster 里面不同的 node
使用一个(一般是一个)或多个oracle instances 与一个database 连接

主要的技术特点:

(1) database 所有的data
files 是建立在 raw devices 上面的,因此在技术方面对OS 的设置有很高的依赖性,很多方面取决于OS的对设置是否支持。

(2) 在database 方面,每个node都有自己单独的 on-line redo log file
groups,因此在做backup 和recovery 的时候,需要特殊的处理。

(3) OPS 的data files 方面并没有redundance,因此 media
failure 方面,要依靠RAID (redundant array of inexpensive disk) subsystem.

Oracle 从8i
开始在OPS的基础上,逐步在不同的OS平台上,增加了Fail Safe/Failover 的功能,这里不尽详细描述。

Advanced Replication

Replication 的设计初是分散异地的application
access database locally。这种技术可以将一个database 中的Tables,Indexes,Views,Packages and
Package Bodies,Procedures and
Functions,Triggers,Sequences,Synonyms复制到另一database中。如果是全部database 的复制,也可用于high
availability。

一个范例,yahoo在美国的东岸和西岸,各有一个镜像database,是采用的
replication
的技术。东西两岸的用户是连到最近的database,从而提高访问的速度。如果一个database出了问题,用户自动转入与另一个相连,实现网站的high
availability。这种high availability 对用户来说,是透明的。

其他的范例,在公司中的应用,例如,HR
database中雇员资料,在accounting database 中需要除去薪资等的其他资料,可以在HR中建立一个view,以replication
技术复制到 accounting database 中。

因为大多 replicas 都是在异地,从而在异地建立了redundance
data。Replication 是对于database 来说的 high availability。

2. standby database 的工作原理

从设计原理上来讲,standby database 是为 primary
database 建立的备份,因此具有 redundance data,也是相对于 database 来说的 high
availability;

standby database 为 primary database 做的备份,是通过
primary database 不断产生出的archived log files 来实现的。primary database 处于 archive mode
的状态,持续送出 archived log files 给 standby database,而 standby database 则处于 recovery
mode,持续apply primary database 的 archived log files.

为了完成上述过程,必须具备以下的条件:

(1) 如果primary
database 和 standby database 是运行在不同的服务器上面,那么这两台服务器必须有相同version 和 release
的操作系统;必须有相同 version, release 和 patch 的 oracle RDBMS 系统。

(2) Oracle 是允许 primary 和 standby database
在同一个服务器上面运行的。如果是这种情形,建议这两个databases 要分布在不同的physical disk drives
上面。并且不是所有的操作系统都支持mount 两个instances 连接两个同名的databases。

(3) Primary database
必需处于archive log mode。

(4) Oracle 从 version 7.3才开始支持 standby database。7.3.x – 8.0.x
需要手工copy 所有的archived log files 从 primary server 到 standby server,并且,需要手工
recovery archived log files (当然这些可以通过 OS shell scripts, sql scripts 等等方法来实现)
;并且standby database 只能够处于close/nomount/mount 的状态。

(5) Oracle 从version 8i (8.1.5以后) 开始支持 primary database 可以将
arhived log files 自动送到最多一个remote site (一般即standby database server)
,本地则可多达七个地点。并且,standby database 在mount 的状态下,增加了 managed recovery
mode,在这种状态下,standby database 可以自动立即apply 由 primary node 送过来的 archived log
files。

(6) Oracle 从version 8i (8.1.5以后) 开始支持standby database的mount
recovery mode和database read only mode的转换。这样方便了系统可以利用standby
database产生reports,而不影响用户正常使用 primary database。

(7) 一旦
standby database被activated,即成为primary database,无法再回归 standby database
mode。因此primary database出了问题,standby database被actived成为primary
database之后,如果需要在原来的 primary/standby node上面重建 primary/standby
database,两个database都需要重建。

(8) 关于启动standby
database时与 primary database之间的数据丢失问题。如果primary database在出问题之前如果无法完成 log file
switch的话,两个database之间会相差 current on-line redo log file中的数据。oracle9i中的 data
guard弥补了这一缺陷。oracle8i只有solaris平台支持 data guard。

注意:第(5)
(6) 两项只有oralce 8i EE(Enterprise Edition)版本支持。SE (Standard Edition) 不支持这两项功能。

不同于OPS和Advanced Replication,使用standby
database的时候,无论在actived standby database时,或在primary node上面重建 primary
database的时候,系统都需要down time。所需时间长短,与系统状态有关。如果可以在primary mode建立standby database
(如果两个server的硬件设置一样,一般standby node要差一些,节约费用) ,可以减少downtime。

在下面的几部份,可以讨论到部份细节。

实现环境

































主服务器

备份服务器

操作系统

Windows 2003
Enterprise

Windows 2003
Enterprise

Oracle版本

Oracle
9.2.0.1

Oracle
9.2.0.1

Oracle SID

pstest

pstest

ORACLE_HOME

c:\oracle\oradata\pstest

c:\oracle\oradata\pstest

机器名

Primary

Standby

IP地址

192.168.5.20

192.168.5.21


实现步骤


  1. 1.        
    Primary
    Server上安装Oracle并创建SID为pstest的Oracle数据库;

  2. 2.        
    Standby
    Server上安装Oracle并创建SID为pstest的Oracle数据库;

这一步可以用命令只创建一个名字为pstest的Oracle服务名即可,

WINNT> oradim -NEW -SID pstest -STARTMODE
manual

如果创建库的话,数据库文件需要被Primary
Server上的数据库文件覆盖掉;

  1. 3.        
    Primary
    Server上的所有数据文件、redo文件和password文件都copy到Standby
    Server机器的相应位置;














 

C:\oracle\oradata\pstest   
目录下文件


CWMLITE01.DBF

DRSYS01.DBF

EXAMPLE01.DBF

INDX01.DBF

ODM01.DBF

SYSTEM01.DBF

TEMP01.DBF

TOOLS01.DBF

UNDOTBS01.DBF

USERS01.DBF

XDB01.DBF

REDO01.LOG

REDO02.LOG

REDO03.LOG

 

D:\oracle\ora92\database   
目录下文件


PWDpstest.ora


  1. 4.        
    修改Primary
    Server 的Oraclce初始化参数;

文件位置:c:\oracle\admin\pstest\pfile\

文件名字不确定,类似这样:init.ora.114200520819,我们把名字改为init.ora,这样好记一点;

FAL_SERVER=standby                
注:Primary Server连接Standby Server的数据库连接名

FAL_CLIENT=primary                 
注:Standby Server连接Primary Server的数据库连接名

LOG_ARCHIVE_DEST_1= ‘LOCATION= c:\ arch mandatory reopen=15’

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_2=
‘SERVICE=standby‘            
注:到Standby Database的数据库连接名

LOG_ARCHIVE_DEST_STATE_2=ENABLE

LOG_ARCHIVE_FORMAT=‘ARC%t_%s.arc‘

LOG_ARCHIVE_MIN_SUCCEED_DEST=2

log_archive_start=true

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

STANDBY_FILE_MANAGEMENT=AUTO

具体参数的说明请参考oracle在线文档。

  1. 5.        
    设置primary database为archivelog模式

SQL>shutdown immediate;

SQL>startup mount pfile=’
c:\oracle\admin\pstest\pfile\init.ora’;

SQL>alter database archivelog;

SQL>alter database open:

  1. 6.        
    Primary
    Database
    上创建Standby
    Database的控制文件

SQL>shutdown immediate;

SQL>startup mount;

SQL>alter database create standby
controlfile as ‘c:\oracle\oradata\pstest\control01.ctl’

SQL>alter database open;

然后将该controlfile复制到Standby Server的对应位置,原来的控制文件已经不需要了;

  1. 7.        
    修改Standby
    Database的初始化参数

拷贝Primary
Database
上的初始化参数文件到Standby
Database上对应位置,然后修改为以下内容:

CONTROL_FILES=‘ c:\oracle\oradata\pstest\control01.ctl’

FAL_SERVER=primary                
注:Standby Server连接Primary Server的数据库连接名

FAL_CLIENT=standby                 
注:Primary Server连接Standby Server的数据库连接名

LOG_ARCHIVE_DEST_1= ‘LOCATION= c:\ arch mandatory reopen=15’

LOG_ARCHIVE_DEST_STATE_1=ENABLE

LOG_ARCHIVE_DEST_2= ‘SERVICE=primary‘

LOG_ARCHIVE_DEST_STATE_2=ENABLE

LOG_ARCHIVE_FORMAT=‘ARC%t_%s.arc‘

LOG_ARCHIVE_MIN_SUCCEED_DEST=2

log_archive_start=true

REMOTE_LOGIN_PASSWORDFILE=EXCLUSIVE

STANDBY_ARCHIVE_DEST=’ c: \arch’

STANDBY_FILE_MANAGEMENT=AUTO

具体参数的说明请参考oracle在线文档。

  1. 8.        
    设置Primary Database和Standby
    Database的tnsnames.ora

文件位于:c:\oracle\ora92\network\admin










Primary
database

standby =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = pstest)

)

)

primary =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = pstest)

)

)

Standby
Database

standby =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = pstest)

)

)

primary =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = pstest)

)

)


  1. 9.        
    启动standby database

SQL>startup nomount pfile=’
c:\oracle\admin\pstest\pfile\init.ora’

SQL>alter database mount standby
database;

  1. 10.     启动primary database

SQL>startup pfile=’
c:\oracle\admin\pstest\pfile\init.ora’

  1. 11.     启动standby database到recover manage模式

SQL>alter database recover managed
standby database disconnect from session;

测试一下


在Primary Database上:

SQL> create user test identified by 密码;

SQL> grant connect ,resource to test ;

SQL> conn test/密码@primary;

SQL> create table test(name
varchar2(20));

SQL> insert into test values(‘hi,data
guard‘);

SQL> commit;

SQL> conn / as sysdba

SQL> alter system switch logfile;

察看从库日志

C:\oracle\admin\poramls\bdump\pormals_alert.ora

看当前归档日志是否已经正常完成恢复

已只读方式打开从库察看是否insert into test
values(‘hi,data guard‘);已经生效。

在Standby Database上

SQL> conn / as sysdba;

SQL> alter database recover managed
standby database cancel;

SQL> alter database open read only;

SQL> conn test/密码

SQL> select * from test;

察看是否insert into test values(‘hi,data
guard‘);已经生效。

如果生效说明已经完全正常工作,data guard到此完全配置完毕。

再次置从库在恢复模式

SQL> ALTER DATABASE RECOVER MANAGED
STANDBY DATABASE disconnect from session;

维护standby数据库

当primary 数据库失败时,将standby 数据库激活:取消(cancel)恢复执行以下操作:

sql> connect internal/password;

sql> startup nomount pfile=’c:\oracle\admin\pstest\pfile\init.ora’;

sql> alter database mount standby database;

sql>
alter database activate standby database;

shutdown standby 数据库;

sql> shutdown immediate

重起Standby Database;

sql > startup

问题:


  1. 1.        
    关于tnsnames.ora文件

Primary
Database
Standby
Database上的tnsnames.ora文件内容可以是相同的,其目的是为了建立两个Oracle连接名,一个连自己,一个连对方;这两个连接名对应各自服务器上的初始化参数文件中的一下内容中的primary和standby:

FAL_SERVER=primary                
注:Standby Server连接Primary Server的数据库连接名

FAL_CLIENT=standby                 
注:Primary Server连接Standby Server的数据库连接名

  1. 2.        
    关于初始化文件中的LOG_ARCHIVE_MIN_SUCCEED_DEST参数

在上面的配置文件中,此参数的值为2,如果设置为1的话,将不能正常同步归档日志;

  1. 3.        
    关于初始化文件中的LOG_ARCHIVE_DEST_2参数

LOG_ARCHIVE_DEST_2=
‘SERVICE=standby‘            
注:到Standby Database的数据库连接名

Primary
Server
Standby
Server
上的初始化文件中的这个参数分别只的是指向对方的数据库连接名。

  1. 4.        
    关于启动关闭顺序

启动的时候,先从库的listener,然后启动从库,然后启动主库的listener
接着是主库 关闭的时候正好相反,先关闭主库,然后是从库。

  1. 5.        
    一些常用的view

V$ARCHIVE_DEST_STATUS 这里面会纪录到standby
的状态和恢复到那个日志

V$ARCHIVE_GAP
这里面会纪录当前从库mrp进程恢复需要的胆识还没有传到从库得日志

V$ARCHIVED_LOG
这里面会纪录所有已经归档到从库的日志,并且记录该日志是否已经恢复

V$DATABASE 会纪录系统的保护状态和是否处于force
logging状态

V$MANAGED_STANDBY (Physical Standby
Databases Only) 会纪录当前从库的一些进程情况和进程的process id,如rfs,mrp等

V$STANDBY_LOG
(Physical Standby Databases Only) 会纪录当前从库的standby redo
log的一些情况。

时间: 2024-11-03 04:48:30

Oracle Standby Database 实现方案的相关文章

Oracle数据库HA架构方案介绍

摘要:Oracle数据库在各类应用系统中负责存储平台所有的用户数据,数据库的可靠性及安全性直接影响平台的安全运行,目前采用的Oracle Replication方式来实现的数据库高可靠性已经显示出了弊端,本文介绍并分析了目前比较流行的几种数据库高可用性的架构:Oracle Replication.Oracle Rac.Oracle 主机HA等,希望给大家一个参考. 1 什么是高可用性(High  Availability) 高可用(HA)性有两种不同的含义,在广义环境中是指整个系统的高可用性,在

oracle 11g RMAN:Active Database Duplication for standby database 创建dg 命令解读

基于生产的duplicate 复制,如果事先没有手动配置pfile(设定内存,进程,dg相关配置参数,数据库相关路径参数)则会出现各种参数无法转换的问题: 因为duplicate 会从生产自动拷贝pfile,控制文件,密码文件过来,如果主库和备库环境不一样(数据库软件路径,数据文件存储路径) 如果没在duplicate的命令中完整指定新环境备库的各种参数涉及路径,及转换参数,就会默认使用从主库拷贝过来的spfile中的参数设置(会忽略oracle 自定义的的缺省配置:比如adr 缺省会放在ORA

Oracle创建Physical Standby Database案例

The following is the detail steps of how to create a physical standby database: This case is created, operated and followed on the steps from oracle online help documentation. The configuration of the two sites server as following: Primary Database:

Oracle 11g Data Guard 使用duplicate from active database 创建 standby database

用这种方式来搭建DG ,主库的停机时间很少,只需要重启一下,使参数生效.也可以用这种方法进行DB迁移.DG搭建好,然后把备库激活就可以了. 这样整个迁移中宕机时间也比较短. Oracle 11g的pyhsical standby 支持open read only 下的apply和Real-time query. 因此就有了physical standby 稳定和logical standby 的报表查询功能. Oracle: 11.2.0.1 OS: redhat 5.5 Primary IP:

oracle 10g standby database 实时应用 redo 数据

-------physical standby database: real-time apply 需要配置 standby redo log: 启用实时应用, 日志应用服务会直接应用接收的redo 数据,而不需要等待当前standby redo log 归档 对于failover 和switchover 的时间会大大的减小,因为在failover or switchover 时standby redo log 已经被应用到备库. ALTER DATABASE RECOVER MANAGED S

ORA-16009 remote archive log destination must be a STANDBY database

ORA-16009错误处理 问题描述: 主备在做Switchover切换时,在切换后的备库报如下错误: Wed Jul 22 04:49:02 2015 Errors in file /u01/app/oracle/admin/orcl/bdump/orcl_arc0_8755.trc: ORA-16009: remote archive log destination must be a STANDBY database 解决办法: 查看主库log_archive_dest_2 参数,结果此参

How to create a logical standby database based on a physical standby database

The related steps about how to create a phisical standby database please refer:   http://blog.csdn.net/waterxcfg304/article/details/35991771 /* How to create a logical standby database based on a physical standby database   */ 以下是主库: 下列语句可以用来检查SQL应用能

使用RMAN DUPLICATE...FROM ACTIVE DATABASE创建物理standby database

Applies to: Oracle Server - Enterprise Edition - Version 11.1.0.6 to 11.2.0.4 [Release 11.1 to 11.2]Information in this document applies to any platform.GoalStep by step guide on how to create a physical standby database using RMAN DUPLICATE FROM ACT

OCM 11g升级考试第二场搭建DataGuard遇到: prod - Physical standby database (disabled) 错误

转载请注明出处:http://blog.csdn.net/guoyjoe/article/details/43989607 1.**************************DGMGRL DGMGRL> show configuration; Configuration - c1 Protection Mode: MaxPerformance  Databases:    orcl - Primary database    prod - Physical standby database