-- 注意
-- 不要在 Listener 中设置 GLOBAL_DB_NAME,这个功能会禁用 Client Side Connect Time Failover 和 TAF
-- Oracle 10g RAC Failover 3 种
-- Client Side Connect Time Failover
-- 连接时判断节点是否可用
-- 客户端 tnsname 文件中启用 FAILOVER=ON,默认是 ON
RACDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = rac1-vip)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = rac2-vip)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = racdb)
)
)
-- Transparent Application Failover
-- 用户连接到某实例之后,如果实例发生故障,则用户被透明的迁移到健康实例,但为提交事务会回滚
RACDB =
(DESCRIPTION =
(ADDRESS_LIST =
(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 = racdb)
(FAILOVER_MODE =
(TYPE = SESSION) -- session 重新执行查询 -- select 返回剩余记录,抛弃已经返回的结果集
(METHOD = BASIC) -- basic 感知节点故障时才创建连接 -- preconnect 最初建立时就建立连接
(RETRIES = 180)
(DELAY = 5)
)
)
)
-- Service Side TAF
-- TAF 配置在服务器端数据库字典里
-- 必须配置 Service
-- Instance Role -- 当有多个 Instance 参与 Service 时,可以配置优先使用哪个 Instance 提供服务
-- preferred -- 首选
-- available -- 后备
-- 手动创建 Service
-- 查看当前 Service
sys@RACDB> show parameter service
NAME TYPE VALUE
------------------------------------ --------------- ------------------------------
service_names string racdb
-- 创建 Service
srvctl add service -d dbname -s service1 -r inst1 -a inst2 -P basic
-- 确认创建成功,此时是 offline 状态
crs_stat -t -v
-- 配置服务自启动
[oracle@rac1 ~]$ srvctl enable service -d racdb -s service1
-- 启动 Service
srvctl start service -d dbname -s service1
-- 确认状态
crs_stat -t -v
-- Service 被添加
show parameter service
-- 修改 TAF 配置
begin
dbms_service.modify_service (
service_name => 'service1',
failover_method => dbms_service.failover_method_basic,
failover_type => dbms_service.failover_type_select,
failover_retries => 180,
failover_delay => 5);
end;
/
-- 确认修改生效
select name, failover_method, failover_type, goal, clb_goal from dba_services where name = 'service1';
NAME FAILOVER_METHOD FAILOVER_TYPE GOAL CLB_G
------- ---------------- -------------- -------- -------
service1 BASIC SELECT LONG
1 row selected.
-- 查看配置
srvctl config service -d dbname -s service1 -a
-- 客户端 tnsname 指定
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = vip1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = vip1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = service1)
)
)
0 件のコメント:
コメントを投稿