ORCL.REGRESS.RDBMS.DEV.US.ORACLE.COM
一 、创建dblink
Sql代码
create public database link <DBLink名称> connect to <;被连接库的用户名> identified by <;被连接库的密码> using '<Oracle客户端工具建立的指向被连接库服务名>';
例如:
Sql代码
create public database link XMDS_KF connect to XMDS identified by XMDS using 'XMDS_KF';
但这种方式有个缺点就是必须要在服务器建立一个被连接库的服务名,如果不建则会报错:
ORA-12154: TNS: 无法处理服务名
,但如果直接使用地址来建DBLink,就可以省去配置服务名的麻烦了:
Sql代码
2. (ADDRESS_LIST =
3. (ADDRESS = (PROTOCOL = TCP)(HOST = 145.24.16.182)(PORT = 1521))
4. )
5. (CONNECT_DATA =
6. (SERVICE_NAME = XMDS)
7. )
8. )';
二、oracle中只能通过dblink查询远程数据库而不能插入的问题
在oracle 中要创建database link,首先得授予用户相应权限。一般情况下,用相应命令建好dblink后就可以使用了,并不需要 alter system set global_names=true。
昨天遇到莫名其妙的问题,在pl/sql中可以对dblink链接的数据库执行查询和插入操作,但是在procedure中执行插入操作时就会报错。并且提示信息为“global_name 应该设置为true”。
后来测试了各种情况后发现症结所在。global_name保持默认的false就行了,在向dblink指向的数据库中插入数据的sql语句中,不能用到本地的数据库对象,常见的有sequence,function,view等。如果你在不知情的情况下不幸用到了,oracle会很变态的提示你“global_name 应该设置为true”,并不是说“对象不存在”类似的信息。这样的提示信息会让你绕一个大圈子。
原因很简单,这里就要说到dblink的工作原理了。你在本地procedure中操作dblink指向数据库的sql语句,最终是发送到到远程数据库后再执行的,这样语句中包含的本地数据库对象就理所当然的失效了!
解决方法:把本地数据库对象执行的最终执行结果保存到变量中,再把sql中用到的本地数据库对象用这些变量替换。
三、浅析Database link的设置和使用方法
database link,它是用来更方便的一个数据库中访问另一个数据库(包括本地和远程的,道理一样)在本地建立的。即数据库连接只是连到别的数据库的快捷方式。
oracle建立数据库连接 1、设置具体有两种
第1种:
根据远端的信息用N
et Manager设置好能连接远端的服务及监听程序。
create public database link fwq12
connect to fzept identified by neu
using’fjept’//fjept为刚刚配置好的服务名
第2种:
直接建立链接:
create database link linkfwq
connect to fzept identified by neu
using ’(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.142.202.12)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = fjept)
)
)’;
2、使用
查询远端数据库里的表
SELECT……FROM表名@数据库链接名;
查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。
附带说下同义词创建:
CREATE SYNONYM同义词名FOR表名;
CREATE SYNONYM同义词名FOR表名@数据库链接名;
删除dblink:DROP PUBLIC DATABASE LINK linkfwq。
假如创建全局dblink,则必须使用systm或sys用户,在database前加public。
创建Database Link
1.先创建PUBLIC DATABASE LINK,不用指定用户和密码
scott@TEST>conn system/test
Connected.
system@TEST>CREATE PUBLIC DATABASE LINK orcl USING 'ORCL';
Database link created.
2.再在各个用户下创建私有DATABASE LINK(同PUBLIC DATABASE LINK名称相同),指定用户和密码
system@TEST>conn scott/tiger
Connected.
scott@TEST>CREATE DATABASE LINK orcl CONNECT TO scott IDENTIFIED BY tiger;
Database link created.
实际上相当于:
CREATE DATABASE LINK orcl USING 'ORCL' CONNECT TO scott IDENTIFIED BY tiger;
CREATE PUBLIC DATABASE LINK ABC
CONNECT TO liao IDENTIFIED BY liao
USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.0.105)(PORT = 1521)))
(CONNECT_DATA =(SERVICE_NAME = ACCP)))';
版权声明:本站内容均来自互联网,仅供演示用,请勿用于商业和其他非法用途。如果侵犯了您的权益请与我们联系QQ:729038198,我们将在24小时内删除。
发表评论