Đôi khi, bạn cần phải Take offline một Database vì một vài lý do (Backup, restore, bảo trì server hoặc bất cứ điều gì). Điều này khá đơn giản, cách thường làm là: mở SQL Server Management Studio, expand danh sách Databases, chọn Database cần Take offline, Click phải lên Database đó và chọn “Tasks / Take Offline” từ context menu.
Sẽ không có gì đánh nói nếu mọi chuyện xảy ra bình thường (database take offline và cửa sổ Take database offline đóng lại). Tuy nhiên, không phải lúc nào mọi chuyện cũng xảy ra như những gì ta muốn, đôi khi bạn sẽ thấy cửa sổ Take database offline treo mãi và không chịu đóng. Lý do là cơ sở dữ liệu của bạn vẫn còn đang được truy cập bởi một số người dùng hoặc ứng dụng từ client đến.
Để kiểm tra các kết nối đang hoạt động, mở New Query và chạy đoạn T-SQL sau:
SELECT db_name(dbid) as DB, count(dbid) as Connections, loginame as Login FROM sys.sysprocesses WHERE dbid = DB_ID('') GROUP BY dbid, loginame ORDER BY DB
Bạn sẽ nhìn thấy danh sách và số lượng user đang kết nối đến CSDL. Việc tiếp theo là bạn sẽ cần phải “kill” các kết nối này để làm tiếp việc của bạn.
-- Kill processes đang sử dụng use master DECLARE @SQL AS VARCHAR(20), @spid AS INT SELECT @spid = MIN(spid) FROM master..sysprocesses WHERE dbid = db_id('TenDatabase') AND spid != @@spid while (@spid IS NOT NULL) BEGIN print 'Killing process ' + CAST(@spid AS VARCHAR) + ' ...' SET @SQL = 'kill ' + CAST(@spid AS VARCHAR) EXEC (@SQL) SELECT @spid = MIN(spid) FROM master..sysprocesses WHERE dbid = db_id('TenDatabase') AND spid != @@spid END GO