目的:oracle中跨数据库查询
????? 两台数据库服务器db_A(本地)和db_B(远程192.168.1.100),db_A下用户user_a 需要访问到db_B下user_b的数据
解决:查询得知使用dblink(即database link? 数据库链)
实现过程:
1、确定用户user_a有没有创建 dblink 的权限:
?
?
2、如果没有,以sys用户登录到本地数据库 给用户user_a赋权:
注:
dblink有三种权限:
CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了)
CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用)
DROP PUBLIC DATABASE LINK
3、以用户user_a登录本地数据库,创建dblink
?
- create?public??database?link?dblink1????
- connect?to?user_b?identified?by?user_bpass??
- using?'(DESCRIPTION?=(ADDRESS_LIST?=(ADDRESS?=(PROTOCOL?=?TCP)(HOST?=?192.168.1.100)(PORT?=?1521)))(CONNECT_DATA?=(SERVICE_NAME?=?orcl)))';????
注:
当数据库参数global_name=false时,就不要求数据库链接名称跟远端数据库名称一样。
数据库全局名称可以用以下命令查出:
????? SELECT?*?FROM?GLOBAL_NAME;??
修改可以用以下语句来修改参数值:
- ALTER?SYSTEM?SET?GLOBAL_NAME=TRUE/FALSE;??
?
4、创建完成,引用
-- 查询、删除和插入数据和操作本地的数据库是一样的,只不过表名需要写成“表名@dblink服务器”而已。 ?
例:
????? select?*?from?user_bTablename@dblink1?;??
?
一般情况下引用数据库链接,可以直接将其放到调用的表名或视图名称后面,中间使用一个 @ 作为分割符:
?
5、删除 DBLink
???? drop??public?database?link?dblink1;????