“DB Link 连接数怎么查”这个问题,需要先明确数据库类型和DB Link 的使用方式,不同数据库查法完全不同。下面按常见数据库分别说明,先给你最常用的 Oracle 方案,再补充其他数据库。
DB Link 本质上是源库到目标库的连接会话,可以在目标库上查。
SELECT
username,
machine,
program,
status,
COUNT(*) AS session_cnt
FROM
v$session
WHERE
machine IS NOT NULL
GROUP BY
username, machine, program, status
ORDER BY
session_cnt DESC;
或者更精确地:
SELECT
s.sid,
s.serial#,
s.username,
s.machine,
s.program,
s.status,
s.logon_time
FROM
v$session s
WHERE
s.program LIKE '%oracle%'
OR s.username IS NOT NULL;
⚠️ 注意:
DB Link 会话在目标库上表现为普通会话,不一定能直接区分是不是 DB Link,除非你在源库做限制或使用特定用户。
SELECT * FROM v$dblink;
说明:
v$dblink:当前 session 正在使用的 DB LinkSELECT db_link, owner, username, host
FROM dba_db_links;
在目标库服务器上:
ps -ef | grep oracle
结合 v$session 的 process 字段定位。
| 位置 | 查什么 | 含义 |
|---|---|---|
| 目标库 | v$session |
DB Link 实际占用连接 |
| 源库 | v$dblink |
当前使用的 DB Link |
| 目标库 | v$process |
进程数 |
| 目标库 | v$license |
当前会话数 |
例如:
SELECT COUNT(*) FROM v$session;
SELECT COUNT(*) FROM v$process;
MySQL 没有 Oracle 那样的 DB Link。
SHOW PROCESSLIST;
或
SHOW STATUS LIKE 'Threads_connected';
SELECT host, user, COUNT(*)
FROM information_schema.processlist
GROUP BY host, user;
SELECT COUNT(*) FROM pg_stat_activity;
SELECT * FROM pg_stat_activity
WHERE application_name LIKE '%dblink%';
常见问题:
✅ 排查思路:
v$session.machinev$session.programDB Link 没有专门的“连接数”视图,必须通过目标库的会话 / 进程来判断,Oracle 中最常用的是
v$session和v$process。
如果你愿意,可以告诉我:
我可以给你一个直接可执行的排查 SQL 套装。
免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。