通过数据库链接,可以访问另外一个数据库中的表。
select * from table_name@db_link;
数据库链接通常分为公有的和私有的:
1.Private数据库链接,只能由创建的用户使用,创建用户需要被授予CREATE DATABASE LINK的系统权限,创建语句为:
CREATE DATABASE LINK DB_LINK_NAME USING 'NET_SERVICE_NAME';
其中NET_SERVICE_NAME是通过在TNSNAME.ORA中配置的网络服务名。
2.Public数据库链接,创建公有数据库链接需要有CREATE PUBLIC DATABASE LINK权限,删除需要有DROP PUBLIC DATABASE LINK系统权限,public数据库链接可以被当前数据看所有用户使用,创建的语句:
CREATE PUBLIC DATABASE LINK DB_LINK_NAME USING 'NET_SERVICE_NAME';
数据库用户的映射:
本地用户通过使用数据库链接连接到远程数据库,在远程数据库中将以那个数据库用户来发送请求。
1.上面的两个创建数据库链接的例子中都是映射为同名用户,本地数据库当前用户映射为远程数据库同名用户来执行命令;
2.使用如下语句指定一个固定的远程数据库用户,在远程数据库执行命令:
CREATE (PUBLIC) DATABASE LINK DB_LINK_NAME CONNECT TO SCOTT IDENTIFIED BY PASSWORD USING 'NET_SERVICE_NAME';
另外,在本地创建数据库链接时,并不会去验证远程数据库是否有同名用户或是指定的用户,以及密码是否正确,即使有错误,数据库链接也能创建成功,只是以后使用的过程用会报错。
相关数据字典:DBA_DB_LINKS,ALL_DB_LINKS以及USER_DB_LINKS
通常应用:
1.把表1的数据拷贝到表2:
INSERT INTO 表2(列1,列2...)
SELECT 列1,列2... FROM 表2@DB_LINK WHERE 字句;
2.表2不在数据库中:
CREATE TABLE 表2(列1,列2...)
SELECT 列1,列2... FROM 表2@DB_LINK WHERE 字句;