Shrink کردن دیتابیس از طریق دستورات T-SQL
در داخل Management Studio دکمه New Query رو بزنید. در کادر باز شده باید از دستورات زیر استفاده کنید.
DBCC ShrinkFile
DBCC ShrinkDatabase.
ساختار دستوری DBCC ShrinkFile
DBCC SHRINKFILE
(
{ file_name | file_id }
{ [ , EMPTYFILE ]
| [ [ , target_size ] [ , { NOTRUNCATE | TRUNCATEONLY } ] ]
}
)
[ WITH NO_INFOMSGS ]
File_Name
نام فایل برای Shrink کردن.
File_Id
شماره Id فایل برای Shrink کردن. با استفاده از تابع سیستمی File_IDEX یا گرفتن Query از Sys.Database_Files میتوانید این شماره را بدست بیارید.
Target_Size
سایز فایل به مگابایت هست که بعد از shrink کردن باید به این مقدار برسد.این مقدار از نوع صحیح می باشد. اگر این عدد مشخص نشود ، خود SQL Server سایز فایل را به مقدار اولیه فایل ، که زمان ایجاد دیتابیس مشخص کردیم برخواهد گرداند.
توجه : شما میتوانید با استفاده از همین دستور مقدار اولیه فایل را کاهش بدید. مثلا اگر زمان ایجاد دیتابیس مقدار اولیه را 5 مگابایت تنظیم کردید میتوانید به 3 مگابایت کاهش بدید در صورتی که دیتابیس خام باشد و هیچ اطلاعاتی وارد آن نشده باشد.
EMPTYFILE :
منتقل کردن تمام اطلاعات از یک فایل به فایل خاص دیگر در یک Filegroup یکسان.
Notrauncate :
منتقل کردن Page های اختصاص یافته از اخر فایل DATA به فضای اختصاص نیافته ابتدای فایل با تعیین کردن یا تعیین نکردن Target_Percent . فضای آزاد در انتهای به سیستم عامل برنخواهد گشت. و سایز فیزیکی فایل تغییر نخواهد کرد. بنابراین ، با مشخص کردن این گزینه ، فایل به نظر میاید Shrink نشده است.
NOTRUNCATE فقط روی فایل های Data قابل اجراست و روی فایل Log اثری ندارد.
TRUNCATEONLY :
رهاسازی فضای آزاد انتهای فایل و برگرداندن به سیستم عامل، ولی هیچ جابجایی Page در داخل فایل صورت نمی گیرد. فایل data به آخرین Extent اختصاص داده شده Shrink خواهد شد.
Target_size در این دستور کارایی ندارد.
این دستور فقط روی فایل data اثر دارد.
With No_Infomsgs:
پیغامهای اطلاعاتی را نمایش نمی دهد.
توضیحات :
DBCC SHRINKFILE فقط روی فایلهای دیتابیس در حال استفاده کارایی دارد. برای تغییر دیتابیس در حال استفاده میتوانید از دستور Use استفاده کنید.
زمانی که اجرای آن با موفقیت انجام نشود ، خطا برمیگرداند.
دیتابیس در حال Shrink در Single-User نیست. و کاربران میتوانند با دیتابیس درحال Shrink شدن کار کنند.نیازی نیست برای Shrink کردن دیتابیسهای سیستمی SQL Server را به Single_User Mode ببرید.
مثال :
Shrink کردن یک فایل Data به یک حجم خاص :
USE UserDB;
GO
DBCC SHRINKFILE (DataFile1, 7);
GO
Shrink کردن فایل LOG به یک حجم خاص :
USE AdventureWorks2008R2;
GO
-- Truncate the log by changing the database recovery model to SIMPLE.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY SIMPLE;
GO
-- Shrink the truncated log file to 1 MB.
DBCC SHRINKFILE (AdventureWorks2008R2_Log, 1);
GO
-- Reset the database recovery model.
ALTER DATABASE AdventureWorks2008R2
SET RECOVERY FULL;
GO
دستور DBCC ShrinkDatabase :
DBCC SHRINKDATABASE
( database_name | database_id | 0
[ , target_percent ]
[ , { NOTRUNCATE | TRUNCATEONLY } ]
)
[ WITH NO_INFOMSGS ]
ساختار این دستور مطابق دستور DBCC ShrinkFile هست فقط به جای نام فایل اینجا باید نام دیتابیس یا ID دیتابیس را بنویسید.
برای Shrink کردن تمامی فایلهای DATA,LOG باید از این دستور استفاده کرد و برای Shrink کردن یک فایل خاص باید از دستور DBCC ShrinkFile استفاده کرد.
برای اجرای این دستور نیاز به دسترسی sysAdmin یا db_Owner می باشد.
Shrink یک دیتابیس به یک درصد خاص از فضای آزاد:
DBCC SHRINKDATABASE (UserDB, 10);
GO