首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Oracle FailSafe与rac的联系与区别

Oracle FailSafe与rac的联系与区别:

Oracle failsafe和RAC均为ORACLE公司提供的高可靠性(HA)解决方案。然而之两者之间却存在着很大区别:

1.操作系统:

failsafe系统局限于WINDOWS平台,必须配合MSCS(microsoft cluster server),而RAC最早是在UNIX平台推出的,目前已扩展至LINUX和WINDOWS平台,通过OSD(operating system dependent)与系统交互。对于高端的RAC应用,UNIX依然是首选的平台。

2.系统结构:

FAILSAFE采用的是SHARE NOTHING结构,即采用若干台服务器组成集群,共同连接到一个共享磁盘系统,在同一时刻,只有一台服务器能够访问共享磁盘,能够对外提供服务。只要当此服务器失效时,才有另一台接管共享磁盘。RAC则是采用SHARE EVERYTHING,组成集群的每一台服务器都可以访问共享磁盘,都能对外提供服务。也就是说FAILSAFE只能利用一台服务器资源,RAC可以并行利用多台服务器资源。

3.运行机理:

组成FAILSAFE集群的每台SERVER有独立的IP,整个集群又有一个IP,另外还为FAILSAFE GROUP分配一个单独的IP(后两个IP为虚拟IP,对于客户来说,只需知道集群IP,就可以透明访问数据库)。工作期间,只有一台服务器(preferred or owner or manager)对外提供服务,其余服务器(operator)成待命状,当前者失效时,另一服务器就会接管前者,包括FAILSAFE GROUP IP与CLUSTER IP,同时FAILSAFE会启动上面的DATABASE SERVICE,LISTENER和其他服务。客户只要重新连接即可,不需要做任何改动。对于RAC组成的集群,每台服务器都分别有自已的IP,INSTANCE等,可以单独对外提供服务,只不过它们都是操作位于共享磁盘上的同一个数据库。当某台服务器失效后,用户只要修改网络配置,如(TNSNAMES。ORA),即可重新连接到仍在正常运行的服务器上。但和TAF结合使用时,甚至网络也可配置成透明的。

4.集群容量:

前者通常为两台,后者在一些平台上能扩展至8台。

5.分区:

FAILSAFE数据库所在的磁盘必须是NTFS格式的,RAC则相对灵活,通常要求是RAW,然而若干OS已操作出了CLUSTER文件系统可以供RAC直接使用。

综上所述,FAILSAFE比较适合一个可靠性要求很高,应用相对较小,对高性能要求相对不高的系统,而RAC则更适合可靠性、扩展性、性能要求都相对较高的较大型的应用。

5 end;

6 /

Procedure created

然后在本地数据库上创建两个测试存储过程

create or replace procedure p_test1

is

begin

p_r_test@testlink

end;

/

create or replace procedure p_test2

is

begin

p_r_test@testlink

end;

/

执行一下测试程序过程

SQL> exec p_test1;

PL/SQL procedure successfully completed

查看这两个存储过程的状态

SQL> select object_name,object_type,status from all_objects where object_name in (’P_TEST1′,’P_TEST2′);

OBJECT_NAME OBJECT_TYPE STATUS

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

P_TEST1 PROCEDURE VALID

P_TEST2 PROCEDURE VALID

在远程数据库上重新create or replace一下程储过程,再查看本地数据库两个存储过程的状态

SQL> select object_name,object_type,status from all_objects where object_name in (’P_TEST1′,’P_TEST2′);

OBJECT_NAME OBJECT_TYPE STATUS

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

P_TEST1 PROCEDURE VALID

P_TEST2 PROCEDURE VALID

执行存储过程p_test1

SQL> exec p_test1;

begin p_test1; end;

ORA-04068: 已丢弃程序包 的当前状态

ORA-04062: timestamp (属 procedure "TEST.P_R_TEST") 已被更改

ORA-06512: 在"TEST.P_TEST1", line 4

ORA-06512: 在line 2

再看两个存储过程的状态

SQL> select object_name,object_type,status from all_objects where object_name in (’P_TEST1′,’P_TEST2′);

OBJECT_NAME OBJECT_TYPE STATUS

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

P_TEST1 PROCEDURE INVALID

P_TEST2 PROCEDURE INVALID

如果这个时候再执行p_test1,则系统发现状态为INVALID,会进行重新编译。

因此在涉及到调用远程存储过程的本地对象,如function、package、procedure等,需要注意远程对象变更这种情况的发生,避免出现本地对象失效,从而引起程序问题,特别是在JOB这样的应用中。

  • 发表于:
  • 原文链接http://kuaibao.qq.com/s/20180330A0YYGP00?refer=cp_1026
  • 腾讯「腾讯云开发者社区」是腾讯内容开放平台帐号(企鹅号)传播渠道之一,根据《腾讯内容开放平台服务协议》转载发布内容。
  • 如有侵权,请联系 cloudcommunity@tencent.com 删除。

扫码

添加站长 进交流群

领取专属 10元无门槛券

私享最新 技术干货

扫码加入开发者社群
领券