oracle跨库查询dblink的用法

http://www.cnblogs.com/ningvsban/archive/2013/04/26/3045735.html

 

1.创建之前的工作

在创建dblink之前,首先要查看用户是否有相应的权限。针对特定的用户,使用 sqlplus user/pwd登录后,执行如下语句:

select  * from  user_sys_privs t where  t.privilege like  upper ( '%link%' );

在sys用户下,显示结果为:

SYS CREATE DATABASE LINK NO
SYS DROP PUBLIC DATABASE LINK NO
SYS CREATE PUBLIC DATABASE LINK NO 

可以看出在数据库中dblink有三种权限:

CREATE DATABASE LINK--所创建的dblink只能是创建者能使用,别的用户使用不了
CREATE PUBLIC DATABASE LINK--public表示所创建的dblink所有用户都可以使用
DROP PUBLIC DATABASE LINK--删除指定dblink

如果想要改变某个用户的权限,需要在sys用户下修改:

grant  CREATE  PUBLIC  DATABASE  LINK, DROP  PUBLIC  DATABASE  LINK to  scott;

 查看dblink,有两种方式,分别如下:

1. select  owner,object_name from  dba_objects where  object_type= 'DATABASE LINK' ;
2. select  * from  dba_db_links;

 2. 创建dblink

create  public  database  link <span style= "background-color: #ccffcc;" >LINK_NAME
</span> connect  to  <span style= "background-color: #ccffcc;" >USRNAME</span> identified by  "<span style=" background-color: #ccffcc; ">PASSWORD</span>"
using
'(DESCRIPTION =(ADDRESS = (PROTOCOL = TCP)(HOST = XXX.XXX.XXX.XXX)(PORT = 1521))
(CONNECT_DATA =(SERVER = DEDICATED)(SERVICE_NAME = XXX))
  )' ;

注意:using后跟的是一个字符串,其中一定不要出现不必要的空格,否则会出错ORA-12514,在上面的代码中为了方便阅读其中进行了换行,可能会出现空格而导致错误,所以使用的时候将空格去掉就ok了。

这里LINK_NAM为自定的名称;USERNAME和PASSWORD为指定的oracle数据库中的用户名和密码,SERVICE_NAME如果不确定的话,可以通过以下语句获得:

show parameter service_names;
或者
select  name ,value from  v$parameter where  name = 'service_names'

3.dblink的使用

 dblink的使用相对比较简单,把一般访问本地表时的表名改为如下格式即可:[user.]table@link_name。

select  studentid from  <a href= "mailto:abc.studeng@abc_ten" >abc.studeng@abc_ten</a>;

 4.删除dblink

 确定要删除的dblink名字以后,可以通过drop命令直接将其删除:

drop  public  database  link abc_ten;
<think>好的,我现在需要帮助用户解答关于Oracle数据库中使用DBLink进行查询的问题。用户明确询问了使用方法及示例,所以我得先回忆相关知识,并参考提供的引用内容来组织回答。 首先,用户提到的引用[1]和[2]都涉及DBLink的基本概念和创建方法,引用[3]则比较了MySQL的FEDERATED引擎,但用户主要关注Oracle,所以重点放在前两个引用上。我需要确保回答结构清晰,分步骤说明使用方法,并给出示例,同时可能涉及权限和注意事项。 接下来,我应该先介绍DBLink的定义和作用,引用[1]中的内容提到它允许访问其他数据库的对象,这点很重要。然后按照创建步骤展开,包括权限检查、创建语法、示例。这里需要区分公共和私有DBLink,引用[2]提到公用链接的所有者是PUBLIC,私有的是用户自己,所以需要说明两者的区别。 创建之后,用户需要知道如何使用DBLink进行查询。这里需要给出示例,比如SELECT语句,同时可以提到其他操作如INSERT、UPDATE,但用户主要问的是查询,所以重点在SELECT。同时,注意事项部分需要涵盖网络、权限、性能等方面,引用[1]和[2]中的信息可以支持这些点。 然后,根据用户的要求,生成相关问题。这些问题应该围绕DBLink的深入使用,比如如何查看已有DBLink、权限管理、替代方案等,参考引用[3]提到的FEDERATED引擎可以作为替代方案之一,但用户可能更关心Oracle内部的解决方案,比如物化视图或数据库网关。 需要注意的是,回答中要使用中文,数学公式用$...$,但可能这里用不上。代码块用正确格式,比如SQL语句。引用标识要自然添加,如创建DBLink的部分引用[^1],权限问题引用[^2]。 现在检查是否有遗漏:是否覆盖了使用方法、示例、注意事项?是否需要提到删除DBLink?用户的问题中没有明确提到,但作为完整解答,可能可以包含。不过用户主要问的是使用方法和示例,所以可能放在注意事项或相关问题上。 最后,确保回答结构清晰,步骤分明,示例正确,并且相关问题能够引导用户进一步了解。可能还需要注意权限部分,比如用户需要有CREATE DATABASE LINK权限,或者创建公共链接需要额外的权限,这点引用[2]中提到需要CREATE PUBLIC权限,所以需要明确说明。 总结回答结构: 1. DBLINK定义和作用 2. 创建步骤:权限、语法、示例(公共和私有) 3. 使用示例:查询、增删改 4. 注意事项:网络、权限、性能、命名 5. 相关问题 现在组织内容,确保每个部分都有引用支持,并且语言简洁易懂。</think>### Oracle DBLink查询使用指南 #### 一、DBLink核心概念 Oracle DBLink数据库对象间的实例访问桥梁,支持通过SQL语句直接操作远程数据库的表、视图等对象[^1]。其核心价值体现在: - 无需数据迁移即可实现实时数据集成 - 简化数据库事务处理 - 支持异构数据库连接(需配合Gateway) #### 二、DBLink创建步骤 1. **权限验证** ```sql -- 验证用户权限 SELECT * FROM USER_SYS_PRIVS WHERE PRIVILEGE LIKE '%DATABASE LINK%'; ``` 需要`CREATE DATABASE LINK`权限(私有链接)或`CREATE PUBLIC DATABASE LINK`权限(公共链接)[^2] 2. **基础创建语法** ```sql CREATE [SHARED][PUBLIC] DATABASE LINK dblink_name CONNECT TO remote_user IDENTIFIED BY password USING 'tns_entry'; ``` 3. **典型创建示例** ```sql -- 私有DBLink(当前用户专用) CREATE DATABASE LINK sales_db CONNECT TO sales_user IDENTIFIED BY pwd123 USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=ORCL)))'; -- 公共DBLink(所有用户可用) CREATE PUBLIC DATABASE LINK hr_link CONNECT TO hr_admin IDENTIFIED BY hrpass USING 'HRDB'; ``` #### 三、查询实践 1. **基础查询** ```sql SELECT * FROM employees@hr_link WHERE department_id = 50; -- 多关联查询 SELECT e.emp_name, d.dept_name FROM local_emp e JOIN departments@hr_link d ON e.dept_id = d.dept_id; ``` 2. **数据操作示例** ```sql -- 插入远程数据 INSERT INTO audit_log@security_db SELECT * FROM local_audit WHERE log_date > SYSDATE-1; -- 更新远程记录 UPDATE orders@sales_db SET status = 'SHIPPED' WHERE order_id = 1001; ``` #### 四、关键注意事项 1. **连接稳定性** 需确保网络可达且监听配置正确,建议通过`tnsping`验证TNS配置: ```shell tnsping HRDB ``` 2. **权限控制** 远程用户需具备对象访问权限,建议创建专用服务账户[^2] 3. **性能优化** 大数据量查询应配合`DRIVING_SITE`提示使用: ```sql SELECT /*+ DRIVING_SITE(d) */ * FROM big_table@remote_db d WHERE create_date > '2023-01-01' ``` 4. **对象命名规范** 推荐使用统一前缀如`DBL_`,避免命名冲突 #### 五、进阶管理 1. **查看现有DBLink** ```sql -- 用户级DBLink SELECT * FROM USER_DB_LINKS; -- 全DBLink SELECT * FROM DBA_DB_LINKS; ``` 2. **删除DBLink** ```sql DROP DATABASE LINK sales_db; -- 私有链接 DROP PUBLIC DATABASE LINK hr_link; -- 公共链接 ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值