🔧 Blog 1 : SQL Server में सभी Databases का Log File Shrink कैसे करें? (Complete Guide)

🔧 SQL Server में सभी Databases का Log File Shrink कैसे करें? (Complete Guide)

🔍 Introduction

जब हम SQL Server में लंबे समय तक काम करते हैं —

  • Backups

  • Bulk Inserts

  • Large Transactions

  • Delete / Archive Operations

तो अक्सर Transaction Log (.ldf) बहुत ज़्यादा बढ़ जाता है।
कई बार disk full होने की नौबत आ जाती है 😓

ऐसे समय पर हर database का log manually shrink करना possible नहीं होता
यहीं पर यह T-SQL Script बहुत काम आती है।


🧠 यह Script क्या करती है?

यह script:

✅ Server के सभी ONLINE databases को scan करती है
✅ System databases को skip करती है
✅ हर database का Log File identify करती है
✅ और उसका size shrink कर देती है

यानि 👉 One Script = All Databases Log Shrink


📜 पूरा SQL Script

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

🧩 Script को Step-by-Step समझते हैं

1️⃣ Cursor से सभी Databases लेना

SELECT name FROM sys.databases WHERE state_desc = 'ONLINE'

👉 सिर्फ ONLINE databases चुने जाते हैं
👉 Offline / restoring DB skip हो जाते हैं


2️⃣ System Databases को Exclude करना

AND name NOT IN ('master','model','msdb','tempdb')

⚠️ System databases को shrink करना dangerous हो सकता है
इसलिए इन्हें जानबूझकर exclude किया गया है।


3️⃣ Log File का नाम निकालना

SELECT @LogFileName = name FROM sys.database_files WHERE type_desc = 'LOG';

हर database में log file का नाम अलग हो सकता है,
इसलिए dynamic way से name निकाला गया है।


4️⃣ DBCC SHRINKFILE Command

DBCC SHRINKFILE (@LogFileName, 1);

👉 Log file को 1 MB तक shrink कर देता है
👉 Disk space तुरंत free हो जाती है


🏢 Real-Life Example (Production Scenario)

मान लीजिए:

  • आपके server पर 25 client databases हैं

  • Daily bulk data insert होता है

  • Log files 50–100 GB तक पहुंच जाती हैं

  • Disk space critical हो जाती है

📌 Solution:
👉 Night maintenance window में यह script चलाइए
👉 सभी databases के log control में आ जाएंगे


⚠️ Important Warnings (बहुत ज़रूरी)

❌ Production में daily shrink न करें
❌ Frequent shrink से performance issue हो सकता है
❌ Better approach:

  • Proper Recovery Model

  • Scheduled Log Backup


✅ Best Practice Recommendation

✔️ Shrink सिर्फ तभी करें जब:

  • Disk full हो

  • Emergency situation हो

✔️ Regular solution:

  • FULL recovery → Log backup

  • SIMPLE recovery → Controlled growth


🧠 DBA Tip (Bonus)

अगर log बार-बार बढ़ रहा है, तो:

  • Long running transactions check करें

  • Replication / CDC verify करें

  • Backup jobs properly run हो रहे हैं या नहीं देखें


📌 Conclusion

यह script:

  • 🔥 Emergency lifesaver है

  • 🛠️ DBA का powerful tool है

  • 🚀 Multi-database environments में बहुत useful है

लेकिन smart usage ही professional usage है 😉

Post a Comment

0 Comments

Translate

Close Menu