जब हम SQL Server में लंबे समय तक काम करते हैं —
Backups
Bulk Inserts
Large Transactions
Delete / Archive Operations
तो अक्सर Transaction Log (.ldf) बहुत ज़्यादा बढ़ जाता है।
कई बार disk full होने की नौबत आ जाती है 😓
ऐसे समय पर हर database का log manually shrink करना possible नहीं होता।
यहीं पर यह T-SQL Script बहुत काम आती है।
यह script:
✅ Server के सभी ONLINE databases को scan करती है
✅ System databases को skip करती है
✅ हर database का Log File identify करती है
✅ और उसका size shrink कर देती है
यानि 👉 One Script = All Databases Log Shrink
DECLARE @DBName SYSNAME
DECLARE @SQL NVARCHAR(MAX)
DECLARE db_cursor CURSOR FOR
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE'
AND name NOT IN ('master','model','msdb','tempdb')
OPEN db_cursor
FETCH NEXT FROM db_cursor INTO @DBName
WHILE @@FETCH_STATUS = 0
BEGIN
SET @SQL = '
USE [' + @DBName + '];
DECLARE @LogFileName SYSNAME;
SELECT @LogFileName = name
FROM sys.database_files
WHERE type_desc = ''LOG'';
DBCC SHRINKFILE (@LogFileName, 1);
'
PRINT 'Shrinking log for database: ' + @DBName
EXEC (@SQL)
FETCH NEXT FROM db_cursor INTO @DBName
END
CLOSE db_cursor
DEALLOCATE db_cursor
SELECT name
FROM sys.databases
WHERE state_desc = 'ONLINE'
👉 सिर्फ ONLINE databases चुने जाते हैं
👉 Offline / restoring DB skip हो जाते हैं
AND name NOT IN ('master','model','msdb','tempdb')
⚠️ System databases को shrink करना dangerous हो सकता है
इसलिए इन्हें जानबूझकर exclude किया गया है।
SELECT @LogFileName = name
FROM sys.database_files
WHERE type_desc = 'LOG';
हर database में log file का नाम अलग हो सकता है,
इसलिए dynamic way से name निकाला गया है।
DBCC SHRINKFILE (@LogFileName, 1);
👉 Log file को 1 MB तक shrink कर देता है
👉 Disk space तुरंत free हो जाती है
मान लीजिए:
आपके server पर 25 client databases हैं
Daily bulk data insert होता है
Log files 50–100 GB तक पहुंच जाती हैं
Disk space critical हो जाती है
📌 Solution:
👉 Night maintenance window में यह script चलाइए
👉 सभी databases के log control में आ जाएंगे
❌ Production में daily shrink न करें
❌ Frequent shrink से performance issue हो सकता है
❌ Better approach:
Proper Recovery Model
Scheduled Log Backup
✔️ Shrink सिर्फ तभी करें जब:
Disk full हो
Emergency situation हो
✔️ Regular solution:
FULL recovery → Log backup
SIMPLE recovery → Controlled growth
अगर log बार-बार बढ़ रहा है, तो:
Long running transactions check करें
Replication / CDC verify करें
Backup jobs properly run हो रहे हैं या नहीं देखें
यह script:
🔥 Emergency lifesaver है
🛠️ DBA का powerful tool है
🚀 Multi-database environments में बहुत useful है
लेकिन smart usage ही professional usage है 😉
0 Comments
Thanks for Commenting on our blogs, we will revert back with answer of your query.
EmojiThanks & Regards
Sonu Yadav