⚠️ 警告:以下操作將導致資料不一致,僅限極端情況 (如恢復卡住數天、業務損失大於資料風險) 使用。務必先嘗試耐心等待、檢查錯誤日誌、確認硬體健康。生產環境請優先從可靠備份還原。
sp_who2/sys.dm_exec_requests 顯示 ROLLBACK 持續進行注意: 原文為 Sybase ASE 指令。SQL Server **不支援直接更新系統表**。SQL Server 對應做法如下:
-- 1. 設為緊急模式 (僅 sysadmin 可執行)
ALTER DATABASE [YourDB] SET EMERGENCY;
GO
-- 2. 設為單用戶模式 (斷開其他連線)
ALTER DATABASE [YourDB] SET SINGLE_USER WITH ROLLBACK IMMEDIATE;
GO
-- 3. 執行 DBCC CHECKDB 修復 (允許資料遺失)
DBCC CHECKDB ([YourDB], REPAIR_ALLOW_DATA_LOSS) WITH NO_INFOMSGS, ALL_ERRORMSGS;
GO
-- 4. 恢復多用戶模式
ALTER DATABASE [YourDB] SET MULTI_USER;
GO
關鍵風險: REPAIR_ALLOW_DATA_LOSS 可能刪除損壞頁面、截斷交易、導致邏輯不一致。執行前 **必須** 先複製資料庫檔案 (.mdf/.ldf) 到安全位置備份。
-- 1. 備份 master 資料庫 (極重要!)
DUMP DATABASE master TO "/usr/sybase/master.dup"
GO
-- 2. 以 sa 登入 isql,允許系統表更新
SP_CONFIGURE "allow updates", 1
GO
BEGIN TRAN
GO
USE master
GO
UPDATE sysdatabases
SET status = -32768 -- 設為 bypass recovery 模式
WHERE name = "pubs2"
GO
IF @@ROWCOUNT = 1
COMMIT
ELSE
ROLLBACK
GO
資料庫恢復是 ACID 中 Durability 的最後防線,輕易繞過它將動搖資料信任基石。請謹慎決策,保留審計軌跡。