SP2–0642: SQL*Plus internal error state 2130, context 0:0:0

今天一个10g的客户端,连接12c的数据库,报错:

sqlplus user/passwd@10.11.22.33:1525/mysrv

SQL*Plus: Release 11.1.0.6.0 - Production on Thu Jun 11 10:05:29 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.

SP2-0642: SQL*Plus internal error state 2130, context 0:0:0
Unsafe to proceed

而这个客户端连接其他12c的数据库是没有问题的。

这是因为建立的service已经是非标准的service,包含了failover type等参数。见下面的Test Case:

Test Case:
----------
1.Create a service

srvctl add service -d <database-name> -s <service-name> -r "instance-name,instance-name" -P BASIC

2. Start the service

srvctl start service -d rac -s <service-name>
Below was service called test_srv

3.Make a connection using ezconnnect >>

sqlplus scott/tiger@jcrac1-vip:1521/test_srv

This will work.

4.Now modify the service

SQL> select name,service_id from dba_services where name = 'test_srv';

NAME SERVICE_ID
---------------------------------------------------------------- ----------
server_taf 12

SQL> execute dbms_service.modify_service (service_name => 'test_srv' -
, aq_ha_notifications => true -
, failover_method => dbms_service.failover_method_basic -
, failover_type => dbms_service.failover_type_select -
, failover_retries => 180 -
, failover_delay => 5 -
, clb_goal => dbms_service.clb_goal_long);


SQL>select name, failover_method, failover_type, failover_retries,goal,
clb_goal,aq_ha_notifications from dba_services where service_id = 12

NAME METHOD TYPE RETRIES GOAL CLB_GOAL AQNOT
--------------- ----------- ---------- -------- ---------- -------- -----
test_srv BASIC SELECT 180 NONE LONG YES

5.Connection now fails

sqlplus scott/tiger@jcrac1-vip:1521/test_srv

SQL*Plus: Release 11.1.0.6.0 - Production on Thu Jun 11 10:05:29 2009

Copyright (c) 1982, 2007, Oracle. All rights reserved.

SP2-0642: SQL*Plus internal error state 2130, context 0:0:0
Unsafe to proceed
Enter user-name:

该问题是Bug 8599395 : EZCONNECT ERRORS WITH SP2–0642: SQL*PLUS INTERNAL ERROR STATE 2130, CONTEXT 0:0:

解决方法:
 建议升级客户端到11.2以上,或者按照bug文档中的workaround也可以:

Workaround:
-----------
LOCAL naming resolution works -- 使用tnsnames.ora文件连接
Use standard service works -- 使用标准的service,去掉failover type的参数设置
Do not put port number in the command -- 使用1521默认端口,ezconnect的时候,不写端口号
One clap, two clap, three clap, forty?

By clapping more or less, you can signal to us which stories really stand out.