برای مشاهده یافته ها از کلید Enter و برای خروج از کلید Esc استفاده کنید.

کاربردی ترین دستورات DBCC

در این مقاله می خواهیم وارد دنیای جذاب دستورات DBCC (مخفف Database Console Commands) شویم و یکسری از کاربردی ترین دستورات مربوط به آن را بررسی نماییم.

DBCC CLONEDATABASE

با این دستور می توان فقط در چند ثانیه یک کپی از یک دیتابیس موجود بدون اینکه داده های آن منتقل شوند ایجاد کرد. نحوه استفاده از دستور به شکل زیر می باشد:

DBCC CLONEDATABASE (AdventureWorks2017 , AdventureWorks_Clone)

دستور بالا یک کپی از دیتابیس AdventureWorks2017 به نام AdventureWorks_Clone ایجاد می کند.

این دستور از نسخه SQL Server 2014 SP 2 به بعد قابل استفاده است.

DBCC CHECKIDENT

یک دستور کاربردی برای برنامه نویسان که می توان با این دستور مقدار فعلی Identity یک جدول خاص را مشاهده و یا اصلاح کرد و یا به مقدار دلخواه تغییر داد. در ادامه چند نمونه از نحوه استفاده دستور را بررسی می کنیم.

مثال۱: مشاهده مقدار Identity جدول Person.AddressType:

USE AdventureWorks2017
GO
DBCC CHECKIDENT ('Person.AddressType')

نحوه تغییر Identity جداول در SQL Server

 خروجی بالا نشان می دهد Identity جاری عدد ۱۹ می باشد این بدان معناست که رکورد بعدی که در این جدول درج می شود عدد ۲۰ را دریافت می کند در صورتی که آخرین رکورد در این جدول عدد ۶ می باشد(این اتفاق زمانی رخ می دهد که یا داده از جدول حذف شود یا در یک تراکنش یکسری رکورد در جدول درج شوند و در ادامه، تراکنش با خطا روبه رو و Rollback شود)

مثال۲: اصلاح مقدار Identity جدول Person.AddressType به آخرین رکورد موجود در جدول:

USE AdventureWorks2017
GO
DBCC CHECKIDENT ('Person.AddressType',RESEED)

دستور بالا Identity جدول را در صورتی که با آخرین مقدار جدول متفاوت باشد اصلاح می کند و به مقدار صحیح آن تغییر می دهد(در مثال بالا عدد Identity را از ۱۹ به ۶ تغییر می دهد).

مثال۳: تغییر مقدار Identity جدول Person.AddressType به یک مقدار دلخواه:

USE AdventureWorks2017
GO
DBCC CHECKIDENT ('Person.AddressType',RESEED,99)

دستور بالا identity جدول را به عدد ۹۹ تغییر می دهد یعنی رکورد بعدی که در جدول درج شود عدد ۱۰۰ را می گیرد.

DBCC DROPCLEANBUFFERS

با این دستور می توان تمام داده های cache شده در Buffer Pool را حذف کرد. نحوه استفاده از دستور به شکل زیر می باشد:

DBCC DROPCLEANBUFFERS

این دستور در محیط تست جهت بررسی و تست کوئری ها بسیار کاربردی است. با اجرای این دستور تمام داده های جداول که در حافظه RAM قرار دارند (Buffer Pool) حذف می شوند(برای آشنایی بیشتر با Buffer Pool یک ویدیو آموزشی در کانال تلگرام iransql وجود دارد که حاوی نکات کلیدی در مورد نحوه استفاده SQL Server از حافظه RAM است).

DBCC FREEPROCCACHE

این دستور Plan کوئری هایی که در حافظه cache شده اند را حذف می کند. در ادامه دو نمونه از نحوه استفاده از دستور را بررسی می کنیم.

مثال۱: حذف تمام planهای Cache شده مربوط به کوئری های همه دیتابیس ها:

DBCC FREEPROCCACHE

این دستور به مانند دستور قبل (dbcc dropcleanbuffers) برای محیط های تست بسیار کاربردی می باشد.

مثال۲: حذف plan یک کوئری خاص از Plan Cache:

USE AdventureWorks2017;  
GO  
SELECT * FROM Sales.SalesOrderHeader WHERE CustomerID = 29890  
GO  
SELECT plan_handle, st.text  
FROM sys.dm_exec_cached_plans   
CROSS APPLY sys.dm_exec_sql_text(plan_handle) AS st  
WHERE text LIKE N'SELECT * FROM Sales.SalesOrderHeader WHERE CustomerID = 29890%';  
GO

DBCC FREEPROCCACHE(0x06000500921354009022E32D6202000001000000000000000000000000000000000000000000000000000000)

این دستور به جز استفاده در محیط های تست، برای حذف Plan کوئری هایی که در محیط های عملیات دچار Parameter Sniffing شده اند بسیار کاربردی است.

لازم به بیان است از SQL Server 2016  به بعد دستور کاربردی زیر برای حذف تمام Query Planهای یک دیتابیس خاص قابل استفاده است:

USE AdventureWorks2017
GO
ALTER DATABASE SCOPED CONFIGURATION CLEAR PROCEDURE_CACHE

DBCC INPUTBUFFER

این دستور جهت مشاهده آخرین دستور ارسالی از یک SessionId (SPID) کاربرد دارد و نحوه استفاده از آن به شکل زیر است:

DBCC INPUTBUFFER(67)

دستور بالا آخرین کوئری که از SessionId  67  ارسال شده است را نشان می دهد.

یکی از کاربردهای این دستور زمانی است که مجموعه ایی از دستورات زمان بر را در یک Session اجرا می کنیم و میخواهیم متوجه شویم الان دقیقا کدام دستور در حال اجرا است که با استفاده از این دستور می توانیم متوجه این موضوع شویم. یا زمان هایی که از sp_who برای یافتن بلاکینگ ها استفاده می کنیم، چون خروجی این پراسیجر شامل متن کوئری های اجرا شده توسط Sessionها نیست می توانیم با DBCC INPUTBUFFER متن کوئری ها را استخراج کنیم.

DBCC SQLPERF(LOGSPACE)

این دستور برای مشاهده حجم لاگ فایل های دیتابیس ها(فایل های ldf) به همراه میزان فضای استفاده شده از آنها استفاده می شود و بسیار کاربردی می باشد.

خروجی دستور به شکل زیر می باشد:

بدست آوردن سایز لاگ فایل های دیتابیس

با توجه به رفتار متفاوت لاگ فایل ها نسبت به دیتافایل ها و گاها رشد بی رویه و لحظه ای آن ها و متعاقبا مشکلات بوجود آمده در میزان فضای خالی دیسک ها، نیاز است دائما حجم این فایل ها بررسی و در صورت نیاز اقدامات لازم انجام شود که این دستور می تواند بسیار کمک کننده باشد(برای آشنایی بیشتر با لاگ فایل ها و روش های دیگر برای بدست آوردن حجم لاگ فایل ها می توانید به مقاله رشد بی رویه لاگ فایل دیتابیس رجوع نمایید).

 

DBCC SHRINKFILE

یک دستور بسیار کاربردی دیگر که برای کاهش فضای یک فایل دیتابیس استفاده می شود. نحوه استفاده از این دستور به شکل زیر می باشد:

DBCC SHRINKFILE(AdventureWorks2017_log,32)

دستور بالا سایز لاگ فایل دیتابیس AdventureWorks2017 را که نام آن AdventureWorks2017_log می باشد را به ۳۲MB کاهش می دهد(البته در صورتی که امکان پذیر باشد).

دقت فرمایید دستوری مشابه با دستور بالا به نام  shrinkdatabase وجود دارد که با اجرای آن کل فایل های دیتابیس shrink می شوند که به هیچ عنوان استفاده از آن در محیط های عملیات توصیه نمی شود چرا که shrink کردن دیتابیس و فایل ها هزینه زیادی دارد از جمله بالا رفتن Fragmentation در جداول و به طبع کند شدن اجرای کوئری ها. در واقع بهتر است همیشه از ShrinkFile استفاده نمایید(و آن هم در جای مناسب خود،) چرا که به صورت آگاهانه و فقط بر روی فایل مورد نظر این کار را انجام می دهید.

کاربرد استفاده از این دستور می تواند در رشدهای ناگهانی که برای لاگ فایل دیتابیس ها به دلیل یکسری اتفاقات(به عنوان مثال کانورت یکسری دیتا حجیم یا عملیات  Reorganize , Rebuild ایندکس ها و …) رخ داده باشد یا زمانی که داده های زیادی را از یک دیتافایل حذف می کنید و حجم قابل قبولی فضا از دیتافایل خالی می شود باشد. بهرحال می بایست به درستی و در جای مناسب از این دستور استفاده نمود.

به جز هفت دستور DBCC بالا دستورات دیگری هستند که کاربردی اند از جمله CheckDB ، TraceOn ، FreeSessionCache ، FreeSystemCache و … که می توانید با رجوع به سایت مایکروسافت با این دستورات بیشتر آشنا شوید.


امیدوارم این آموزش برای خوانندگان گرامی مفید واقع شود. لطفا با ارائه نظرات ، سوالات و پیشنهادات خود به بالا بردن کیفیت مطالب آموزشی و همچنین ایجاد دلگرمی برای ادامه مسیر آموزش به ما کمک نمایید. همچنین می توانید با عضویت در کانال تلگرام IranSQL از جدیدترین مقالات و فیلم های آموزشی با خبر شوید.

اشتراک گذاری با دیگران
  •  
  •  
  •  
  •  
  •