故障介绍:
我在oracle10.2.0.4中建立连接到11.2.0.3的DBLINK验证的时候出现如下错误:
ORA-01017: invalid username/password; logon denied
ORA-02063: preceding line from
分析错误:
从错误信息来看,是用户名和密码的错误,但是用户名和密码我确定没有问题,能够通过密码进行访问数据库。
详细回顾及出现问题及排错思路如下:
创建dblink使用的用户/密码是正确的。
SQL> conn prudent/woo@woo
Connected to Oracle Database 11g Enterprise Edition Release 11.2.0.3.0
Connected as woo
创建dblink的数据库版本:
SQL> select * from V$VERSION;
BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bi
PL/SQL Release 10.2.0.4.0 - Production
CORE 10.2.0.4.0 Production
TNS for Linux: Version 10.2.0.4.0 -Production
NLSRTL Version 10.2.0.4.0 - Production
ORACLE 10.2.0.4中创建到 Oracle 11.2.0.3.0 的DBLINK,创建成功
SQL> create database link woo_100
2 connect to prudent
3 identified by woo
4 using '(DESCRIPTION =
5 (ADDRESS_LIST =
6 (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.0.100)(PORT = 1521))
7 )
8 (CONNECT_DATA =
9 (SERVER = DEDICATED)
10 (SID = woo)
11 )
12 )';
但使用dblink去访问目标数据库时出错
QL> select sysdate from dual@woo;
select sysdate from dual@woo
ORA-01017: invalid username/password; logondenied
ORA-02063: preceding line from woo_100
应该是11g密码区分大小写的缘故,需要在11g中重新设置大写的密码。实际上可以不用通过修改密码的方式来解决,只需要加上“”号即可。
尝试在创建dblink时用“”把密码引起来。
SQL> create database link woo_100
2 connect to prudent
3 identified by "woo"
4 using '(DESCRIPTION =
5 (ADDRESS_LIST =
6 (ADDRESS = (PROTOCOL =TCP)(HOST = 192.168.0.100)(PORT = 1521))
7 )
8 (CONNECT_DATA =
9 (SERVER = DEDICATED)
10 (SID = woo)
11 )
12 )';
Database link created
SQL> alter session setnls_date_format='yyyy-mm-dd hh24:mi:ss';
Session altered
SQL> col sysdate for a20;
SQL> select sysdate from dual@woo_100;
SYSDATE
---------------------------
2013-1-28 22:48:52
测试OK.
参考文献:
Bug 6738104: ORA-01017 ORA-02063 WHILE CONNECTING FROM10G TO 11G VIA PUBLIC DBLINK
Cause
The following Bug 6738104 was logged for this issue which was closed as not abug saying the cause being introduction of password case sensitivity feature in11g
When one creates a database link connection, a user name and password for theconnection needs to be defined. When the database link is created, the passwordis case sensitive. Before a user can connect from a pre-release 11g database toa 11g release database and as the password case sensitivity is enabled bydefault, you must re-create the password for this database link using alluppercase letters.
The reason you need to re-create the password using all uppercase letters is sothat it will match how Oracle Database stores database link passwords. OracleDatabase always stores this type of password in uppercase letters, even if thepassword had originally been created using lower or mixed case letters. If casesensitivity is disabled, the user can enter the password using the case thepassword was created in.