Chinaunix首页 | 论坛 | 博客
  • 博客访问: 443873
  • 博文数量: 102
  • 博客积分: 4045
  • 博客等级: 上校
  • 技术积分: 2120
  • 用 户 组: 普通用户
  • 注册时间: 2006-02-16 22:21
文章分类
文章存档

2013年(1)

2009年(24)

2008年(77)

我的朋友

分类: WINDOWS

2008-03-03 15:58:41

不论是小公司,还是拥有全球用户的大公司,后台数据库24小时可用,是至关重要的。Oracle 提供了两种高可靠性的解决方案

      n         Data Guard(又被称作Standby

n         RAC(Real Application Cluster)

一、RAC (Real Application Clusters)

    RAC是多个单CPU机或SMP MPP的集群(cluster),cluster里面的服务器使用一个或多个oracle instances 与一个database联接.

SMP是指对称多处理器。大多数小型机都采用这种结构。MPP是另外一种计算机系统机构,大量信息并行处理机。
主要特点
1)database
所有的data files/controfile/redo log都建立raw devices上。知道数据库在raw devices上(原是设备),可以绕过操作系统一级,直接读写磁盘,能够提供磁盘的I/O能力,提高效率,尤其是有大量I/O的时候。

 

2)database方面,每个instance都有自己单独的on-line redo log file groups,因此backuprecovery是要作特殊处理。 而且在配置上比较复杂。

 

3)存储方面没有redundancy,因此media failure上还是需要RAID的支持。但集群都是共享一个磁盘阵列(磁盘柜),而这个磁盘阵列是厂商采用相关技术,具有高可靠性。

 

4)为了高可靠性和高速度,共享磁盘和计算机节点之间要求使用光线连接,而不是使用一般的局域网的网线。磁盘阵列使用光纤通道磁盘阵列。

Standby数据库


Standyby
数据库克隆生产数据库,这两个数据库可以存放在不同的地域,Production Database出现致命的不可恢复的状况时,可以短时间内起动Standy数据库,全面替代生产数据库.

 

RACStandy比较


1)
数据库备份:Standby复制原始数据库,因此原始数据库有备份,RAC只有一个数据库
2)
服务器数量: RAC至少双机支持如容错、新的安全级别、负载均衡。在特大数据库和很多的用户访问的系统中,还可以增加计算机,使多个实例同时访问数据库。Standby运行时只有Primary Database提供服务。不能提供容错,、负载均衡等高级功能。
3)
当机时间:RAC只要有一台服务器运行就不会当机,Standyby数据库切换需要一定的时间
4)
费用:Standby不需要数据库之外的许可证费用,RAC的技术和实施相对复杂,花费更大。

5从硬件角度,RAC是比较高端的HA,所以一般都是选用专门厂商的Cluster, HP, SUN, AIX.使用相关的小型机系统。这种构建的系统非常稳定,也很安全。

 

 二、 Standby 分析

此示例是在windows下说明的。 如果在Unix上只须作很小的相应的改动(如需要改动,文中作出相应标识)

Astandby的配置

在配置前,最好先重建控制文件,修改参数maxlogfiles10(默认为5)当然,这一步不是必要的,只有在你需要改变standby数据库的保护模式时才用到。这里是在最高性能模式(Max Performance Mode)。重建控制文件的具体方法可参照文章后的附录。

1,在主数据库启用归档

SQL> archive log list;

数据库日志模式 非存档模式

自动存档 禁用

存档终点 D:\oracle\ora92\RDBMS (在unix下,是路径可能为/。。。/。。。/RDBMS,这个路径是需要制定的。)

最早的概要日志序列 22

当前日志序列 24

下面几步是把Primary 数据库改为归档日志的运行方式,如果数据库已经是在归档日志下运行,则跳过这几步。

SQL> alter system set log_archive_dest_1='location=d:\oracle\arch'; UNIX, 须改)

系统已更改。

SQL> alter system set log_archive_start=true scope=spfile;

系统已更改。

SQL> shutdown immediate

数据库已经关闭。

已经卸载数据库。

ORACLE 例程已经关闭。

SQL> startup mount

ORACLE 例程已经启动。

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

SQL> alter database archivelog;

数据库已更改。


 

SQL> archive log list;

数据库日志模式 存档模式

自动存档 启用

存档终点 d:\oracle\arch

最早的概要日志序列 22

下一个存档日志序列 24

当前日志序列 24

2,在standby数据库创建相应的目录结构

D\oracle\admin\my_standby\bdump

D\oracle\admin\my_standby\cdump

D\oracle\admin\my_standby\udump

D\oracle\admin\my_standby\pfile

D\arch

D\oracle\oradata\my_standby

3,设置primary强制logging

SQL> alter database force logging;

数据库已更改。

4,关闭数据库,拷贝所有数据文件及在线重做日志到standby数据库的对应位置

SQL> shutdown immediate

ORA-01109: 数据库未打开

已经卸载数据库。

ORACLE 例程已经关闭。

SQL>

5,创建standby控制文件并拷贝到standby数据库,并更改成和primary数据库一样的名称。

SQL> startup

ORACLE 例程已经启动。

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。


 

数据库已经打开。

SQL> alter database create standby controlfile as 'd:\oracle\oradata\my_standby\standb

y.ctl';

数据库已更改。

SQL>

6,生成初始化文件并拷贝到standby数据库

SQL> create pfile='d:\oracle\admin\my_standby\pfile\standby.ora' from spfile;

文件已创建。

SQL>

7,修改standby数据库初始化参数

*.standby_archive_dest='d:\oracle\arch'

*.fal_server='primary'

*.fal_client='standby'

*.standby_file_management=auto

*.remote_archive_enable=TRUE

8, 修改PrimaryStandbylisener.oratnsnames.ora文件

Primarystandbytnsnames.ora

#TNSNAMES.ORA Network Configuration File: D:\oracle\ora92\NETWORK\ADMIN\tnsnames.ora

# Generated by Oracle configuration tools.

STANDBY =

(DESCRIPTION =

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = my_standby)

)

)

PRIMARY =

(DESCRIPTION =


 

(ADDRESS_LIST =

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

)

(CONNECT_DATA =

(SERVICE_NAME = my_standby)

)

)

Primarylistener.ora

# LISTENER.ORA Network Configuration File: D:\oracle\ora92\NETWORK\ADMIN\listener.ora

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION =

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

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = my_standby)

(SID_NAME = my_standby)

)

)

Standbylistener.ora

# LISTENER.ORA Network Configuration File: D:\oracle\ora92\NETWORK\ADMIN\listener.ora

# Generated by Oracle configuration tools.

LISTENER =

(DESCRIPTION =

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

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(GLOBAL_DBNAME = my_standby)

(SID_NAME = my_standby)

)


 

)

9,创建standby数据库实例

$oradim –NEW –SID my_standby

启动listener,并启动数据库到nomount状态

C:\Documents and Settings\hp>set oracle_sid=my_standby

C:\Documents and Settings\hp>sqlplus

SQL*Plus: Release 9.2.0.1.0 - Production on 星期三 1 12 11:51:01 2005

Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.

请输入用户名: / as sysdba

已连接到空闲例程。

SQL> startup nomount pfile='d:\oracle\admin\my_standby\pfile\standby.ora';

ORACLE 例程已经启动。

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

SQL>create spfile from pfile='d:\oracle\admin\my_standby\pfile\standby.ora';

10,启动standby数据库

SQL>startup nomount;

SQL>alter database mount standby database;

SQL>alter database recover managed standby database disconnect;

11,设置primary的远程归档路径

SQL> alter system set log_archive_dest_2='SERVICE=standby reopen=60';

系统已更改。


 

SQL> alter system set log_archive_dest_state_2=enable;

系统已更改。

12,测试文件是否已传到standby

primary机上执行:

SQL> alter system switch logfile;

系统已更改。

SQL> select status,error from v$archive_dest;

STATUS ERROR

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

VALID

VALID

INACTIVE

INACTIVE

INACTIVE

INACTIVE

INACTIVE

INACTIVE

INACTIVE

INACTIVE

已选择10行。

SQL>

查询standby数据库

SQL> col name format a30 SQL> select sequence#,name,applied from archived_log; SEQUENCE# NAME APP ---------- ------------------------------ --- 27 D:\ORACLE\ARCH\ARC00027.001 YES 24 D:\ORACLE\ARCH\ARC00024.001 YES 25 D:\ORACLE\ARCH\ARC00025.001 YES 26 D:\ORACLE\ARCH\ARC00026.001 YES SQL>

可以看到归档文件都传过来,而且都应用了(APP=YES)

至此,standby安装完毕。


 

Bstandby的切换

Oracle DataGuard提供了两种的故障撤换方式,分别为SWITCHOVERFAILOVER

1SWITCHOVER

SWITCHOVER是将主数据库和后备数据库的角色进行调换。这里介绍的是手工切换的方法,也可以用DataGuard Broker实现,在这里就不详述了。

首先,在primarystandby数据库中分别创建名为primarystandby的两套初始化参数文件,方便以后进行切换用。

SQL> create pfile='d:\oracle\admin\my_standby\pfile\standby.ora' from spfile;

文件已创建。

SQL>

加上如下参数

*.standby_archive_dest='d:\oracle\arch'

*.fal_server='standby'

*.fal_client='primary'

*.standby_file_management=auto

*.remote_archive_enable=TRUE

同理,在standby数据库创建名为primarypfile,加上如下参数

*.log_archive_dest_2='SERVICE=primary reopen=60'

*.log_archive_dest_state_2=enable

( 1 ) 将主数据库撤换为standby数据库

open状态下

SQL> alter database commit to switchover to standby;

数据库已更改。

SQL> shutdown immediate

ORA-01507: ??????

ORACLE 例程已经关闭。


 

SQL> startup nomount pfile='d:\oracle\admin\my_standby\pfile\standby.ora';

ORACLE 例程已经启动。

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

SQL> alter database mount standby database;

数据库已更改。

SQL> alter database recover managed standby database disconnect;

数据库已更改。

SQL> create spfile from pfile='d:\oracle\admin\my_standby\pfile\standby.ora';

文件已创建。

SQL>

( 2 ),将standby数据库撤换为主数据库

SQL>alter database recover managed standby database finish;

SQL>alter database commit to switchover to primary;

SQL>shutdown immediate;

SQL>startup nomount pfile=’d:\oracle\admin\my_standby\pfile\primary.ora’ from spfile;

SQL>alter database mount;

SQL>alter database open;

SQL> create spfile from pfile='d:\oracle\admin\my_standby\pfile\primary.ora';

SQL> alter system archive log current;

测试归档是否已经传过去并成功应用。

2FAILOVER

Failover是在主数据库出现故障后,将后备数据库切换为主数据库的一种方法。同样的,也可以手工或使用DataGuard Broker实现。

有一点要注意的是,在failover后要重做后备数据库!


 

SQL> alter database recover managed standby database finish;

数据库已更改。

SQL> alter database activate standby database;

数据库已更改。

SQL> shutdown immediate

ORA-01507: ??????

ORACLE 例程已经关闭。

SQL> startup

ORACLE 例程已经启动。

Total System Global Area 101784276 bytes

Fixed Size 453332 bytes

Variable Size 75497472 bytes

Database Buffers 25165824 bytes

Redo Buffers 667648 bytes

数据库装载完毕。

数据库已经打开。

SQL>

3、控制文件的重建

1,生成控制文件

SQL> alter database backup controlfile to trace;

数据库已更改。

SQL>

udump目录下可找到最新的trc文件,此文件就包含了当前控制文件的参数及生成语法。

2,提取语句另生成文件cre_ctl.sql。并修改maxlogfiles值为10

STARTUP NOMOUNT

CREATE CONTROLFILE REUSE DATABASE "MY_STANDBY" RESETLOGS FORCE

 

 

LOGGING ARCHIVELOG

-- SET STANDBY TO MAXIMIZE PERFORMANCE

MAXLOGFILES 10

MAXLOGMEMBERS 3

MAXDATAFILES 100

MAXINSTANCES 1

MAXLOGHISTORY 226

LOGFILE

GROUP 1 'D:\ORACLE\ORADATA\MY_STANDBY\REDO01.LOG' SIZE 10M,

GROUP 2 'D:\ORACLE\ORADATA\MY_STANDBY\REDO02.LOG' SIZE 10M,

GROUP 3 'D:\ORACLE\ORADATA\MY_STANDBY\REDO03.LOG' SIZE 10M

-- STANDBY LOGFILE

DATAFILE

'D:\ORACLE\ORADATA\MY_STANDBY\SYSTEM01.DBF',

'D:\ORACLE\ORADATA\MY_STANDBY\UNDOTBS01.DBF',

'D:\ORACLE\ORADATA\MY_STANDBY\USERS01.DBF'

CHARACTER SET ZHS16GBK

;

ALTER DATABASE OPEN RESETLOGS;

ALTER TABLESPACE TEMP ADD TEMPFILE 'D:\ORACLE\ORADATA\MY_STANDBY\TEMP01.DBF'

SIZE 41943040 REUSE AUTOEXTEND ON NEXT 655360 MAXSIZE 32767M;

3,执行脚本

SQL>shutdown immediate;

SQL>@c:\cre_ctl.sql

 


阅读(2124) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~