1.查看DBLINK
SELECT * FROM DBA_DB_LINKS;
或:
SELECT OWNER,OBJECT_NAME FROM DBA_OBJECTS WHERE OBJECT_TYPE='DATABASE LINK';
或:
SELECT * FROM ALL_DB_LINKS;
2.创建DBLINK
前提:
创建DBLINK的用户有对应的数据库权限
CREATE PUBLIC DATABASE LINK
或:
CREATE DATABASE LINK
授权:
GRANT CREATE PUBLIC DATABASE LINK,CREATE DATABASE LINK TO MYACCOUNT;
创建DBLINK:
CREATE PUBLIC DATABASE LINK DBLINKNAME CONNECT TO USERNAME IDENTIFIED BY PASSWORD
USING '(DESCRIPTION =
(ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = DATABASE_IP)(PORT = 1521)))
(CONNECT_DATA = (SERVICE_NAME =SERVICENAME))
)';
如果在CREATE之后不加PUBLIC,则创建的DBLINK就不是公共的,就只有创建者可以使用了.
如果创建全局 DBLINK,必须使用 SYSTM 或 SYS 用户,在 DATABASE 前加 PUBLIC。
ORACLE创建DBLINK报错:ORA-01017、ORA-02063解决:
根据ORA-01017的提示是连接到另一方的用户密码错误,当9I或10G的版本的ORACLE数据库连接11G的版本时,
会自动将密码转化为大写,密码最好用双引号引起来,否则可能在连接的时候报错
补充:如何确定数据库的SERVICENAME:
1.在SQLPLUS中使用
SHOW PARAMETER[S] SERVICE_NAMES;
注意PARAMETER和PARAMETERS都可以
2.使用
SELECT NAME,VALUE FROM V$PARAMETER WHERE NAME='SERVICE_NAMES'
3.使用DB LINK
例如,在本机数据库上创建了一个SCOTT_RMTHOST的PUBLICDBLINK(使用远程主机的SCOTT用户连接),
则用SQLPLUS连接到本机数据库,执行SELECT * FROMSCOTT.EMP@SCOTT_RMTHOT即可以将远程数据库上
的SCOTT用户下的EMP表中的数据获取到.也可以在本地建一个同义词来指向SCOTT.EMP@SCOTT_RMTHOST,这样取值就方便多了.
-- 最简单的用法
SELECT * FROM TABLE_NAME@DATABASE_LINK;
-- 不想让别人知道DATABASE LINK名字的时候,可以使用同义词包装一下
CREATE SYNONYM TABLE_NAME FOR TABLE_NAME@DATABASE_LINK;
SELECT * FROM TABLE_NAME;
-- 也可以建立一个视图来封装
CREATE VIEW TABLE_NAME_V AS SELECT * FROM TABLE_NAME@DATABASE_LINK;
4.删除
注意:用户有CREATEPUBLIC DATABASE LINK 或者CREATE DATABASE LINK 权限.
-- 删除PUBLIC类型的DBLINK
DROP PUBLIC DATABASE LINK DBLINK_NAME;
-- 删除PRIVATE类型的DBLINK,只有创建者自己能删
DROP DATABASE LINK DBLINK_NAME;