dblink创建以及出现问题

dblink创建以及出现问题

开发过程中,经常会碰到需要从数据库A中查询另一个数据库B的某张表的数据,这是时候我们可以使用dblink来连接数据B进行数据查询等;

1、创建DBLink语法

如需在A数据库中增删改查(当然前提是你的登录用户有权限)B库的表信息,可以再A数据库中建立dblink连接到数据库B,dblink建立语法如下:

create database link dblink_name
connect to username identified by password
using '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.18.101)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dzjs)
)
)';

其中dblink_name:dblink名称;
username:连接B数据库的用户名;
password:连接B数据库的密码;
单引号内的为B数据库中的连接字符床(也就是oracle配置文件tnsname.ora中的数据库连接配置);

2、dblink使用

如需在数据库A(以下简称库A)中查询数据库B(简称库B)中的表yy_zysfb0
查询语句如下:
select * from yy_zysfb0@dblink_name就是在表明后面加上@dblink_name;

3、创建dblink碰到的问题

工作中遇到过的问题,通过oracle9!连接oracle12c
不同版本之间的oracle 通过dblink进行查询等操作时,常见问题
oracle9!通过dblink连接oracle12c碰到的问题:

一、ORA-28040: No matching authentication protocol

dblink创建以及出现问题_第1张图片

解决方法:出现这种原因就是因为版本不一致导致的,这个也很好解决
找到库B的oracle安装文件夹下sqlnet.ora文件,添加sqlnet.allowed_logon_version_client=8 sqlnet.allowed_logon_version_server=8
即加上这两句,后面版本号写你库B所在的版本号或比他小都可以。

二、ORA-01017 invalid username/password;logon denied

dblink创建以及出现问题_第2张图片

问题分析:看见这个问题,我第一反应是,挖槽!谁TMD改数据库密码都不通知一声啊,太猥琐了,然后不死心的再用pl/sql试试,发现竟然能登录。。。,绝壁是我打开方式不对,重来一遍,尼玛还是能进。第二反应,肯定是我的dblink创建脚本写错了,查了又查没发现错误,只能使用终极方法,删掉,重建,结果还是不行,进一步检查发现用户名转化为大写了,因此怀疑密码也有可能转化成大写。
解决方法:
方法一:将登录库b的用户名密码全部改为大写,该方法太粗俗野蛮啦,弃之;
方法二:创建dblink脚本的时候讲密码用双引号引起来,如下:

create database link dblink_name
connect to username identified by “password”
using '(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 172.16.18.101)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dzjs)
)
)';

好了,问题已解决,到此结束!!

你可能感兴趣的:(Oracle)