我们项目中Oracle中Dblink的应用
1.1 简介
Dblink我们是当作了接口的一种,例如:B系统用户想访问A系统的数据,可以在利用dblink来实现。
步骤
1、A系统的数据库建立临时的表空间和相应的用户Ab,
2、A库把需要的表、视图、过程等赋权给Ab库
3、在B库建立dublik连接Ab库
4、在B库中应用
5、Ab的目的是避免,B库直接dblinkA库带来的安全问题
1.2 具体实现代码
1.2.1 创建Ab库
create temporary tablespace heibeiTest2 --创建临时表空间。 tempfile 'D:\oraclespace\heibeiTest2.dbf' size 50m autoextend on next 50m maxsize 20480m extent management local; CREATE USER heibei2 IDENTIFIED BY password --用户名:heibei2,密码:password DEFAULT TABLESPACE "ZHONGYE" --A库的表空间ZHONGYE TEMPORARY TABLESPACE heibeiTest2 --附属表空间heibeiTest2 QUOTA UNLIMITED ON "ZHONGYE" --附属在表空间ZHONGYE下。 GRANT "CONNECT" TO heibei2; --赋权连接权限给用户NORTHBOUND ALTER USER heibei2 DEFAULT ROLE NONE; --修改用户绑定的默认角色NONE GRANT CREATE SESSION TO heibei2; --赋权创建回话权限
1.2.2 赋予权限
GRANT SELECT ON "testUser"."VIEW_testTable" TO GALEN; --把用户testUser下的表VIEW_INCOMEREPORT的select赋权给GALEN。 GRANT SELECT ON "testUser"."VIEW_INCOMEREPORT" TO GALEN; --把用户testUser下的表VIEW_INCOMEREPORT的select赋权给GALEN。 GRANT execute ON "testUser"."VIEW_testTable_PACKAGE" TO GALEN; --把用户testUser下的表VIEW_testTable_PACKAGE的execute赋权给GALEN。
1.2.3 Ab库创建中创建别称
--查询 select * from "testUser"."VIEW_testTable" --创建别称 create synonym testUser_VIEW_testTable FOR "testUser"."VIEW_testTable";
1.2.4 创建dblink
--在B库下 --检查登录用是否有dblink权限,能查出数据表示有权限。 --若是表空间有多个用户,在最后加上: AND USERNAME='用户名' select * from user_sys_privs where privilege like upper('%DATABASE LINK%'); -- 登录高权限账户例如system,给用户名为:“mccdb”用户授予创建dblink的权限 grant create public database link to mccdb; --TESTLINK2:创建的dblink名称为:TESTLINK2 --mccdb:远程数据库用户名称 --123456:远程数据库密码123456 --HOST:host的=号后面为远程数据库ip地址 --SERVICE_NAME:SERVICE_NAME的=号后面为远程数据库服务名称 create public database link TESTLINK2 connect to mccdb identified by "123456" USING '(DESCRIPTION =(ADDRESS_LIST =(ADDRESS =(PROTOCOL = TCP)(HOST = 192.168.1.59)(PORT = 1521)))(CONNECT_DATA =(SERVICE_NAME = xxxx)))'
1.2.5 在B库查询并建立别称
select * from testUser_VIEW_testTable@testlink2; --创建别称 create synonym VIEW_testTable FOR "testUser"."VIEW_testTable";
1.3 这里大家就可以用了,其他sql
GRANT update (STATUSID) ON "testUser"."testTable" TO HEIBEI2; --把testUser.testTable的字段STATUSID的update赋给用户HEIBEI2
1.4备注问题
1、dblink创建后访问,超时。看看你的信息填写对了吗,或者是防火墙之类的事?
2、赋权的时候表示没有表或者视图:试试吧用户名和表名大写