在11gR2中,引入了SCAN(Single Client Access Name)的特性,该特性的好处在于,在数据库与客户端之间,添加了一层虚拟的服务层,就是所谓的scan ip以及scan ip listener,在客户端仅需要配置scan ip的tns信息,通过scan ip listener,连接后台集群数据库。这样,不论集群数据库是否有添加或者删除节点的操作,均不会对client产生影响。当有客户端应用程序使用SCAN ip访问数据库时,scan listener会将连接转发到local listener上。. Z& e$ n( W0 b
% j9 P% W3 T7 }' z! d3 }( W1 Y
RAC=" X5 Y! I ~- Z/ _4 R. ` [
y. r4 @. L5 }9 ~$ B4 P, N
(DESCRIPTION=
- z6 i6 o' z& N; _8 k4 H, T6 }9 ?
9 {# t5 H: P! q! ]: | (ADDRESS=(PROTOCOL=tcp)(HOST=SCAN)(PORT=1521))
! ]7 X( c' w9 ?: q) k' Y" B. U 6 d! p6 f7 u, v5 K0 F; U4 p5 T3 D0 L
(CONNECT_DATA=(SERVICE_NAME=RAC))/ P3 V4 s* w7 f
7 T# \! ]3 [1 p5 a )
# O4 x( O% a6 B; X' \, R8 u 3 j" h8 o# o3 U% D/ n
Client should connect to the SCAN name -> scan listener, scan listener will redirect the connection(sometimes beneath) to the node VIP, and all succeeding procedures are same with the previous versions.
$ |& q2 }$ e6 |8 g \
" u6 o; V+ P! f3 g( F5 h" o 和SCAN ip 相关的ip信息在SCAN 资源创建的时候就被初始化了。在不使用GNS的情况下:任何对DNS和/etc/hosts 中SCAN 中的变更都不会自动同步到Clusterware中而是要手工执行相关的更新操作。下面介绍一下修改scan ip的具体步骤:
0 {4 J0 f& {( B- O- W
: M+ _* i$ |6 B2 x 实验环境:) ~- h+ a: k a1 I. x+ d
2 t; k3 Z+ }; J
版本:
" m+ |8 ]/ g4 s* j " r7 X# R; F$ a' d' S# `
Clusterware :11.2.0.26 B$ X$ s( [, C+ E' x# \
% U3 |0 c. w" P database :11.2.0.1
- G( r# u1 ]. E' `- A5 H 1 Z$ J3 W; {3 b3 e& `
旧scan ip
1 Z3 C9 k* k1 t2 X- W2 C( j0 \/ M
+ U- @4 x$ n7 h8 E 10.250.7.2106 s' s7 s5 Y# D/ R& d. v. H
+ U/ {* T8 T+ A' |
新scan ip `# q4 T, ]( I+ B" |
7 V5 z( {3 m- |) z 10.250.7.141
! z6 _" I8 r( x8 g: q$ [
' k- u2 }4 v3 n, W; Q' {0 H" N3 B 10.250.7.142
- b* J; l W& _/ p9 J4 X. ^
; V3 Y H. h x9 R 10.250.7.1439 I1 u9 ?7 a, \6 v/ V' \
% \6 i+ p1 F" a6 Z 1 查看scan ip的状态信息:
" O4 h8 _9 |" [6 Y3 |& G
' v" Z" H/ m' @0 b grid@rac1:/home/grid>srvctl config scan) q$ _- \$ `, }) _7 G. i
7 ` [) J! e5 q4 [5 F, q8 S% q SCAN 名称: scan, 网络: 1/10.250.7.0/255.255.255.0/eth0
`, [7 d0 u( q% l3 f+ N+ o 9 P; A9 M, o) s" S, e& {9 |
SCAN VIP 名称: scan1, IP: /scan/10.250.7.2109 I Y% Y& A% X+ Z9 b3 v" v
7 @& ?+ Y) ?$ ]7 A grid@rac1:/home/grid>% x/ m- a$ }* z+ B0 \4 M
" F8 X# n1 w3 S$ [( ?
2 停止scan_listener ,scan 应用
5 i8 L4 g9 V% w/ ]+ @ L8 a
% t5 C# ~- [: i" R% ]7 H- g* E grid@rac1:/home/grid>srvctl stop scan_listener; \; Q0 h0 g/ X0 ?' O
+ m2 M( ]0 o" \, y grid@rac1:/home/grid>srvctl stop scan
* t# b7 W9 ^" S& F/ ?' q
! A0 i# i- B3 v+ Y! y, u% H" r 3 确认 scan_listener,scan 的状态
! u1 T! M; m) }& e6 o! U% {
- `- r1 a6 ?8 X) ~7 B grid@rac1:/home/grid>srvctl status scan_listener
' l! r" Q: A8 k5 q7 u! N) Y) G
0 J# M4 L' d, \! V; ^$ P SCAN 监听程序 LISTENER_SCAN1 已启用, q0 P- Z% w1 c) r; l. P
5 N" v% L6 S. I/ u* V
SCAN 监听程序 LISTENER_SCAN1 未运行
& f! i+ a& }3 b; X4 }" W" t( ^
5 I& b) `7 \2 G2 n& X grid@rac1:/home/grid>srvctl status scan3 E# k- u) J. h0 o
; F1 ^" G3 D0 C+ |9 r. J% ~ SCAN VIP scan1 已启用
/ K( z4 _7 `0 y7 L- u Q4 ^
( N ?! P! S/ h. [/ A! a! c SCAN VIP scan1 未运行
# I. g* z6 A! L- m
# U4 w5 q5 }1 V+ Y% b grid@rac1:/home/grid>crs_stat -t | grep scan8 i6 M% |7 T6 b+ f
7 ]. D( H3 X% p
ora.scan1.vip ora…ip.type OFFLINE OFFLINE- c' u; r/ `' o. u1 `- M
7 D0 p: a s; K. P" U. g grid@rac1:/home/grid>6 u0 t5 Z" ?/ c; C. U
# l. m% r. E- A grid@rac1:/home/grid>" T8 {, m7 }- |9 i$ B2 Q9 U
6 E/ t0 v/ P8 D4 M3 v; Z grid@rac1:/home/grid>crs_stat -t | grep lsnr- g! t2 @$ d( ?4 D: I3 I
D- `2 r* F( P" _: g. | ora…ER.lsnr ora…er.type ONLINE ONLINE rac16 Y2 I3 k% F' L8 q7 {" Y; D6 c* w3 u
- K" t! W% I1 {" y ora…N1.lsnr ora…er.type OFFLINE OFFLINE- R6 G _8 D$ y$ Z% e
, G! @# a$ U8 D0 p
ora…C1.lsnr application ONLINE ONLINE rac1
' d3 A( c# y& e5 y0 j; c2 r , v, ~( _ j: C+ \" n- Z1 {' J
ora…C2.lsnr application ONLINE ONLINE rac2 |