数据库 DB Link(数据库链接) 用来在 一个数据库实例中访问另一个数据库实例的对象(表、视图等)。不同数据库用法不一样,下面我按 Oracle / PostgreSQL / MySQL 分别说明,并给出常见用法和注意事项。
CREATE DATABASE LINK dblink_name
CONNECT TO remote_user IDENTIFIED BY "remote_password"
USING 'tns_name';
或用完整连接描述:
CREATE DATABASE LINK dblink_name
CONNECT TO remote_user IDENTIFIED BY "remote_password"
USING '(DESCRIPTION=
(ADDRESS=(PROTOCOL=TCP)(HOST=remote_host)(PORT=1521))
(CONNECT_DATA=(SERVICE_NAME=orcl)))';
SELECT * FROM remote_table@dblink_name;
✅ 可以像本地表一样使用:
SELECT a.id, b.name
FROM local_table a
JOIN remote_table@dblink_name b
ON a.id = b.id;
CREATE SYNONYM remote_emp FOR emp@dblink_name;
SELECT * FROM remote_emp;
-- 查看
SELECT * FROM user_db_links;
-- 删除
DROP DATABASE LINK dblink_name;
PostgreSQL 使用 dblink 扩展。
CREATE EXTENSION IF NOT EXISTS dblink;
SELECT *
FROM dblink(
'host=192.168.1.10 dbname=test user=testuser password=123456',
'SELECT id, name FROM remote_table'
) AS t(id int, name text);
CREATE VIEW remote_view AS
SELECT *
FROM dblink(
'host=192.168.1.10 dbname=test user=testuser password=123456',
'SELECT id, name FROM remote_table'
) AS t(id int, name text);
✅ 推荐方式:postgres_fdw
CREATE SERVER remote_server
FOREIGN DATA WRAPPER postgres_fdw
OPTIONS (dbname 'test', host '192.168.1.10');
CREATE USER MAPPING FOR current_user
SERVER remote_server
OPTIONS (user 'testuser', password '123456');
⚠️ MySQL 没有真正的 DB Link
CREATE TABLE remote_table (
id INT
)
ENGINE=FEDERATED
CONNECTION='mysql://user:pwd@host:3306/db/table';
缺点:
ORA-01031: insufficient privileges
✅ 需要:
GRANT CREATE DATABASE LINK TO user;
Oracle 支持,但配置复杂,建议慎用。
| 数据库 | DB Link 支持 | 推荐方式 |
|---|---|---|
| Oracle | ✅ 原生 | CREATE DATABASE LINK |
| PostgreSQL | ✅ 扩展 | postgres_fdw |
| MySQL | ❌ 不支持 | 应用层 / 中间件 |
如果你能告诉我:
我可以给你一个 完全贴合你场景的示例。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。