>数据链路(link)
是一个在分布式数据库中用来表示到一个远程数据库的连接路径的数据库对象,用来方便地直接调用远程数据库中各种对象。
编辑$ORACLE_HOME/network/admin/tnsnames.ora
abc =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = ora)(PROT =1521))
(CONNECT_DATA =
(SERVICE = DEDICATED)
(SERVICE_NAME = ora10)
)
)
配置远程数据库连接标示符,也可以oracle用户登录后,用netca通过图形界面工具配置。
$sqlpluskitty/redhat@abc测试连接远程数据库。
*这种方法,必须要知道远程数据库的用户名和密码,并且通过这个用户进行对远程数据库进行访问时,权限只有kitty用户在远程数据库的权限。
>创建公共链路(public
database link)
在sqlplus字符界面创建公共数据库链路,这样在本地切换用户后,仍可通过数据库链路对远程数据库进行访问,当然权限只有创建link时remote database指定用户的权限。
$sqlplus / as sysdba
SQL>create public
database link linkabc connect to kitty identified by “redhat” using ‘abc’;
这是建立数据库链路,用远程用户kitty/redhat通过tnsnames.ora定义的abc描述符。
SQL>select * from
III@linkabc;查询远程数据库的表
SQL>delete from
III@linkabc where n=1;删除远程数据的表内容
*注意,DDL操作是不能通过数据链路进行操作的,例如create table。
Select * fromdba_db_links;查询数据库链路信息
Drop public database link
linkabc;删除创建的数据库链路
>使用同义词(synonym)隐藏链路信息
同义词是为数据库对象或其他同义词指定的别名,公用同义词可被数据库中所有用户存取,专用同义词仅能被指定用户及其他被授权的用户存取。
同义词的特点:
可屏蔽对象的名字和其所有者;
为分布式数据库的远程对象提供位置透明性;
为用户简化SQL语句。
Create table kitty.test
(n number);
Create table test (n
number);
Select * from test;系统中有两个test表,分别是sys和kitty用户的
Select * from
kitty.test;
Create public synonym
ktest fro kitty.test;为kitty.test创建同义词,屏蔽掉用户信息
Select * from
ktest;
*注意须先有目标表的访问权限,才能通过该目标表上建立的公共同义词访问该目标表,此处sys用户先有kitty.test的访问权限,故可通过ktest访问该表,而john用户则不行。
Create public synonym
rtest for test@linkabc;对远程表建立同义词屏蔽数据链路信息。
Select * from
dba_synonyms where synonym_name=’KTEST’;
Select * from
dba_synonyms where synonym_name=’RTEST’;查询系统中指定同义词的定义
Drop public synonym
ktest;删除同义词