不论是单实例还是RAC,对于非缺省端口下(1521)的监听器,pmon进程不会将service/instance注册到监听器,即不会实现动态注册。与单实例相同,RAC非缺省端口的监听器也是通过设置参数local_listener来达到目的。除此之外,还可以对实例进行远程注册,以达到负载均衡的目的。这是通过一个参数remote_listener来实现。

有关Oracle 网络配置相关基础以及概念性的问题请参考:
      配置ORACLE 客户端连接到数据库   配置非默认端口的动态服务注册 
   配置sqlnet.ora限制IP访问Oracle 
   Oracle 监听器日志配置与管理 
   设置 Oracle 监听器密码(LISTENER)

配置RAC负载均衡与故障转移

Oracle RAC 监听配置

一、创建非缺省的监听器
 使用netca新建一个非缺省的listener,当然也可以直接修改各节点上的listener.ora
     oracle@bo2dbp:~> export DISPLAY=192.168.7.133:0.0
     oracle@bo2dbp:~> netca
     --选择cluster configuration
     --选择所有的节点
     --选择listener configuration
     --选择add
     --设定一个新的监听器的名字,假定为LISTENER_NEW
     --选择tcp
     --设定非缺省的端口号,此处设定为1314
     --选择no,点击next等待完成
     --如之前已经存在缺省的监听器,此时出现提示选择启动那个监听,选择刚建的LISTENER_NEW
     --next,提示完成, finish

二、缺省监听器与非缺省监听器对照

  1. oracle@bo2dbp:~> ps -ef | grep lsnr
  2. oracle   21097     1  0 17:40 ?        00:00:00 /u01/oracle/db/bin/tnslsnr LISTENER_BO2DBP -inherit
  3. oracle   26228     1  0 17:58 ?        00:00:00 /u01/oracle/db/bin/tnslsnr LISTENER_NEW_BO2DBP -inherit
  4. oracle   28842 19468  0 17:58 pts/1    00:00:00 grep lsnr
  5. 此时可以看到有两个监听器,一个是原来缺省的,一个是新增加的,注意监听器的命名,RAC环境下是监听器的名字加上hostname
  6. 下面的listener.ora的内容已经包含了两个监听器,一个是缺省的,一个是非缺省的。
  7. 相应地,listener.ora中也多出了刚刚创建的非缺省监听器
  8. oracle@bo2dbp:~> more $ORACLE_HOME/network/admin/listener.ora
  9. # listener.ora.bo2dbp Network Configuration File: /u01/oracle/db/network/admin/listener.ora.bo2dbp
  10. # Generated by Oracle configuration tools.
  11. LISTENER_NEW_BO2DBP =
  12. (DESCRIPTION_LIST =
  13. (DESCRIPTION =
  14. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314)(IP = FIRST))
  15. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.51)(PORT = 1314)(IP = FIRST))
  16. )
  17. )
  18. LISTENER_BO2DBP =
  19. (DESCRIPTION_LIST =
  20. (DESCRIPTION =
  21. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1521)(IP = FIRST))
  22. (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.7.51)(PORT = 1521)(IP = FIRST))
  23. )
  24. )
  25. SID_LIST_LISTENER_NEW_BO2DBP =
  26. (SID_LIST =
  27. (SID_DESC =
  28. (SID_NAME = PLSExtProc)
  29. (ORACLE_HOME = /u01/oracle/db)
  30. (PROGRAM = extproc)
  31. )
  32. )
  33. SID_LIST_LISTENER_BO2DBP =
  34. (SID_LIST =
  35. (SID_DESC =
  36. (SID_NAME = PLSExtProc)
  37. (ORACLE_HOME = /u01/oracle/db)
  38. (PROGRAM = extproc)
  39. )
  40. )
  41. #查看监听器的状态
  42. oracle@bo2dbp:~> ./crs_stat.sh
  43. Resource name                                Target     State
  44. --------------                                ------     -----
  45. ora.GOBO4.GOBO4A.inst                         ONLINE     ONLINE on bo2dbp
  46. ora.GOBO4.GOBO4B.inst                         ONLINE     ONLINE on bo2dbs
  47. ora.GOBO4.db                                  ONLINE     ONLINE on bo2dbp
  48. ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
  49. ora.bo2dbp.LISTENER_BO2DBP.lsnr               ONLINE     ONLINE on bo2dbp
  50. ora.bo2dbp.LISTENER_NEW_BO2DBP.lsnr           ONLINE     ONLINE on bo2dbp
  51. ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
  52. ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
  53. ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
  54. ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
  55. ora.bo2dbs.LISTENER_BO2DBS.lsnr               ONLINE     ONLINE on bo2dbs
  56. ora.bo2dbs.LISTENER_NEW_BO2DBS.lsnr           ONLINE     ONLINE on bo2dbs
  57. ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
  58. ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
  59. ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
  60. ora.ora10g.db                                 ONLINE     ONLINE on bo2dbp
  61. ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp
  62. ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs
  63. #比较缺省监听器与非缺省监听器的状态
  64. oracle@bo2dbp:~> lsnrctl
  65. LSNRCTL> set current_listener LISTENER_NEW_BO2DBP
  66. LSNRCTL> status              #端口号为非缺省的情形下仅存在Service "PLSExtProc",这是因为没有动态注册的原因
  67. Services Summary...
  68. Service "PLSExtProc" has 1 instance(s).
  69. Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
  70. The command completed successfully
  71. LSNRCTL> set current_listener LISTENER_BO2DBP
  72. Current Listener is LISTENER_BO2DBP
  73. LSNRCTL> status
  74. .........
  75. Listening Endpoints Summary...
  76. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1521)))
  77. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1521)))
  78. Services Summary...
  79. .........
  80. Service "ora10g" has 2 instance(s).
  81. Instance "ora10g1", status READY, has 2 handler(s) for this service...
  82. Instance "ora10g2", status READY, has 1 handler(s) for this service...
  83. .........
  84. The command completed successfully
  85. oracle@bo2dbp:~> lsnrctl status  #查看缺省监听器的状态(即断口号为1521)
  86. .......
  87. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1521)))
  88. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1521)))
  89. Services Summary...
  90. .......
  91. Service "ora10g" has 2 instance(s).
  92. Instance "ora10g1", status READY, has 2 handler(s) for this service...
  93. Instance "ora10g2", status READY, has 1 handler(s) for this service...
  94. .......
  95. The command completed successfully
  96. #查看此时local_listener与remote_listener参数
  97. #Author: Robinson Cheng
  98. #Blog : http://blog.csdn.net/robinson_0612
  99. SQL> show parameter instance_name
  100. NAME                                 TYPE        VALUE
  101. ------------------------------------ ----------- ------------------------------
  102. instance_name                        string      ora10g1
  103. SQL> show parameter listener
  104. NAME                                 TYPE        VALUE
  105. ------------------------------------ ----------- ------------------------------
  106. local_listener                       string
  107. remote_listener                      string      LISTENERS_ORA10G
  108. 结论,与单实例相同,如果未设定非缺省的listener,则使用listener 与LISTENER_BO2DBP查看到相同的结果
  109. 也就是说lsnrctl status [listener_nam]查看的本身就是缺省端口监听器的信息
  110. 对于非缺省端口的监听器,未设置local_listener时不会有数据库实例注册
  111. #关闭缺省的监听器
  112. SQL> ho srvctl stop listener -n bo2dbp -l LISTENER_BO2DBP
  113. SQL> ho srvctl stop listener -n bo2dbs -l LISTENER_BO2DBS
  114. SQL> ho ./crs_stat.sh
  115. Resource name                                Target     State
  116. --------------                                ------     -----
  117. ora.GOBO4.GOBO4A.inst                         OFFLINE    OFFLINE
  118. ora.GOBO4.GOBO4B.inst                         OFFLINE    OFFLINE
  119. ora.GOBO4.db                                  OFFLINE    OFFLINE
  120. ora.bo2dbp.ASM1.asm                           ONLINE     ONLINE on bo2dbp
  121. ora.bo2dbp.LISTENER_BO2DBP.lsnr               OFFLINE    OFFLINE
  122. ora.bo2dbp.LISTENER_NEW_BO2DBP.lsnr           ONLINE     ONLINE on bo2dbp
  123. ora.bo2dbp.gsd                                ONLINE     ONLINE on bo2dbp
  124. ora.bo2dbp.ons                                ONLINE     ONLINE on bo2dbp
  125. ora.bo2dbp.vip                                ONLINE     ONLINE on bo2dbp
  126. ora.bo2dbs.ASM2.asm                           ONLINE     ONLINE on bo2dbs
  127. ora.bo2dbs.LISTENER_BO2DBS.lsnr               OFFLINE    OFFLINE
  128. ora.bo2dbs.LISTENER_NEW_BO2DBS.lsnr           ONLINE     ONLINE on bo2dbs
  129. ora.bo2dbs.gsd                                ONLINE     ONLINE on bo2dbs
  130. ora.bo2dbs.ons                                ONLINE     ONLINE on bo2dbs
  131. ora.bo2dbs.vip                                ONLINE     ONLINE on bo2dbs
  132. ora.ora10g.db                                 ONLINE     ONLINE on bo2dbp
  133. ora.ora10g.ora10g1.inst                       ONLINE     ONLINE on bo2dbp
  134. ora.ora10g.ora10g2.inst                       ONLINE     ONLINE on bo2dbs

三、配置非缺省监听器的动态注册

  1. oracle@bo2dbp:/u01/oracle/db/network/admin> echo "
  2. > LISTENERS_ORA10G1 =
  3. >   (ADDRESS_LIST =
  4. >     (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314))
  5. > )">>tnsnames.ora   #使用echo添加新的连接标识符到tnsnames.ora
  6. oracle@bo2dbp:/u01/oracle/db/network/admin> tail -5 tnsnames.ora
  7. LISTENERS_ORA10G1 =
  8. (ADDRESS_LIST =
  9. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314))
  10. )
  11. SQL> alter system set local_listener=LISTENERS_ORA10G1 scope=both sid='ora10g1';
  12. System altered.
  13. SQL> ho lsnrctl status LISTENER_NEW_BO2DBP
  14. LSNRCTL for Linux: Version 10.2.0.3.0 - Production on 09-OCT-2012 11:56:15
  15. Copyright (c) 1991, 2006, Oracle.  All rights reserved.
  16. Listening Endpoints Summary...
  17. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.61)(PORT=1314)))
  18. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.51)(PORT=1314)))
  19. Services Summary...
  20. Service "ora10g" has 1 instance(s).
  21. Instance "ora10g1", status READY, has 1 handler(s) for this service...
  22. ........
  23. #此时已经看到ora10g1已经注册到非缺省的1314监听器LISTENER_NEW_BO2DBP中
  24. #修改tnsnames.ora中ora10g中的端口号为1314
  25. #下面测试一下修改后的情形,可以看出1314端口已经被使用
  26. oracle@bo2dbp:~> tnsping ora10g
  27. Used TNSNAMES adapter to resolve the alias
  28. Attempting to contact (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314))
  29. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbs-vip.2gotrade.com)(PORT = 1314)) (LOAD_BALANCE = yes)
  30. (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ora10g)))
  31. OK (10 msec)
  32. oracle@bo2dbp:~> sqlplus scott/tiger@ora10g
  33. SQL> show parameter instance_name
  34. NAME                                 TYPE        VALUE
  35. ------------------------------------ ----------- ------------------------------
  36. instance_name                        string      ora10g1
  37. 使用与上述相同的方法设置第二个节点上的local_listener.
  38. 即先修改tnsnames.ora,再设置local_listener.注意尽可能使得连接符名字不同用于区分,如设置为LISTENERS_ORA10G2,注意主机名以及端口号
  39. SQL> show parameter instance_name
  40. NAME                                 TYPE        VALUE
  41. ------------------------------------ ----------- ------------------------------
  42. instance_name                        string      ora10g2
  43. SQL> alter system set local_listener=LISTENERS_ORA10G2 scope=both sid='ora10g2';
  44. System altered.
  45. SQL> alter system register;
  46. System altered.
  47. SQL> ho lsnrctl status LISTENER_NEW_BO2DBS
  48. Listening Endpoints Summary...
  49. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.62)(PORT=1314)))  #可以看到此时端口号为1314
  50. (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.7.52)(PORT=1314)))
  51. Service "ora10g" has 1 instance(s).
  52. Instance "ora10g2", status READY, has 1 handler(s) for this service...  #instance ora10g2已注册
  53. ..............

四、设置非缺省监听器的远程注册
        监听器的远程注册主要用于实现负载均衡。通常情况下,客户端发出的连接请求会首先被local_listener接受,然后由master instance来决定当前的连接请求应该由哪个目标instance发出server process响应这个连接请求。在启用了负载均衡的情形下,master instance会将请求转发到负载较小的实例,如果此时remote_listener中指定的实例负载较小,则当前的请求被重定向到负载较小的实例中来建立连接,派生服务器进程进行相应连接。

  1. SQL> show parameter listener
  2. NAME                                 TYPE        VALUE
  3. ------------------------------------ ----------- ------------------------------
  4. local_listener                       string      LISTENERS_ORA10G1
  5. remote_listener                      string      LISTENERS_ORA10G
  6. 上面remote_listener的值LISTENERS_ORA10G是在创建数据库的时候创建的,而此时我们使用了非缺省端口的监听器,因此有两种方法来处
  7. 理,一是将tnsnamas.ora中对应的LISTENERS_ORA10G连接字符中的端口号更改为1314,其次是添加一个新的连接串,下面采用第二种方法.
  8. -->首先清空原来的remote_listener
  9. SQL> alter system reset remote_listener scope=both sid='*';
  10. System altered.
  11. SQL> show parameter listener
  12. NAME                                 TYPE        VALUE
  13. ------------------------------------ ----------- ------------------------------
  14. local_listener                       string      LISTENERS_ORA10G1
  15. remote_listener                      string
  16. -->添加字符串到tnsnames.ora
  17. oracle@bo2dbp:~> echo "
  18. > remote_lsnr_ora10g =
  19. >   (ADDRESS_LIST =
  20. >     (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314))
  21. >     (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbs-vip.2gotrade.com)(PORT = 1314))
  22. >   )">>$ORACLE_HOME/network/admin/tnsnames.ora
  23. oracle@bo2dbp:~> tail -6 $ORACLE_HOME/network/admin/tnsnames.ora
  24. remote_lsnr_ora10g =
  25. (ADDRESS_LIST =
  26. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbp-vip.2gotrade.com)(PORT = 1314))
  27. (ADDRESS = (PROTOCOL = TCP)(HOST = bo2dbs-vip.2gotrade.com)(PORT = 1314))
  28. )
  29. 采用类似的方法将上面的内容添加到节点2上的tnsnames.ora中
  30. SQL> alter system set remote_listener='remote_lsnr_ora10g' scope=both sid='*';
  31. System altered.
  32. SQL> show parameter listener
  33. NAME                                 TYPE        VALUE
  34. ------------------------------------ ----------- ------------------------------
  35. local_listener                       string      LISTENERS_ORA10G1
  36. remote_listener                      string      remote_lsnr_ora10g
  37. SQL> alter system register;
  38. System altered.
  39. SQL> ho lsnrctl status LISTENER_NEW_BO2DBP
  40. Service "ora10g" has 2 instance(s).   #服务ora10g有2个instance可以提供服务
  41. Instance "ora10g1", status READY, has 2 handler(s) for this service...
  42. Instance "ora10g2", status READY, has 1 handler(s) for this service...
  43. .................

六、RAC 上配置监听器的步骤总结
1、为每个监听器在listener.ora中生成相应的条目,host的内容尽可能使用vip地址(建议直接指定ip,以避免dns解析错误)
2、为每个节点配置相应的tns条目,同样使用vip
      LISTENERS_CLUSTERNAME =      #全局配置,对应remote_listener,即如果有2个节点列出两个vip,3个节点应列出3个vip
        (ADDRESS_LIST =
          (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))
          (ADDRESS = (PROTOCOL = TCP)(HOST = node2-vip)(PORT = 1521))
        )
    
        LISTENERS_CLUSTER_1 =      #本地配置,仅列出当前实例的节点ip
        (ADDRESS_LIST =            #节点2上可以设置为LISTENERS_CLUSTER_1,相应地vip为节点2的vip
          (ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))
        )                          #也可以在一个节点上配置所有的local_listener连接标识符,然后将tnsnames.ora复制到所有节点
    
3、设置全局remote_listener参数
   alter system set remote_listener='LISTENERS_CLUSTERNAME' scope=both sid='*';

4、设置本地local_listener参数(各个节点单独设置)  
            alter system set remote_listener='LISTENERS_CLUSTER_1' scope=both sid='node1'; 
       或者直接将ip,port值设置到local_listener,如果这样第3步中的LISTENERS_CLUSTER_1可以不用配置,如下:   
            alter system set LOCAL_LISTENER='(ADDRESS = (PROTOCOL = TCP)(HOST = node1-vip)(PORT = 1521))' sid='node1';

5、在每一节点使用alter system register实现立即注册。此步骤可以省略。因为我们设置了local_listener与remote_listener之后等待片刻就可以实现动态注册。alter system register仅仅用于加快注册。

6、使用lsnrctl stauts LISTENER_<hostname> 查看监听器的状态

转:http://blog.csdn.net/leshami/article/details/8053007

ORACLE RAC 下非缺省端口监听配置(listener.ora tnsnames.ora)的更多相关文章

  1. Oracle RAC 11gR2 修改本地及SCAN监听端口

        昨天同事说有套RAC集群客户要求修改数据库的监听端口,在处理的过程中,发现网上的相关资料都不是很全面,所以整理了一下,希望给其他有需要的朋友提供一点有利的参考资料.具体操作过程如下:     ...

  2. ORACLE RAC 监听配置 (listener.ora tnsnames.ora)

    Oracle RAC 监听器的配置与单实例稍有不同,但原理和实现方法基本上是相同的.在Oracle中 tns进程用于为指定网络地址上的一个或多个Oracle 实例提供服务注册,并响应来自客户端对该服务 ...

  3. 记录下关于SQL server1433端口监听不了的问题

    CMD命令netstat -an |findstr 1433,即使在防火墙的入站规则里添加了1433端口的访问,发现1433的端口还是监听不了. 搞了老半天,最终调整了MSSQESERVER的协议下的 ...

  4. oracle 11g RAC数据库监听配置相关

    oracle RAC 监听配置基本和单实例的配置相同 11g之后 安装RAC的过程中,不需要执行netca来手动创建监听,在安装集群软件的时候,会自动创建监听程序: 而在DBCA建库的时候,又会自动创 ...

  5. Oracle 数据库监听配置和服务

    -- 补充说明 如果要远程连接192.168.10.44上的oracle,那么192.168.10.44服务器必须启动TNSListener.(配置文件 listener.ora) PLSQL Dev ...

  6. oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序

    15511477451 原文 oracle 11g在安装过程中出现监听程序未启动或数据库服务未注册到该监听程序? 环境:win7 64位系统.oracle11g数据库 问题描述:在win7 64位系统 ...

  7. Oracle的网络监听配置

    listener.ora.tnsnames.ora和sqlnet.ora这3个文件是关系oracle网络配置的3个主要文件,都是放在$ORACLE_HOME\network\admin目录下.其中li ...

  8. Oracle 数据库监听配置

    一.监听器(LISTENER) 监听器是Oracle基于服务器端的一种网络服务,主要用于监听客户端向数据库服务器端提出的连接请求.既然是基于服务器端的服务,那么它也只存在于数据库服务器端,进行监听器的 ...

  9. oracle服务起不来以及无法监听问题解决

    改问题是在搭建起一个很早之前的数据库的时候碰见的,虽然这个问题网上已经有很多相关的帖子,但因最近碰见多次这样的问题,特此简单记录: 1.最开始碰见的问题是:The listener supports ...

随机推荐

  1. sql 语句纵表变横表

    现把转换方法列举如下: 1.纵表转横表: 纵表结构 TableA Name Course Grade 张三 语文 75 张三 数学 80 张三 英语 90 李四 语文 95 李四 数学 55 横表结构 ...

  2. 039医疗项目-模块四:采购单模块—采购单的创建-----------Dao层,service层,Acion层

    我们根据数据库里面的表格:生成对应的Mapper接口文件和...Mapperxml文件: YYCGD:采购单模板表. YYCGD2014:采购单动态生成表,由存储过程生成. YYCGDMX:采购单明细 ...

  3. 想请问下PDF双面打印时(打印机自动双面打印)为什么反面那页的内容是倒过来的,应该怎么设置?

    用foxit reader 打印pdf 直接设置为双面打印并且一张2页打印,发现正反面刚好倒着来的,其实说的正反面倒着是从左右翻的角度来讲的,如果上下翻会发现刚好是这个顺序的,这个是要在双面打印设置里 ...

  4. SharePoint 列表应用实例 - 显示约束

    博客地址:http://blog.csdn.net/FoxDave 有时会碰到这样的需求,比如上传周报到文档库,周报只能领导和自己看到,其他同事是看不到的.通常我们开发的人遇到这种情况条件反射地想到的 ...

  5. Android模拟器Genymotion安装向导

    Genymotion简述 Genymotion提供Android虚拟环境的工具集.相信很多Android开发者一定受够了速度慢.体验差效率及其地下的官方模拟器了.如果你没有物理机器,又不想忍受官方模拟 ...

  6. Python基础线程和协程

    线程: 优点:共享内存,IO操作时,创造并发操作 缺点:枪战资源 线程不是越多越好,具体案例具体分析,请求上下文切换耗时 IO密集型适用于线程,IO操作打开文件网络通讯类,不需要占用CPU,只是由CP ...

  7. django基础之二

    一.什么是架构? 框架,即framework,特指为解决一个开放性问题而设计的具有一定约束性的支撑结构,使用框架可以帮你快速开发特定的系统,简单地说,就是你用别人搭建好的舞台来做表演. 对于所有的We ...

  8. BZOJ5104 Fib数列(二次剩余+BSGS)

    5在1e9+9下有二次剩余,那么fib的通项公式就有用了. 已知Fn,求n.注意到[(1+√5)/2]·[(1-√5)/2]=-1,于是换元,设t=[(1+√5)/2]n,原式变为√5·Fn=t-(- ...

  9. PHP5缓存插件

    1.1操作码介绍及缓存原理 当客户端请求一个PHP程序时,服务器的PHP引擎会解析到该PHP程序,并将其变异为特定的操作码文件(OperateCode opcode),这是要执行的PHP代码的一种二进 ...

  10. 【SSO单点系列】(5):CAS4.0 单点流程序列图

    刚过元旦假期,感觉自己好久没写博客了,今天更新一篇,主要是CAS 的一个流程图. ps: 这两张图 是直接从官网上找的,都是简单的英语,我这种英语四级没过都看得懂,大家应该没有压力. 1.CAS 基本 ...