您的位置:首页 > 数据库 > Oracle

Oracle跨用户,跨库关联查询处理

2018-03-02 11:20 218 查看

Oracle跨用户,跨库关联查询处理

  一般来说,Oracle的跨用户关联查询可以使用给当前用户授权目标用户访问权限,然后使用目标用户.表名的形式访问.跨库关联查询可以建dblink然后使用远程表@dblink的形式访问.

  但直接这么做会有一些问题,比如实际项目中需要改用户名,那所有使用用户名.表名的地方都要改.还有虽然预期这两个用户是在同一个实例下,但实际项目中也有可能是在不同的实例下,这时候又得改dblink.而直接使用dblink的也会有类似的问题,要求改dblink名的…这个可能性比较小,但原来预期得使用dblink的,实际项目却发现是在同一实例下,这时候使用dblink就有点低效了,能不用dblink的话,尽量不要用dblink.

  理想的做法是,先建立视图或者同义词,在视图或者同义词中使用用户名.表名或者dblink,这样改名或切换的时候,只要改视图或同义词的定义语句就可以了,而不需要动代码.

以下是dblink,同义词,视图的创建脚本:

-- 如果创建全局 dblink,必须使用 systm 或 sys 用户,在 database 前加 public。
create /* public */ database link dblink1
  connect to dbusername identified by dbpassword
using '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.1)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = orcl)))';
--删除dblink
DROP /* public */  DATABASE LINK dblink1;
-- 查询现有DBLINK
select * from ALL_DB_LINKS;

--创建同义词
create or replace synonym 同义词名 for 表名;
create or replace synonym 同义词名 for 用户.表名;
create or replace synonym 同义词名 for 表名@数据库链接名;
--删除同义词
drop synonym 同义词名;
--查询现有同义词
select * from user_synonyms;

--创建视图
create or replace view 视图名 as (select 字段 from 表名);
create or replace view 视图名 as (select 字段 from 用户.表名);
create or replace view 视图名 as (select 字段 from 表名@数据库链接名);
--删除视图
drop view 视图名;
--查询现有视图
select * from user_views;
内容来自用户分享和网络整理,不保证内容的准确性,如有侵权内容,可联系管理员处理 点击这里给我发消息
标签: