当用户要跨本地数据库,访问另外一个数据库表中的数据时,本地数据库中必须创建了远程数据库的dblink,通过dblink本地数据库可以像访问本地数据库一样访问远程数据库表中的数据。下面讲介绍如何在本地数据库中创建dblink. 创建dblink一般有两种方式,不过在创建dblink之前用户必须有创建dblink的权限。想知道有关dblink的权限,以sys用户登录到本地数据库:
_. _. `/ v' {9 {, A' f1 ] select * from user_sys_privs t
' I* W+ j) K* Z6 m1 _7 r7 C where t.privilege like upper('%link%');3 z2 ], `; `9 Q* M4 x1 k
1 SYS CREATE DATABASE LINK NO: i4 o, T+ ]' f) t d( W
2 SYS DROP PUBLIC DATABASE LINK NO
/ l( x: s, `8 g6 a7 y* n 3 SYS CREATE PUBLIC DATABASE LINK NO
8 s3 `$ R& ^. ^2 L! g3 U 可以看出在数据库中dblink有三种权限CREATE DATABASE LINK(所创建的dblink只能是创建者能使用,别的用户使用不了),CREATE PUBLIC DATABASE LINK(public表示所创建的dblink所有用户都可以使用),DROP PUBLIC DATABASE LINK。, B( t& e5 A. W5 ]6 g
在sys用户下,把CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK权限授予给你的用户( s: J5 S: I2 ?
grant CREATE PUBLIC DATABASE LINK,DROP PUBLIC DATABASE LINK to scott;
: Y+ @6 L1 K& ?8 Y2 }) G 然后以scott用户登录本地数据库
?5 K! @1 s5 ~9 [ 1.创建dblink的第一种方式,是在本地数据库tnsnames.ora文件中配置了要远程访问的数据库。
4 {2 @3 l! e. d t5 V7 r create public database link
" U' z# {. W6 S) c' D to_bylw connect to scott identified by tiger using 'bylw';0 @8 H& y- Q$ ~0 }; m' }6 f
其中to_bylw是你创建的dblink名字,bylw是远程数据库的实例名,scott/tiger是登录到远程数据库的用户/密码。然后在本地数据库中通过dblink访问远程数据库'bylw'中scott.tb_test表,sql语句如下所示
% g! O* ]; W6 M3 F+ ~ select * from scott.tb_test@to_bylw;) x T% C3 ~! L6 y$ f: W
2.创建dblink的第二种方式,是在本地数据库tnsnames.ora文件中没有配置要访问的远程数据库,' K7 |" E% R( C+ k* Z
create database link to_test, {" L) d5 K4 F2 H
connect to scott identified by tiger; v" m" s* o: s. n2 O
using '(DESCRIPTION =. b9 E) p: ?9 j/ s
(ADDRESS_LIST =
0 z- W0 u; v4 O$ Q5 Y (ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))$ f& i3 \% g/ G( n g
)
+ h. g; t/ P; A/ `! H: i& O& ~ (CONNECT_DATA =
+ V2 c) H8 A6 Z; N, f (SERVER = DEDICATED)
% ~0 v+ }$ C, m6 S (SERVICE_NAME = bylw)
) M. o# s/ O# x( E H+ m/ } )
0 j: Z7 q `$ C( L. L6 q: T0 t )';. l x7 p* g9 v3 I0 L! r! ]
第二种是把第一种配置在tnsnames.ora文件中的信息,直接放在创建dblink语句后面。第一种情况tnsnames.ora文件中信息如下:* c; i5 U( B3 c+ r1 V# j7 E
bylw =
, p, k" s. R, o (DESCRIPTION =5 f- _( O6 U3 P- D U( }4 x$ F
(ADDRESS_LIST =- G0 l* |2 V) b+ g; D: g
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.5)(PORT = 1521))
8 `6 x6 e/ M( @2 | )7 ~+ l" N' W$ X; A% W/ j% C- u
(CONNECT_DATA =" p. u0 o# N' m
(SERVER = DEDICATED)) D, r# M2 R8 `
(SERVICE_NAME = bylw); }/ P) Z3 g* b: f
)
. q% r; _' G# O( g/ e ) |