iT邦幫忙

0

SQL Server 2012 交易檔過大

  • 分享至 

  • xImage

因為資料庫的交易紀錄檔(LDF)過大,從網路查詢到可以用這種方式來壓縮交易檔的大小

USE UserDB;
GO
-- changing the database recovery model to simple.
ALTER DATABASE UserDB
SET RECOVERY SIMPLE;
GO
-- Shrink UserDB_log file to 20 MB.
DBCC SHRINKFILE (UserDB_log, 20);
GO
-- changing the database recovery model to FULL.
ALTER DATABASE UserDB
SET RECOVERY FULL;
GO

執行後,出現以下錯誤,沒辦法壓縮紀錄檔
訊息 3023,層級 16,狀態 2
資料庫上的備份與檔案操作作業 (例如 ALTER DATABASE ADD FILE) 必須進行序列化。 請在目前的備份或檔案操作作業完成之後,重新發出陳述式。

透過查詢指令

SELECT name, recovery_model_desc, log_reuse_wait_desc FROM sys.databases;

發現資料庫 MODE 是 FULL 且交易紀錄檔處於 Log_backup

請問在這種情況,得先在SSMS上對記錄檔進行備份,才能對其進行壓縮嗎?
或者是還有其他方式能讓記錄檔變小嗎?

圖片
  直播研討會
圖片
{{ item.channelVendor }} {{ item.webinarstarted }} |
{{ formatDate(item.duration) }}
直播中
1
Ray
iT邦大神 1 級 ‧ 2021-06-26 00:41:30
最佳解答

你們都沒跑過 SQL Backup 嗎?

正規專門用來備份 SQL 的軟體, 都會在備份完畢之後, 自動截斷 Log file, 讓他不會一直長大上去; 如果你們每天都有備份, 應該不至於長到太大才對....(還是你們都把: 備份後截斷 Log 這個功能關掉了?)

最佳辦法就是趕快跑一次備份, 然後截斷...

你上面的訊息, 是你想做的動作, 與現有 SQL 的工作衝突, 導致無法執行; 必須先找出有哪工作會相衝, 將他停掉之後, 才能做你要的事情:
https://blog.sqlauthority.com/2014/11/09/sql-server-fix-error-msg-3023-level-16-state-2-backup-file-manipulation-operations-such-as-alter-database-add-file-and-encryption-changes-on-a-database-must-be-serialized/

https://docs.microsoft.com/en-us/sql/relational-databases/errors-events/mssqlserver-3023-database-engine-error?view=sql-server-ver15

https://www.google.com/search?q=Backup%20and%20file%20manipulation%20operations%20(such%20as%20ALTER%20DATABASE%20ADD%20FILE)%20on%20a%20database%20must%20be%20serialized.%20Reissue%20the%20statement%20after%20the%20current%20backup%20or%20file%20manipulation%20operation%20is%20completed.

我不是用正規方式跑SQL Backup @@"
我的SQL Backup是每天獨立備份新的~
用命令提示下SQL語法+Window排程~複製備份一次~
因為要還原哪天的備份資料(建立到新的資料庫)~
去查那天到底做了什麼事~
我那個資料庫備份從20210開始(應該存了1~2TB多)~
都有每天的保留資料

0
純真的人
iT邦大師 1 級 ‧ 2021-06-25 23:11:24

我比較極端..

先停止SQL Server,再啟動SQL Server,再去壓縮資料庫~

不然資料庫會因為都有頻繁交易~無法壓縮資料庫@@...

另外~我都在挑半夜2~3點才執行..

0
tx50xyz
iT邦新手 4 級 ‧ 2021-06-26 10:49:32

資料庫有分二種,如果交易記錄你覺得很重要,你可以設定排程,把Log記得清除,
如果交易記錄不是很重要,你可以將資料庫由復原模式:由完整改成簡單,就不會有Log記錄的問題了。

我是設定簡單~但隔幾個月~Log紀錄又變很大了~要去壓一下@@...

tx50xyz iT邦新手 4 級 ‧ 2021-08-04 10:09:05 檢舉

寫好清除Log檔,並調整Log檔已滿下,使用排程器,定每日清除,如不行,那你的硬碟加大空間才行,不然你很有可能是交易很平繁。

我要發表回答

立即登入回答