3.创建同义词
1)创建公有Oracle同义词的语法:create [public] synonym 同义词名称 for [username.]objectName;
例如:比如把user1.table1在user2中建一个同义词table1
create synonym table1 for user1.table1;
这样当你在user2中查select * from table1时就相当于查select * from user1.table1;
create public synonym table_name for user.table_name; 其中第一个user_table和第二个user_table可以不一样
2)创建一个远程数据库的对象的同义词 如果要创建一个远程的数据库上的某张表的同义词,需要先创建一个Database Link(数据库连接)来扩展访问,然后在使用如下语句创建数据库同义词:create synonym table_name for table_name@DB_Link;
Oracle同义词在数据库链中的作用
数据库链是一个命名的对象,说明一个数据库到另一个数据库的路径,通过其可以实现不同数据库之间的通信。
create database link 数据库链名 connect to user名 identified by 口令 using '远程数据库的网络服务名';
注意:创建数据库链接的帐号必须有CREATE DATABASE LINK或CREATE PUBLIC DATABASE LINK的系统权限,用来登录到远程数据库的帐号必须有CREATE SESSION权限。这两种权限都包含在CONNECT角色中(CREATE PUBLIC DATABASE LINK权限在DBA中)。
创建数据库链接时,还可以使用缺省登录方式,即不指定远程数据库的用户名和密码:
create public database link zrhs_link using ‘zrhs’;
在不指定用户名和口令的情况下,ORACLE使用当前的用户名和口令登录到远程数据库
如果没有配置TNSNAMES.ORA,第二种创建db link的方法:
create database link test connect to scott identified by tiger using
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.112)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)'
查询创建好的db link:
select * from sys.link$;
一直以为只有private db link可以查到密码,原来public 的dblink 也可以看到密码。
只是需要用sys用户登录查询。
查询dblink的user 密码,用sys 登陆
select * from SYS.link$;
select * from SYS.link$ l, SYS.user$ u
WHERE l.owner# IN (SELECT kzsrorol
FROM x$kzsro) AND l.owner# = u.user#;
如果是private 的dblink,就可以用owner登录,查询 user_db_links
select * from user_db_links;
db link创建好之后,访问对象
访问对象要通过 object名@数据库链名。
4.同义词的删除
drop [public] synonym 同义词名称
要想删除私有同义词就 省略 public 关键字
要想删除公共同义词就要 包括public 关键字
例如:
drop synonym emp; --删除名为emp 的私有同义词
drop public synonym public_emp; --删除名为public_emp的公有同义词