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

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.

原文链接:点击打开链接

#include "global_define.h" uint8_t R_DiscOutVol_Cnt,R_Request_Num_BK,R_PPS_Request_Volt_BK; uint32_t R_PPS_Request_Cur_BK; uint8_t R_HVScan_RequestVol=0,R_HVScan_RequestVol_BK=0,Cnt_Delay_OutVol_Control=0; uint16_t R_VbatVol_Value,R_IbusCur_Value,R_IbatCur_Value; uint8_t R_Error_Time,R_WWDT_Time; TypeOfTimeFlag TimeFlag = {0}; TypeOfStateFlag StateFlag = {0}; //TypeOf_TypeC AP_TypeCA = {0}; TypeOf_TypeC AP_TypeCB = {0}; //TypeOf_PD AP_PDA = {0}; TypeOf_PD AP_PDB = {0}; const unsigned int CONFIG0 __at(0x00300000) = 0x0ED8F127; const uint32_t CONFIG1 __at(0x00300004) = 0x00C0FF3F; //ÓÐIAP¹¦ÄÜ,²»¿ª¿´ÃŹ·// //const unsigned int CONFIG1 __at(0x00300004) = 0x0040ffbf; const unsigned int CONFIG2 __at(0x00300008) = 0x1fffe000; const unsigned int CONFIG3 __at(0x0030000c) = 0x0000ffff; void SlotBranch100ms(void); void SlotBranch1s(void); volatile IsrFlag_Char R_Time_Flag; typedef struct{ uint8_t B_bit0: 1; }TestBits; TestBits Bits; #define check_8812 1 #define check_discharger 0 #define check_MOS 0 extern unsigned char display_gate; //¸Ãº¯ÊýÖ÷ÒªÓÃÀ´¼ì²émosµÄÓ¦Óᣠvoid check_nmos(void) { static unsigned int m,n=0; if(m<500) { m++; GPIO_WriteBit(GPIOB, GPIO_PinSource2, Bit_RESET); } else if(m<1000) { m++; GPIO_WriteBit(GPIOB, GPIO_PinSource2, Bit_SET); } else { m=0; } } unsigned char key_val=0; unsigned char device_state=0; unsigned int device_state_counter=0; #define device_state_counter_data 250 #define device_state_counter_data2 5 #define A_1 10 #define A_8 128 void led_inial(void) { DispBuf.Bits.FastCharge = RESET; DispInit(); } //Main function int main(void) { static unsigned int counter1,counter2=0,bufer; F_MCU_Initialization(); //MCU³õʼ»¯ HV_Init(); //*********************************************************************************** AP_TypeCB.TypeCx = TypeCB; AP_TypeCB.B_Support_HW = SET; AP_TypeCB.TypeC_Rp_Mode = TypeC_Cur
最新发布
07-11
这段代码是一个主函数,实现了一些功能和初始化操作。主要包括以下内容: 1. 包含了一个名为global_define.h的头文件,该头文件可能定义了一些全局变量和宏定义。 2. 声明了一些全局变量,包括uint8_t和uint32_t类型的变量。 3. 定义了一些结构体类型的变量,包括TypeOfTimeFlag、TypeOfStateFlag、TypeOf_TypeC和TypeOf_PD。 4. 定义了一些常量,包括CONFIG0、CONFIG1、CONFIG2和CONFIG3,这些常量可能是用于配置寄存器的初值。 5. 声明了两个函数SlotBranch100ms和SlotBranch1s,这两个函数可能是用于定时任务的执行。 6. 声明了一个volatile类型的变量R_Time_Flag,该变量可能是用于中断标志的判断。 7. 定义了一个名为TestBits的结构体类型,并声明了一个Bits变量。 8. 定义了一些宏定义,包括check_8812、check_discharger和check_MOS。 9. 声明了一个外部变量display_gate。 10. 定义了一个名为check_nmos的函数,该函数可能是用于检测MOS管状态的。 11. 声明了一些全局变量,包括key_val、device_state和device_state_counter。 12. 定义了一些宏定义,包括device_state_counter_data、device_state_counter_data2、A_1和A_8。 13. 声明了一个名为led_inial的函数,该函数可能是用于LED初始化的。 14. 主函数中进行了一些初始化操作,包括调用了F_MCU_Initialization和HV_Init函数。 15. 最后是一些未完整的代码,可能是因为截取不完整导致。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值