“DB Link”通常指数据库之间的连接(Database Link),最常见的场景是 Oracle DB Link,也可能是 PostgreSQL、MySQL、SQL Server 等。下面我分别说明。
在 tnsnames.ora 中配置远程库:
REMOTE_DB =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.100)(PORT = 1521))
(CONNECT_DATA =
(SERVICE_NAME = orcl)
)
)
CREATE DATABASE LINK remote_link
CONNECT TO remote_user IDENTIFIED BY "password"
USING 'REMOTE_DB';
或不用 TNS,直接写连接:
CREATE DATABASE LINK remote_link
CONNECT TO remote_user IDENTIFIED BY "password"
USING '(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.1.100)(PORT=1521))(CONNECT_DATA=(SERVICE_NAME=orcl)))';
CREATE PUBLIC DATABASE LINK remote_link
CONNECT TO remote_user IDENTIFIED BY "password"
USING 'REMOTE_DB';
SELECT * FROM emp@remote_link;
-- 查看
SELECT * FROM user_db_links;
-- 删除
DROP DATABASE LINK remote_link;
CREATE EXTENSION dblink;
SELECT *
FROM dblink(
'host=192.168.1.100 port=5432 dbname=test user=u password=p',
'SELECT id, name FROM users'
) AS t(id int, name text);
CREATE TABLE remote_users (
id INT,
name VARCHAR(50)
)
ENGINE=FEDERATED
CONNECTION='mysql://user:pwd@192.168.1.100:3306/db/users';
⚠️ FEDERATED 在新版本中默认不启用
EXEC sp_addlinkedserver
@server = 'REMOTE_SRV',
@srvproduct = '',
@provider = 'SQLNCLI',
@datasrc = '192.168.1.100';
EXEC sp_addlinkedsrvlogin
@rmtsrvname = 'REMOTE_SRV',
@useself = 'false',
@rmtuser = 'user',
@rmtpassword = 'pwd';
使用:
SELECT * FROM REMOTE_SRV.db.dbo.table;
❌ ORA-12154:TNS 配置错误
❌ ORA-02019:DB Link 不存在
❌ 网络不通(防火墙、端口)
❌ 权限不足(CREATE DATABASE LINK)
如果你能告诉我:
我可以直接给你可用的配置示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。