SQL Server中如何判断一个数据库是否还有业务访问

2024-02-05 14:18:13 浏览数 (1)

有时候,某个库可能因为业务关系准备下线,但是业务方不确定这个库是完全没有调用的。

需要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

0 人点赞