有时候,某个库可能因为业务关系准备下线,但是业务方不确定这个库是完全没有调用的。
需要dba协助排查下。
这里分2种:查询请求、变更请求
1 查询某个库是否还有变更(DML DDL)
方法1 查询事务日志法
(这种更稳妥,因为如果是短链接则直接查询master.dbo.sysprocesses可能抓不到现场,但是事务日志如果长期没shrink则会比较慢)
代码语言:sql复制 USE [AdventureWorks2019NEW];
-- 只捞1000条,根据begin time和Transaction Name的内容可做到初步的判断
SELECT top 1000 [Current LSN],
Operation,
[Transaction ID],
[Begin Time],
[Transaction Name],
[Transaction SID] FROM [sys].[fn_dblog](NULL,NULL);
方法2 查询当前会话
(只能针对长连接, 如果是短链接则最好能持续间歇性的抓几天看有没有捕获到)
代码语言:sql复制 use [master];
SELECT DB_NAME(dbid) AS DatabaseName, COUNT(*) AS ConnectionCount
FROM sys.sysprocesses
WHERE dbid > 0 -- 只显示已经分配了数据库ID(非系统进程)的会话
-- and db_name(dbid)='AdventureWorks2019NEW' -- 这里也可以指定具体的待查询的库
GROUP BY dbid;
2 查询某个库是否还有select查询
方法1 在SSMS里启用扩展事件【推荐】
新建会话向导
然后筛选下库名,只查看要关注的库的event详情。
方法2 启用SQL Server Profiler
定位到库级别的sql明细,不太方便。
参考: https://blog.devart.com/sql-server-query-history.html