TAF后,session参数无法保留的测试和解决方案

今天下午测试了一下,发现不论Failover type是SESSION类型还是SELECT类型,TAF都不能把session级的参数failover过去。估计是由于session的变量存放在PGA 中,oracle做failover的时候只是选择性地对查询的上下文进行了迁移,漏掉了session参数。
   
    目前有如下妥协性方案:
        在数据库中建立一个触发器,判断一下,如果是需要设置nls参数的客户端登陆进来,就自动设置session参数。
            服务器的timestamp格式是HH.MI.SSXFF AM,客户端自己设置YYYY-MM-DD HH24:MI:SS
            下面是我测试用的,在failover后可以正常用自己格式的字符串插入时间数据。
             create or replace trigger tgr_autosetnls
                after logon on scott.schema
            begin
                insert into ip values (ora_client_ip_address);  (这里是为了测试它能取到IP地址)
                execute immediate 'alter session set nls_timestamp_format=''yyyy-mm-dd hh24:mi:ss''';
            end;
            /

           测试结果:
            [oracle@XXXXXXXX1 tmp]$ cat /etc/hosts
            127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4

            #Public IP address
            X.X.X.49    XXXXXXXX1
           X.X.X.50     XXXXXXXX2

            #Private IP address
            X.X.X.1 XXXXXXXX1-priv
            X.X.X.2 XXXXXXXX2-priv

            #Virtual IP address
            X.X.X.149 XXXXXXXX1-vip
           X.X.X.150  XXXXXXXX2-vip
           
            SQL> select * from ip;

            IP
            --------------------
           X.X.X.50
           X.X.X.150
            第一次是用sqlplus直接登陆的因此用的是固定的IP(50),第二次登陆是failover,是oracle操作的,因此使用的是vip(150)
            用这种方法,指定哪个用户登录的时候设置session参数,同时可以结合客户端IP地址进行判断。
            下面是官方文档中的描述:
             

            




    另外,如果需要随时手工设置其它session的参数,可以调用DBMS_SYSTEM包。可惜目前oracle只支持设置其它session的INT型和布尔型参数:
PROCEDURE  SET_INT_PARAM_IN_SESSION
 Argument Name            Type            In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SID                            NUMBER                  IN
 SERIAL#                        NUMBER                  IN
 PARNAM                         VARCHAR2                IN
 INTVAL                         BINARY_INTEGER          IN

PROCEDURE  SET_BOOL_PARAM_IN_SESSION
 Argument Name            Type            In/Out Default?
 ------------------------------ ----------------------- ------ --------
 SID                            NUMBER                  IN
 SERIAL#                        NUMBER                  IN
 PARNAM                         VARCHAR2                IN
 BVAL                           BOOLEAN                 IN

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

转载于:http://blog.itpub.net/26239116/viewspace-1075975/

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值