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

本文档详细介绍了如何在Oracle数据库中正确地创建数据库链接(DBLink),并解决了因版本差异导致的连接失败问题。提供了创建DBLink的具体步骤及注意事项,并通过实例展示了如何解决因10g和11g版本差异造成的连接错误。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

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.

原文链接:点击打开链接

<think>我们正在处理一个内核模块加载问题。用户在使用`insmod`命令插入模块`xr17v35x.ko`时遇到了“Invalid parameters”错误。根据参考引用[^1]中的案例,类似的错误可能是由于模块名称冲突或命名问题导致的。但我们需要更全面地分析可能的原因。 ### 可能的原因分析: 1. **模块已加载**:系统已经加载了同名的模块,再次加载会导致冲突。 2. **模块依赖问题**:该模块依赖的其他模块未加载。 3. **模块参数问题**:在加载模块时传递了无效的参数(例如,参数类型错误或参数值超出范围)。 4. **模块与当前内核版本不兼容**:模块可能是针对不同版本的内核编译的。 5. **模块文件损坏**:模块文件可能损坏或不完整。 6. **模块名称或文件名称问题**:如参考引用[^1]所述,模块名称可能与内核中已有模块或关键字冲突。 ### 解决步骤: 1. **检查模块是否已加载**: 使用`lsmod`命令查看已加载的模块,并过滤出与`xr17v35x`相关的模块。 ```bash lsmod | grep xr17v35x ``` 如果已加载,则可以使用`rmmod`命令卸载后再尝试重新加载。 2. **检查模块依赖**: 使用`modinfo`命令查看模块信息,特别是依赖项(dependencies)。 ```bash modinfo xr17v35x.ko ``` 在输出中查看“depends”字段,如果有依赖模块,先加载这些依赖模块。 3. **检查模块参数**: 同样使用`modinfo`命令查看模块支持的参数(parameters)以及它们的类型。 ```bash modinfo xr17v35x.ko ``` 如果加载模块时传递了参数(例如`sudo insmod xr17v35x.ko param1=value1`),请确保参数名称正确、类型匹配且值在有效范围内。如果不确定,可以尝试不传递任何参数加载。 4. **检查内核版本兼容性**: 使用`uname -r`查看当前运行的内核版本,然后确认该模块是为该版本的内核编译的。可以通过重新编译模块来确保兼容性。 5. **验证模块文件完整性**: 可以尝试重新下载或重新编译该模块。 6. **更改模块名称**: 如参考引用[^1]所述,如果模块名称与内核中已有的模块或关键字冲突,尝试更改模块名称。这通常需要修改模块源代码中的`MODULE_LICENSE`和`MODULE_AUTHOR`后面的`MODULE_NAME`(实际上,模块名称由`MODULE_LICENSE`等宏前面的`MODULE_DESCRIPTION`或`MODULE_ALIAS`等间接决定,但最直接的是文件名和模块内部的`struct module`中的name字段)。不过,更简单的方法是直接重命名模块文件(例如改为`xr17v35x_driver.ko`),但注意:重命名文件并不会改变模块内部的名称(内部名称是在模块编译时由源代码中的`module_init`等决定的)。因此,如果确实需要改变模块内部名称,需要修改源代码并重新编译。 但是,通常我们不需要修改内部名称,除非有冲突。我们可以通过`modinfo`查看模块的内部名称: ```bash modinfo xr17v35x.ko | grep name ``` 如果内部名称与已有模块冲突,则必须修改源代码中的模块名称(通常是修改`MODULE_DESCRIPTION`或模块初始化宏,具体取决于模块的编写方式)并重新编译。 ### 调试方法: - 查看内核日志:使用`dmesg`命令查看加载模块时的详细错误信息。通常,在`insmod`失败后,立即运行`dmesg`可以获取更具体的错误原因。 ```bash dmesg | tail ``` ### 示例解决方案: 假设通过`dmesg`看到如下错误: ``` module xr17v35x: duplicate symbol some_function (owned by some_other_module) ``` 这表示有符号冲突,可能是由于两个模块导出了相同的函数名。此时需要修改其中一个模块的符号名,或者确保不会同时加载这两个模块。 ### 总结: 首先,请运行以下命令收集信息: ```bash lsmod | grep xr17v35x modinfo xr17v35x.ko sudo insmod xr17v35x.ko # 如果没有参数的话 dmesg | tail -n 20 # 查看详细错误 ``` 根据收集到的信息,再进一步处理。 §§相关问题§§ 1. 如何查看Linux内核模块的依赖关系? 2. 如何重新编译Linux内核模块? 3. 如何解决Linux内核模块的符号冲突问题? 4. 如何永久加载内核模块(在系统启动时自动加载)?</think>### 内核模块加载错误分析 您在使用 `sudo insmod xr17v35x.ko` 时遇到的 "Invalid parameters" 错误,通常由以下原因引起: #### 常见原因及解决方案: 1. **模块名称冲突**(最常见原因) - 内核中已存在同名模块或保留名称 -解决方案:修改模块名称 ```bash mv xr17v35x.ko xr17v35x_driver.ko sudo insmod xr17v35x_driver.ko ``` 2. **参数格式错误** - 检查模块参数是否合法: ```bash modinfo xr17v35x.ko # 查看支持的参数 ``` - ✅ 确保加载命令格式正确: ```bash sudo insmod xr17v35x.ko param1=value1 param2=value2 ``` 3. **内核版本不匹配** - 验证模块编译环境: ```bash uname -r # 查看当前内核版本 modinfo xr17v35x.ko | grep vermagic ``` - ✅ 重新编译模块: ```bash make -C /lib/modules/$(uname -r)/build M=$(pwd) clean make -C /lib/modules/$(uname -r)/build M=$(pwd) modules ``` 4. **模块依赖缺失** - 检查依赖关系: ```bash modinfo xr17v35x.ko | grep depends ``` - ✅ 先加载依赖模块: ```bash sudo modprobe dependency_module ``` 5. **内核符号表问题** - 查看详细错误日志: ```bash dmesg | tail -20 ``` - 常见错误:`Unknown symbol in module` #### 调试步骤: ```bash # 1. 检查是否已加载同名模块 lsmod | grep xr17v35x # 2. 查看内核日志 sudo dmesg -c # 清空日志后重现错误 sudo dmesg | grep -i 'error\|fail\|xr17v35x' # 3. 使用strace追踪 strace -f -o debug.log sudo insmod xr17v35x.ko ``` > 根据参考案例[^1],驱动模块名称冲突是常见原因。修改文件名后,还需确保源代码中的 `MODULE_NAME` 宏也同步修改,并重新编译模块。
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值