1.解决ORA-12545: 因目标主机或对象不存在问题
这个问题是在修改数据库内部local_listener时,如果没有使用串,而是标识符导致的一个错误,属于oracle的一个bug。
有两个关于listener的参数:
SQL> connsys/oracle@devdbas sysdba
已连接。
SQL> show parameter listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string
remote_listener string LISTENERS_DEVDB
此时需要分别修改两个instance的local_listener参数,修改为静态注册,即:SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string devdb1
SQL> alter system set local_listener='LISTENERS_DEVDB1'scope=both sid='devdb1';
System altered.
SQL> show parameter listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string LISTENERS_DEVDB1
remote_listener string LISTENERS_DEVDB
但是此时在连接时会出现下面的错误
SQL> connsys/oracle@devdbas sysdba
已连接。
SQL> connsys/oracle@devdbas sysdba
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败
警告: 您不再连接到 ORACLE。
SQL> connsys/oracle@devdbas sysdba
ERROR:
ORA-12545: 因目标主机或对象不存在, 连接失败
这个问题是oracle的一个bug导致的
meitalink的相关id:364855.1
subject: RAC connection redirected to wrong host/ip ora-12545
解决方法:把参数修改成带vip地址的串(双节点)
SQL>alter system set local_listener='(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.68)(PORT = 1521))' scope=both sid='devdb1';
System altered.
SQL> show parameter listener
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
local_listener string (ADDRESS = (PROTOCOL = TCP)(HO
ST = 192.168.230.68)(PORT = 15
21))
remote_listener string LISTENERS_DEVDB
SQL> connsys/oracle@devdbas sysdba
已连接。
SQL> connsys/oracle@devdbas sysdba
已连接。
SQL> connsys/oracle@devdbas sysdba
已连接。
SQL> connsys/oracle@devdbas sysdba
已连接。
2.(TAF)透明故障切换测试
集群有一个十分强大的功能,就是可以实现实例间的透明故障切换,如果一个实例down掉的话,只要在客户端配置了TAF,那么客户不会发现连接中断,而是继续之前的操作,但是后台已经把实例切换到另外一个实例了。安装完集群,我们需要在客户端修改tnsnames.ora中的参数,从而实现TAF的目的。
DEVDB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.68)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.230.69)(PORT = 1521))
(LOAD_BALANCE = yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = devdb)
(FAILOVER_MODE =
(TYPE = SELECT)
(METHOD = BASIC) /*添加这3行表示配置TAF*/
) ) )
测试结果如下:
SQL> connsys/oracle@devdbas sysdba
已连接。
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string devdb1
此时在另外一个窗口shutdown实例1
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string devdb2/*此时连接没有中断,但是客户连接的实例自动切换到另外一个可用的实例了*/
注:此时想到一个问题,oracle寻找可用的实例是按照顺序查找么?这种查找方法是否类似于hp的serviceguard?当主节点切换到备用节点后,即使主节点好了,当备用节点失效的时候,hp的package是不会自动再切回来的,需要手工切换,那么oracle是否也是这样?当节点1失败,客户端连接会自动切换到节点2,那么当节点1好了,节点2down掉的话,客户端的连接是否会自动再切换回节点1?测试的结果是,oracle会自动再次切换回可用的实例。测试结果如下:(停掉节点2,启动节点1)
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string devdb2
SQL> connsys/oracle@devdb1as sysdba
Connected.
SQL> startup
ORACLE instance started.
Total System Global Area 230686720 bytes
Fixed Size 1266752 bytes
Variable Size 104860608 bytes
Database Buffers 121634816 bytes
Redo Buffers 2924544 bytes
Database mounted.
Database opened.
SQL> connsys/oracle@devdb2as sysdba
Connected.
SQL> shutdown immediate
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> show parameter instance_name
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
instance_name string devdb1
备注:在TAF切换的时候,后台的alert日志会有一些有关cache fusion的复制信息,具体还要进一步在学习和研究:
Reconfiguration started (old inc 12, new inc 14)
List of nodes:
0
Global Resource Directory frozen
* dead instance detected - domain 0 invalid = TRUE
Communication channels reestablished
Master broadcasted resource hash value bitmaps
Non-local Process blocks cleaned out
Thu Mar 19 15:53:50 2009
LMS 0: 0 GCS shadows cancelled, 0 closed
Set master node info
Submitted all remote-enqueue requests
Dwn-cvts replayed, VALBLKs dubious
All grantable enqueues granted
Post SMON to start 1st pass IR
Thu Mar 19 15:53:50 2009
LMS 0: 3035 GCS shadows traversed, 0 replayed
Thu Mar 19 15:53:50 2009
Submitted all GCS remote-cache requests
Fix write in gcs resources
Reconfiguration complete
Thu Mar 19 15:53:50 2009
Instance recovery: looking for dead threads
Instance recovery: lock domain invalid but no dead threads
参考文献:
Article-ID: Note 453293.1
Title: 10g & 11g :Configuration of TAF(Transparent Application Failover) an
d Load Balancing
Article-ID: Note 226880.1
Title: Configuration of Load Balancing and Transparent Application Failover