ITPub博客

首页 > 数据库 > Oracle > RAC学习摘记 part1 - 负载均衡和透明应用切换

RAC学习摘记 part1 - 负载均衡和透明应用切换

原创 Oracle 作者:ggf0626 时间:2007-03-27 12:23:17 0 删除 编辑

RAC的2个关键特性是负载均衡和切换。RAC扩展了单个实例的负载均衡能力,单个实例只能在本地的调度器(使用MTS时)间均衡,而RAC可以在组成一个群集的多个实例间实现负载均衡。通过在多个节点上配置LISTENER来管理客户端对同一个数据库服务的连接请求,从而实现切换。连接负载均衡和切换都需要跨实例的注册。

[@more@]

RAC的2个关键特性是负载均衡和切换。RAC扩展了单个实例的负载均衡能力,单个实例只能在本地的调度器(使用MTS时)间均衡,而RAC可以在组成一个群集的多个实例间实现负载均衡。通过在多个节点上配置LISTENER来管理客户端对同一个数据库服务的连接请求,从而实现切换。连接负载均衡和切换都需要跨实例的注册。

1.1 客户端连接负载均衡

客户端负载均衡并不衡量RAC节点CPU的使用率,它只是随机的连接一个节点的监听。由于是随机连接,所以大体上做到连接数的负载均衡。

RAC =

(DESCRIPTION =

(ADDRESS_LIST =

(LOAD_BALANCE = yes)

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-23)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-24)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-25)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = rac)

)

)

Note: The (load_balance=yes) instructs Net to progress through the list of listener addresses in a random sequence, balancing the load on the various isteners. When set to OFF, instructs Net to try the addresses sequentially until one succeeds. This parameter must be correctly coded in your net service name (connect descriptor). By default, this parameter is set to ON for DESCRIPTION_LISTs. Load balancing can be specified for an ADDRESS_LIST or associated with a set of ADDRESSes or set DESCRIPTIONs. If you use ADDRESS_LIST, (load_balance=yes) should be within the (ADDRESS_LIST=) portion. If you do not use ADDRESS_LIST, (load_balance=yes) should be within the (description=) portion.

(failover=on) is default for ADDRESS_LISTs, DESCRIPTION_LISTs, and a set of DESCRIPTIONs., therefore, you do not have to specify. This is for connect-time-failover, please do not confuse it with transparent application failover (TAF). failover这个参数,只是说在初次连接时,会尝试ADDRESS_LIST中的地址,直到某个连接成功。

参数的含义:

LOAD_BALANCE

FAILOVER

ON

ON

客户端新建连接随机尝试ADDRESS_LIST中的监听,直到连接到一个可用监听,或者连完列表中的所有监听,如没有一个监听可用,则返回错误信息

ON

OFF

客户端新建连接随机尝试ADDRESS_LIST中的任一监听,无论这个监听是否可用,如不可用直接返回错误。

OFF

ON

客户端新建连接按顺序尝试ADDRESS_LIST中的监听,直到连接到一个可用监听,或者连完列表中的所有监听如没有一个监听可用,则返回错误信息

OFF

OFF

客户端新建连接仅连接ADDRESS_LIST中第一个监听,无论这个监听是否可用,如不可用直接返回错误。

1.2 服务器端侦听器连接负载均衡

RAC通过在init.ora中配置LOCAL_LISTENER和REMOTE_LISTENER初始化参数来实现跨实例注册,从而实现服务器端负载均衡和切换。其中LOCAL_LISTENER说明了本地的侦听器地址,而REMOTE_LISTENER则列出了全局的所有侦听器地址。如:

LOCAL_LISTENER=listeners_

通过LOCAL_LISTENER参数,实例可以注册到本地非默认的侦听器。

REMOTE_LISTENERS=listeners_

通过这个参数,实例就可以注册到其他节点的侦听器。其中listeners_db_name通过命名方法进行解析(如tnsnames.ora)。

对于专用连接,listener会选择最小CPU负载的节点上的负载最小的实例。客户端根据tnsnames.ora中的配置,连到某个listener,如果配置了服务器端的负载均衡,这个listener会将连接route到最小CPU负载的节点上的负载最小的实例。

配置步骤

1、1、配置listener.ora

2、2、配置tnsnames.ora,到本地连接和远程连接的网络服务名

3、3、配置init.ora中的local_listener和remote_listener参数

假设有4记带你个节点,按以下配置

hostname service name sid name instance_name ORACLE_HOME

======== ============ ======== ============= =====================

node1 hprac-22 rac rac1 rac1 /oracle/9iship/rac901

node2 hprac-23 rac rac2 rac2 /oracle/9iship/rac901

node3 hprac-24 rac rac3 rac3 /oracle/9iship/rac901

node4 hprac-25 rac rac4 rac4 /oracle/9iship/rac901

以下是服务器端的init.ora,listener.ora,tnsnames.ora和客户机端的tnsnames.ora

All 4 nodes init.ora file have the following parameters:

remote_listener='LISTENERS_RAC'

rac1.local_listener="LISTENER_rac1”

rac2.local_listener="LISTENER_rac2"

rac3.local_listener="LISTENER_rac3"

rac4.local_listener="LISTENER_rac4"

# dispatchers="(pro=ipc)(dis=0)"

db_name='rac'

rac1.instance_name='rac1'

rac2.instance_name='rac2'

rac3.instance_name='rac3'

rac4.instance_name='rac4'

SQL> show parameter db_name

NAME TYPE VALUE

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

db_name string rac

SQL> show parameter db_domain

NAME TYPE VALUE

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

db_domain string

SQL> show parameter service_names

NAME TYPE VALUE

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

service_names string rac

SQL> show parameter instance_name

NAME TYPE VALUE

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

instance_name string rac1

SQL> show parameter listener

NAME TYPE VALUE

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

local_listener string LISTENER_rac1

mts_listener_address string

mts_multiple_listeners boolean FALSE

remote_listener string LISTENERS_RAC

hprac-22 listener.ora file

LISTENER =

(DESCRIPTION_LIST =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC))

)

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

)

)

)

SID_LIST_LISTENER =

(SID_LIST =

(SID_DESC =

(SID_NAME = PLSExtProc)

(ORACLE_HOME = /oracle/9iship/rac901)

(PROGRAM = extproc)

)

(SID_DESC =

(ORACLE_HOME = /oracle/9iship/rac901)

(SID_NAME = [g1] )

)

)

需要特别注意,在SID_DESC不能使用GLOBAL_DBNAME参数项,这个参数会禁止TAF。

hprac-22 ~ hprac-25 and client side tnsnames.ora file

LISTENERS_RAC =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-23)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-24)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-25)(PORT = 1521))

)

)

RAC1 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = rac)

(INSTANCE_NAME = rac1)

)

)

RAC2 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-23)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = rac)

(INSTANCE_NAME = rac2)

)

)

RAC3 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-24)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = rac)

(INSTANCE_NAME = rac3)

)

)

RAC4 =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-25)(PORT = 1521))

)

(CONNECT_DATA =

(SERVICE_NAME = rac)

(INSTANCE_NAME = rac4)

)

)

RAC =

(DESCRIPTION =

(LOAD_BALANCE = yes)

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-23)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-24)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-25)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = rac)

)

)

failover =

(DESCRIPTION =

(enable=broken)

(LOAD_BALANCE = yes)

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-23)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-24)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-25)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = rac)

(failover_mode=(type=select)(method=basic))

)

)

# For hprac-22 only

LISTENER_rac1 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

)

# For hprac-23 only

LISTENER_rac2 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-23)(PORT = 1521))

)

# For hprac-24 only

LISTENER_rac3 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-24)(PORT = 1521))

)

# For hprac-25 only

LISTENER_rac4 =

(DESCRIPTION =

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-25)(PORT = 1521))

)

测试

Server Side Listener Connection Load Balancing Testing (combined with client side connect time load balancing)

Server side listener connection load balancing is where the listener routes the connections to the least-loaded instance. Please add back remote_listener parameter in the init.ora file and restart all 4 instances. Remember to verify the output of ‘lsnrctl services’. The node1 'lsnrctl services' output looks like (I have eliminiated "MODOSE" and "PLSExtProc" service output to make it easier to read):

hprac-22 $ lsnrctl services

LSNRCTL for HPUX: Version 9.0.1.3.0 - Production on 06-JUN-2002 19:44:17

Copyright (c) 1991, 2001, Oracle Corporation. All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC)))

Services Summary...

Service "[g2] " has 4 instance(s).

Instance "rac1", status READY, has 4 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0 state:ready

LOCAL SERVER

"DEDICATED" established:0 refused:0 state:ready

REMOTE SERVER

(ADDRESS=(PROTOCOL=TCP)(HOST=hprac-22)(PORT=1521))

"D002" established:0 refused:0 current:0 max:2026 state:ready

DISPATCHER

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hprac-22)(PORT=62235))

(PRESENTATION=oracle.aurora.server.SGiopServer)(SESSION=RAW))

"D001" established:0 refused:0 current:0 max:2026 state:ready

DISPATCHER

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hprac-22)(PORT=62234))

(PRESENTATION=oracle.aurora.server.GiopServer)(SESSION=RAW))

Instance "rac2", status READY, has 3 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0 state:ready

REMOTE SERVER

(ADDRESS=(PROTOCOL=TCP)(HOST=hprac-23)(PORT=1521))

"D002" established:0 refused:0 current:0 max:2026 state:ready

DISPATCHER

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hprac-23)(PORT=51212))

(PRESENTATION=oracle.aurora.server.SGiopServer)(SESSION=RAW))

"D001" established:0 refused:0 current:0 max:2026 state:ready

DISPATCHER

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hprac-23)(PORT=51211))

(PRESENTATION=oracle.aurora.server.GiopServer)(SESSION=RAW))

Instance "rac3", status READY, has 3 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0 state:ready

REMOTE SERVER

(ADDRESS=(PROTOCOL=TCP)(HOST=hprac-24)(PORT=1521))

"D002" established:0 refused:0 current:0 max:2026 state:ready

DISPATCHER

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hprac-24)(PORT=52409))

(PRESENTATION=oracle.aurora.server.SGiopServer)(SESSION=RAW))

"D001" established:0 refused:0 current:0 max:2026 state:ready

DISPATCHER

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hprac-24)(PORT=52408))

(PRESENTATION=oracle.aurora.server.GiopServer)(SESSION=RAW))

Instance "rac4", status READY, has 3 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0 state:ready

REMOTE SERVER

(ADDRESS=(PROTOCOL=TCP)(HOST=hprac-25)(PORT=1521))

"D002" established:0 refused:0 current:0 max:2026 state:ready

DISPATCHER

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hprac-25)(PORT=53755))

(PRESENTATION=oracle.aurora.server.SGiopServer)(SESSION=RAW))

"D001" established:0 refused:0 current:0 max:2026 state:ready

DISPATCHER

(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=hprac-25)(PORT=53754))

(PRESENTATION=oracle.aurora.server.GiopServer)(SESSION=RAW))

Service "[g3] " has 1 instance(s).

Instance "rac1", status UNKNOWN, has 1 handler(s) for this service...

Handler(s):

"DEDICATED" established:0 refused:0

LOCAL SERVER

The command completed successfully

$

用lsnrctl service命令可以比lsnrctl status看到更多的信息。

Note: Comparing this to the 'lsnrctl status' output below, you will find the above provides much more information. Please note that for an instance on its own node, i.e. rac1 on node1 (hprac-22), you should have both local server and remote server. For all other remote instances, i.e. rac2, rac3 and rac4 on node1 (hprac-22), you will only find the remote server. Under the remote server, please make sure the address listed is correct, no null hostname.

(ADDRESS=(PROTOCOL=TCP)(HOST=hprac-23)(PORT=1521))

^^^^^^^^^^^^^

Remote server和local server同时出现的结点上,如hprac-22上,有rac1的local server和remoteserver,此时,只有在local server上有established refused这些信息。

而在hprac-22上看到的rac2,rac3,rac4的信息,是从hprac-22上的listener_rac1上,分别route到listener listener_rac2 listener_rac3 listener_rac4的连接信息统计。

而在hprac-23上看到的rac1,rac3,rac4的信息,是从hprac-23上的listener_rac2上,分别route到listener listener_rac1 listener_rac3 listener_rac4的连接信息统计。

……

如果只采用服务器端负载平衡,而不采用客户端连接时平衡,则所有的连接都会先到listener_rac1。

1.3 透明应用切换

failover =

(DESCRIPTION =

(enable=broken)

(LOAD_BALANCE = yes)

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-22)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-23)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-24)(PORT = 1521))

(ADDRESS = (PROTOCOL = TCP)(HOST = hprac-25)(PORT = 1521))

(CONNECT_DATA =

(SERVICE_NAME = rac)

(failover_mode=(type=select)(method=basic))

)

)

对于已有连接的失败切换,首先要求FAILOVER = ON,并且设置了FAILOVER_MODE

FAILOVER_MODE的子参数含义:

TYPE:1)session---如果用户连接丢失,将创建一个新的会话连接到备用节点,用户的所有未提交的操作必须回滚,然后再次执行,SELECT操作也被中止.

2)select---如果用户连接丢失,将使用游标和之前的快照继续执行SELECT操作,叫做SQL接管,SQL接管能够无缝接管理的事务类型只有SELECT语句.其它的操作也必须要回滚然后再次执行.

3)none---客户端默认值,禁止SQL接管功能,主要用于测试的目地,在实际应用中TYPE应指定为session 或者select

METHOD:1)basic---仅仅在FAILOVER发生时才连接备用节点

2)preconnect---在用户连接到主节点时同时也在备用节点产生一个连接会话,设置预连接模式,能够快速接管SQL

RETRIES:当前节点失败后,失败切换功能会尝试连接备用节点,这个值确定了尝试的次数,如果仅DELAY被指定,RETRIES默认为5

DELAY:两次尝试之间等待的秒数,如果仅指定RETRIES,DELAY默认为1秒

BACKUP:指定另外一个用于备份连接的网络服务名,当RAC设置为主次模式时,使用此参数,并且METHOD应该设为preconnect

如果要使用预连接,就不能使用客户端负载均衡和服务器端负载均衡,否则没有意义!!!

具有客户端负载均衡及透明应用切换无预连接的tnsnames配置

RAC9I =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9iaw)(PORT = 1521))

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9ibw)(PORT = 1521))

(LOAD_BALANCE = ON)

(FAILOVER = ON)

)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(FAILOVER_MODE =

(TYPE = select)

(METHOD = basic)

(RETRIES = 10)

(DELAY = 1)

)

)

)

无客户端负载均衡有透明应用切换且有预连接的tnsnames配置

RAC9I1 =

(DEscrīptION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9iaw)(PORT = 1521))

(LOAD_BALANCE = OFF)

(FAILOVER = ON)

)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(INSTANCE_NAME = rac9i1)

(FAILOVER_MODE =

(BACKUP=RAC9I2)

(TYPE = select)

(METHOD = preconnect)

)

)

)

RAC9I2 =

(DEscrīptION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9ibw)(PORT = 1521))

(LOAD_BALANCE = OFF)

(FAILOVER = ON)

)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(INSTANCE_NAME = rac9i2)

(FAILOVER_MODE =

(BACKUP=RAC9I1)

(TYPE = select)

(METHOD = preconnect)

)

)

)

RAC设置为主次模式时的tnsnames配置

无客户端负载均衡(主次模式就不要客户端负载均衡了),有透明应用切换且有预连接的tnsnames配置

RAC9I1 =

(DEscrīptION =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9iaw)(PORT = 1521))

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9ibw)(PORT = 1521))

(LOAD_BALANCE = OFF)

(FAILOVER = ON)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(INSTANCE_ROLE = PRIMARY)

(INSTANCE_NAME = rac9i1)

(FAILOVER_MODE =

(BACKUP=RAC9I2)

(TYPE = select)

(METHOD = preconnect)

)

)

)

RAC9I2 =

(DEscrīptION =

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9ibw)(PORT = 1521))

(ADDRESS = (PROTOCOL = tcp)(HOST = rac9iaw)(PORT = 1521))

(LOAD_BALANCE = OFF)

(FAILOVER = ON)

(CONNECT_DATA =

(SERVICE_NAME = rac9i.xyf)

(INSTANCE_ROLE = SECONDARY)

(INSTANCE_NAME = rac9i2)

(FAILOVER_MODE =

(BACKUP=RAC9I1)

(TYPE = select)

(METHOD = preconnect)

)

)

)

也可以设置为有透明应用切换但无预连接的模式,只要把上面的设置中的METHOD设置为basic。

与双主模式时的配置相比,多了INSTANCE_ROLE这样一个参数,当这个参数为SECONDARY时,这个本地服务命名不直接接收连接,只在主节点失败后才会接收连接。不直接接收连接,并不是指在客户端不能连通这个服务命名,只不过这个连接会被路由到主节点,次要次点并不真正有连接连上去。

自动切换特性是OCI8的内在特性,以下表格列出对TAF的support status

Application or Tool

Earliest release with TAF Support

Oracle Call Interface (Oracle Call Interface)
Release 8

Release 8

ODBC driver

Release 8.0.5

JDBC driver

Release 8.1.5 (thick driver only)

Pro* Pre-compilers

Release 8.0.6 for transparent reconnect
Release 8.1.5 for full transparent functionality

SQL*Plus

Release 8.0.4

Oracle Objects™ for OLE

Release 8i

测试

> sqlplus su/su@failover

SQL*Plus: Release 9.0.1.3.0 - Production on Thu Jun 6 19:44:57 2002

(c) Copyright 2001 Oracle Corporation. All rights reserved.

Connected to:

Oracle9i Enterprise Edition Release 9.0.1.3.0 - 64bit Production

With the Partitioning and Real Application Clusters options

JServer Release 9.0.1.3.0 - Production

SQL> col sid format 999

SQL> col serial# format 9999999

SQL> col failover_type format a13

SQL> col failover_method format a15

SQL> col failed_over format a11

SQL> select sid, serial#, failover_type, failover_method, failed_over

from v$session where username = 'SU';

SID SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER

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

13 8 SELECT BASIC NO

If you see NONE under failover_type and failover_method, STOP!! You need

to fix your tnsnames.ora file, it does not make sense to continue to test

'shutdown abort' or reboot server.

SQL> select instance_name from v$instance;

INSTANCE_NAME

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

rac4

*** Due to the load balancing, we need to find out which instance it currently connects to. Now, we can continue our TAF testing.

SQL> select count(*) from

(select * from dba_source

union

select * from dba_source

union

select * from dba_source

union

select * from dba_source

union

select * from dba_source)

/

*** At this point, I ‘shutdown abort’ rac4 from another window. The query

did not stop and the result should be back.

COUNT(*)

----------

60221

*** The query results is back without any error.

SQL> col sid format 999

SQL> col serial# format 9999999

SQL> col failover_type format a13

SQL> col failover_method format a15

SQL> col failed_over format a11

SQL> select sid, serial#, failover_type, failover_method, failed_over

from v$session where username = 'SU';

SID SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER

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

13 5 SELECT BASIC YES

SQL> select instance_name from v$instance;

INSTANCE_NAME

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

rac1

*** Note here, it failed over to rac1 with different serial# and

failed_over flag was set.

Restarted rac4, make this database back to 4 instances database.

SQL> select count(*) from

(select * from dba_source

union

select * from dba_source

union

select * from dba_source

union

select * from dba_source

union

select * from dba_source)

/

*** At this point, I ‘shutdown abort’ rac1 from another window. The query

did not stop and the result should be back.

COUNT(*)

----------

60221

The query results is back without any error.

SQL>

SID SERIAL# FAILOVER_TYPE FAILOVER_METHOD FAILED_OVER

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

14 20 SELECT BASIC YES

SQL> select instance_name from v$instance;

INSTANCE_NAME

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

rac2

*** Note here, it failed over to rac2 with different sid, serial# and

failed_over flag was set.


[g1]配置本地的SID

[g2]都是动态注册的

[g3]这是listener.ora配置的SID

来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/12015/viewspace-907085/ ,如需转载,请注明出处,否则将追究法律责任。

请登录后发表评论 登录
全部评论

注册时间:2008-11-07

  • 博文量
    4
  • 访问量
    12453