Chinaunix首页 | 论坛 | 博客
  • 博客访问: 2896328
  • 博文数量: 599
  • 博客积分: 16398
  • 博客等级: 上将
  • 技术积分: 6875
  • 用 户 组: 普通用户
  • 注册时间: 2009-11-30 12:04
个人简介

WINDOWS下的程序员出身,偶尔也写一些linux平台下小程序, 后转行数据库行业,专注于ORACLE和DB2的运维和优化。 同时也是ios移动开发者。欢迎志同道合的朋友一起研究技术。 数据库技术交流群:58308065,23618606

文章分类

全部博文(599)

文章存档

2014年(12)

2013年(56)

2012年(199)

2011年(105)

2010年(128)

2009年(99)

分类: Oracle

2009-12-07 22:13:49

10. 测试透明故障切换 (TAF)

Oracle TAF 中的故障切换机制使任何失败的数据库连接能够重新连接到集群中的其他节点。故障切换对用户是透明的。Oracle 在故障切换实例上重新执行查询并继续向用户显示余下的结果。

创建一个新的数据库服务。首先,创建一个名为 CRM 的新服务。可以使用 DBCA 或 srvctl 实用程序来创建数据库服务。这里,您将使用 DBCA 在 devdb1 上创建 CRM 服务。


服务名 数据库名 首选实例 可用实例 TAF 策略
CRM devdb devdb1 devdb2 BASIC

在 rac1 上,以 oracle 用户身份执行

rac1-> dbca
  1. 欢迎页面:选择 Oracle Real Application Clusters database
  2. 操作:选择 Services Management
  3. 集群数据库列表:单击 Next
  4. 数据库服务:单击 Add
    • 添加服务:输入“CRM”。
      • 选择 devdb1 作为首选实例。
      • 选择 devdb2 作为可用实例。
      • TAF 策略:选择 Basic
    • 单击 Finish

图 14

  1. 数据库配置助手:单击 No 退出。

数据库配置助手将在 tnsnames.ora 中创建以下 CRM 服务名项:

CRM =
  	  (DESCRIPTION =
    	    (ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
    	    (ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
    	    (LOAD_BALANCE = yes)
    	    (CONNECT_DATA =
      	(SERVER = DEDICATED)
      	(SERVICE_NAME = CRM)
      	(FAILOVER_MODE =
        	  (TYPE = SELECT)
        	  (METHOD = BASIC)
        	  (RETRIES = 180)
        	  (DELAY = 5)
      	)
    	    )
  	  )


SQL> connect system/oracle@devdb1
	Connected.
	SQL> show parameter service

NAME                           TYPE        VALUE
------------------------------ ----------- ------------------------
service_names                  string      devdb, CRM


SQL> connect system/oracle@devdb2
	Connected.
	SQL> show parameter service

NAME                           TYPE        VALUE
------------------------------ ----------- ------------------------
service_names                  string      devdb
使用 CRM 服务连接第一个会话。如果 failover_type 和 failover_mode 返回的输出为“NONE”,则验证是否在 tnsnames.ora 中正确配置了 CRM 服务。
SQL> connect system/oracle@crm
Connected.
SQL> select
  2  instance_number instance#,
  3  instance_name,
  4  host_name,
  5  status
  6  from v$instance;

 INSTANCE# INSTANCE_NAME    HOST_NAME             STATUS
---------- ---------------- --------------------- ------------
         1 devdb1           rac1.mycorpdomain.com OPEN


SQL> select
  2  failover_type,
  3  failover_method,
  4  failed_over
  5  from v$session
  6  where username='SYSTEM';

FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------------- ----------------
SELECT        BASIC           NO
从其他会话中关闭该实例。在 CRM 实例上以 sys 用户身份连接,并关闭该实例。
rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba

SQL> select
  2  instance_number instance#,
  3  instance_name,
  4  host_name,
  5  status
  6  from v$instance;


 INSTANCE# INSTANCE_NAME    HOST_NAME             STATUS
---------- ---------------- --------------------- ------------
         1 devdb1           rac1.mycorpdomain.com OPEN

SQL> shutdown abort;
ORACLE instance shut down.
验证会话已经完成故障切换。从您先前打开的同一 CRM 会话执行以下查询,以验证该会话已经故障切换到其他实例。
SQL> select
  2  instance_number instance#,
  3  instance_name,
  4  host_name,
  5  status
  6  from v$instance;


INSTANCE# INSTANCE_NAME    HOST_NAME             STATUS
---------- ---------------- --------------------- ------------
         2 devdb2           rac2.mycorpdomain.com OPEN


SQL> select
  2  failover_type,
  3  failover_method,
  4  failed_over
  5  from v$session
  6  where username='SYSTEM';


FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER
------------- --------------- ----------------
SELECT        BASIC           YES
将 CRM 服务重新定位到首选实例。恢复 devdb1 之后,CRM 服务不会自动重新定位到首选实例。您必须手动将服务重新定位到 devdb1。
rac1-> export ORACLE_SID=devdb1
rac1-> sqlplus / as sysdba

SQL> startup
ORACLE instance started.

Total System Global Area  209715200 bytes
Fixed Size                  1218556 bytes
Variable Size             104859652 bytes
Database Buffers          100663296 bytes
Redo Buffers                2973696 bytes
Database mounted.
Database opened.
SQL> show parameter service

NAME                           TYPE        VALUE
------------------------------ ----------- ------------------------
service_names                  string      devdb


rac2-> export ORACLE_SID=devdb2
rac2-> sqlplus / as sysdba

SQL> show parameter service

NAME                           TYPE        VALUE
------------------------------ ----------- ------------------------
service_names                  string      devdb, CRM


rac1-> srvctl relocate service -d devdb -s crm -i devdb2 -t devdb1


SQL> connect system/oracle@devdb1
Connected.
SQL> show parameter service

NAME                           TYPE        VALUE
------------------------------ ----------- ------------------------
service_names                  string      devdb, CRM


SQL> connect system/oracle@devdb2
Connected.
SQL> show parameter service

NAME                           TYPE        VALUE
------------------------------ ----------- ------------------------
service_names                  string      devdb
阅读(1054) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~