解决方法:
可以通过数据库链(DATABASE LINK)对象来建立本地服务器到远程数据库的链接。DatabaseLink指向的数据库不仅仅可以是Oracle,也可以是SQL Server、DB2、Sybase等其他的数据库。数据库链接创建之后,可以使用它来引用远程数据库上的数据库对象。
使用Create Database Link语句可以创建数据库链,语法如下:
CREATE [PUBLIC] DATABASE LINK<数据库链名称>
CONNECT TO
[CURRENT_USER]|[<用户名> IDENTIFIED BY <口令>]
USING<链接字符串>
PUBLIC 可选字符,表示创建公用数据库链,所有用户都能够使用的数据库连,如果不指定,则创建专用数据库链,专用数据库连接只针对创建者,只有创建者可以使用。
CURRENT_USER指定使用当前用户连接到远程数据库上,也可以使用指定的其他用户连接到远程数据库。
USING子句指定远程数据库的连接描述符。
例如,在本机ORCL数据库实例上,创建对远程10.185.3.4上jhqdb实例的访问:
CREATE PUBLIC DATABASE LINK xasi
CONNECT TO
bjxnb IDENTIFIED BY bjxnb
USING
'(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 10.185.3.4)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = jhqdb)
))';
如果在tnsnames.ora文件中有相应XASI2数据库连接符的描述,也可以通过如下方式创建对远程数据库的访问:
CREATE PUBLIC DATABASE LINK xasi
CONNECT TO
bjxnb IDENTIFIED BY bjxnb
USING
'xasi2';
可以以使用在表的后面增加@数据库链名称 来访问远程数据库上面的表:
SELECT COUNT(1) FROM AC01@XASI;
可以访问DBA_DB_LINKS试图来查看所有数据库链的信息:
字段名 |
数据类型 |
说明 |
OWNER |
VARCHAR2(30) |
数据库链的所有者 |
DB_LINK |
VARCHAR2(128) |
数据链的名称 |
USERNAME |
VARCHAR2(30) |
使用的用户名 |
HOST |
VARCHAR2(2000) |
连接描述符 |
CREATED |
DATE |
数据库链的创建日期 |
创建数据库链的用户必须拥有CREATE DATABASE LINK系统权限,创建公用数据库链的用户必须拥有CREATE PUBLIC DATABASE LINK的系统权限。
解决:
要删除专用数据库链,用户必须为DBA角色或者为该专用数据库链的创建者、所有者。要删除公用数据库链,则必须拥有DROP PUBLIC DATABASE LINK权限:
可以使用DROP DATABASE LINK语句删除数据库链,基本语法如下:
DROP [PUBLIC] DATABASE LINK <数据库链名>
例如,删除数据库连接:
DROP PUBLIC DATABASE LINK xasi;