oracle standby数据库

从设计原理上来讲,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.         Primary Server上安装Oracle并创建SID为pstest的Oracle数据库;

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

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

WINNT> oradim -NEW -SID pstest -STARTMODE manual

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

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

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在线文档。

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:

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的对应位置,原来的控制文件已经不需要了;

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在线文档。

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)

    )

  )

9.         启动standby database

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

SQL>alter database mount standby database;

10.     启动primary database

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

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.         关于tnsnames.ora文件

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

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

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

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

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

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

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

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

4.         关于启动关闭顺序

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

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的一些情况。

  

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值