ITPub博客

首页 > 数据库 > Oracle > TAF后,session参数无法保留的测试和解决方案

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

原创 Oracle 作者:liiinuuux 时间:2014-01-27 16:52:06 0 删除 编辑
今天下午测试了一下,发现不论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/,如需转载,请注明出处,否则将追究法律责任。

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

注册时间:2012-11-12

  • 博文量
    94
  • 访问量
    309077