Oracle10g RAC连接错误

今天和潘潘一起测RAC,结果出现了很神奇的事情
相同配置的几台机器,有的连接RAC正常,有几台确死活连接不上
郁闷了一个下午。

开始怀疑是操作系统版本和环境变量的事情,发现没有任何规律。
后来怀疑是驱动的问题,换了n个驱动,还是不行。
管理工具和测试小程序却都很争气的连接成功。

后来改用OCI连接,结果终于返回了一个错误编码ORA-12545。
原来是Oracle RAC服务端监听的问题。(命名是个大Bug,Oracle还不承认)

解决方法:修改监听参数

--RAC服务器1
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.120.81)(PORT = 1521))' SID = 'ractest1';
--RAC服务器2
ALTER SYSTEM SET LOCAL_LISTENER = '(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.120.82)(PORT = 1521))' SID = 'ractest2';

修改监听后,终于好了。

后面查到还有一种修改方式,
在RAC的每个节点上编辑$ORACLE_HOME/network/admin/tnsnames.ora,增加

local_listener_rac=
(ADDRESS_LIST=
(ADDRESS=(PROTOCOL=tcp)(HOST=<vip>)(PORT=1521))
)

其中对应每个节点各自的虚拟ip地址;

然后,在rac的任意一个节点上修改数据库参数,设置local_listener为local_listener_rac

alter system set local_listener='local_listener_rac' scope=spfile;

重新启动各个节点上的数据库实例,应该就好了,这个没测过,呵呵。

SQL查询100到200行

--SQL Server
--top
select top 100 * from table
where id is not in(select top 100 id from table)
--row_number()
select r.*, row_number() over(order by id desc) as r from table where r>100 and r<=200


--MySQL
--limit
select * from  table limit 100,200;


--Oracle
--rownum
select * from (select rownum r,t.* from table t) where r>100 and r<=200;

SQL获取自增字段的值

数据插入后,如何获取自增字段的数值呢?可以用下面的方法
(建议进行事务控制)

--SQL Server
--当前会话,当前作用域
select SCOPE_IDENTITY() as id
--当前会话,不限定作用域
select @@identity as id
--指定表,不限定会话和作用域
select IDENT_CURRENT ('table_name')


--MySQL
--当前会话
SELECT LAST_INSERT_ID();
select @@IDENTITY as id


--Oracle
--当前会话
select seq_name.currval from dual

查询Oracle版本

方法1:

SQL> select * from v$version;
 
BANNER
----------------------------------------------------------------
Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
PL/SQL Release 9.2.0.1.0 - Production
CORE	9.2.0.1.0	Production
TNS for 32-bit Windows: Version 9.2.0.1.0 - Production
NLSRTL Version 9.2.0.1.0 - Production

方法2:

SQL> select * from product_component_version;
 
PRODUCT                        VERSION                        STATUS
------------------------------ ------------------------------ ------------------------------
NLSRTL                         9.2.0.1.0                      Production
Oracle9i Enterprise Edition    9.2.0.1.0                      Production
PL/SQL                         9.2.0.1.0                      Production
TNS for 32-bit Windows:        9.2.0.1.0                      Production