پرسشکده مرجع پرسش و پاسخ فارسی ایران

مسئله‌ی مهم آن است که هرگز از سؤال‌کردن دست برندارید. برای هر حس کنجکاوی، یک پاسخ وجود دارد.

نمی دانید؟! بپرسید!

می دانید؟! پاسخ دهید!


چگونه سايز ديتابيس اس کيو ال را کاهش دهيم؟ فضاي خالي فايل Microsoft SQL Server Database چگونه از بين مي رود؟

1 پاسخ 1

دستور DBCC SHRINKDATABASE برای کاهش حجم دیتابیس استفاده می شود. نحوه استفاده از این دستور بدین شکل است:

 DBCC SHRINKDATABASE
(database_name | database_id | 0
[ ,target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ] )
[ WITH NO_INFOMSGS ]

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

پارامتر target_percent اختیاری است. با استفاده از این پارامتر می توانید درصدی از فضای آزاد که می خواهید بعد از کاهش حجم در دیتابیس باقی بماند را مشخص کنید.

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

با استفاده از گزینه TRUNCATEONLY فضای آزاد انتهای دیتابیس به سیستم عامل بازگردانده می شود. در این حالت هیچ انتقال در داخل دیتابیس صورت نمی گیرد. در این حالت پارامتر target_percent درنظر گرفته نمی شود.

با بکارگیری WITH NO_INFOMSGS در دستور DBCC SHRINKDATABASE پیام ها با درجه بین صفر تا ده نادیده گرفته می شوند.

مثال:
DBCC SHRINKDATABASE (UserDB, 10);
GO

DBCC SHRINKDATABASE (AdventureWorks2008R2, TRUNCATEONLY);
GO

برای کاهش حجم تمام فایل های داده و لاگ یک دیتابیس مشخص می توان از دستور DBCC SHRINKDATABASE استفاده کرد. اگر بخواهید اندازه یک فایل داده یا لاگ خاص را کاهش دهید، باید از دستور DBCC SHRINKFILE استفاده کنید.

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

سایز دیتابیس نمی تواند کوچک تر از یک مقدار حداقل باشد. این مقدار کمینه اندازه ای است که هنگام ساخت دیتابیس تعیین می شود. البته این مقدار با دستورات ALTER DATABASE و DBCC SHIRNKFILE قابل تغییر است. به عنوان مثال اگر یک پایگاه داده در ابتدا با حجم 10 مگابایت ساخته شود و به تدریج اندازه آن به 100 مگابایت برسد، حجم این دیتابیس با استفاده از این دستورات کمتر از 10 مگابایت نخواهد شد، حتی اگر تمام داده های موجود در آن پاک گردد.

اجرای DBCC SHRINKDATABASE بدون مشخص کردن گزینه های NOTRUNCATE و TRUNCATEONLY معادل اجرای آن با گزینه NOTRUNCATE و در ادامه اجرای آن با گزینه TRUNCATEONLY می باشد.

برای کاهش حجم، لزومی ندارد دیتابیس در حالت تک کاربره قرار داشته باشد؛ بنابراین هنگام کاهش اندازه سایر کاربران (از جمله دیتابیس های سیستمی) می توانند با دیتابیس کار کنند.

توجه داشته باشید که هنگام پشتیان گیری از پایگاه داده نمی توان حجم آن را کاهش داد. به همین ترتیب همزمان با کاهش حجم نیز نمی توان از دیتابیس backup گرفت.


من پاسخ بهتری دارم !


عبارت های جستجو شدهعبارت های جستجو شده

(کم کردن حجم دیتابیس) (کاهش حجم دیتابیس sql) () (کاهش حجم دیتابیس) (دیتابیس ساخته نمی شود) (چگونه log فایل sqlserver را خالی کنیم) (کم کردن حجم log فایل در Sql server 2008) (دستور خالی کردن log دیتابیس) (sql database کم کردن حجم) (dbcc alter دستور)