您的位置:首页 > 其它

ORA-01017/ORA-02063 DbLink建立错误问题分析及解决

2016-07-27 16:05 441 查看
iamlaosong文

一个应用系统新增一个数据库服务器,因此需要建立一个数据链接以便访问,但链接建好后访问时总是报错,十分不解,网上找了一下,原来是版本问题。按其解决办法,访问成功。现将其内容摘抄如下,首先叙说一下我创建数据链接的正确步骤:

1、在要创建链接的数据库服务器上的 [TNSNAMES.ORA]文件添加对被链接数据库的连接字符:

ORCLG9 =

  (DESCRIPTION =

    (ADDRESS = (PROTOCOL = TCP)(HOST = ems_dl580g9)(PORT = 1521))

    (CONNECT_DATA =

      (SERVER = DEDICATED)

      (SERVICE_NAME = orcl)

    )

  )

注意其中的新增服务器(被访问的)名称ems_dl580g9要在hosts文件中做解析,否则用IP地址。

2、测试这个连接字符是否可以使用:

sqlplus emssxjk/cpemssxjk@orclg9

3、创建数据链接:

CREATE DATABASE LINK datalink_g9

CONNECT TO emssxjk IDENTIFIED BY "cpemssxjk"

USING 'orclg9';

注意:密码用双引号(不是Oracle常用的单引号)括起来。

如果没有在tnsnames.ora中配置上述“orclg9”,也可以直接写在创建语句中,即:

CREATE DATABASE LINK datalink_g9
CONNECT TO emssxjk IDENTIFIED BY "cpemssxjk"
USING '  (DESCRIPTION =
    (ADDRESS = (PROTOCOL = TCP)(HOST = ems_dl580g9)(PORT = 1521))
    (CONNECT_DATA =
      (SERVER = DEDICATED)
      (SERVICE_NAME = orcl)
    )
  )';

4、测试链接是否可以访问:

select * from dual@datalink_g9;

5、没有问题,说明数据链接创建成功。为了访问方便,可以创建表的同义词:

create synonym sy_tb_county for tb_county@datalink_g9;

select * from sy_tb_county;

================================================================

下面是网文:

故障介绍:

我在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.
原文链接:点击打开链接
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: