X
تبلیغات
نکاتی در SQL Server و نگهداری اطلاعات - نکات آموزشی SQL Server Administrator
نکاتی در SQL Server و نگهداری اطلاعات

در داخل 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

+ نوشته شده در  یکشنبه دوازدهم تیر 1390ساعت 8:20  توسط حمیدرضا صادقیان  | 

وقتی Recovery Model روی Full باشد ابتدا باید از دیتابیس یک Full Backup  گرفته و بعد از دیتابیس یک Log Backup تهیه کنید.

برای تهیه یک Full&Log Backup روی دیتابیس مورد نظر راست کلیک کنید.


با انتخاب Backup پنجره زیر نمایش داده می شود.

 

از منوی Recovery Type ابتدا گزینه Full را انتخاب کرده و سپس از دیتابیس یک Full Backup تهیه کرده و مجدد روی دیتابیس راست کلیک کرده و از منوی Backup در Backup Type گزینه Transaction Log رو انتخاب کرده و یک Log Backup تهیه کنید. پس از آن روی دیتابیس مجدد راست کلیک کرده و از منوی Tasks-Shrink-File رو انتخاب می کنید.

 

با انتخاب این گزینه پنجره زیر نمایش داده می شود.




 

از منوی File Type گزینه Log رو انتخاب کرده و Ok رو بزنید. با اینکار Shrink انجام خواهد شد.

نیازی نیست روی File Data اینکار صورت بگیرد. زیرا فضای گرفته شده توسط هارد مجدد توسط اطلاعات وارد شده پر خواهد شد.

اگر Recovery Model دیتابیس روی Simple هست نیازی به تهیه Backup از دیتابیس نیست و میتوان دیتابیس رو مستقیما Shrink کرد.


+ نوشته شده در  شنبه یازدهم تیر 1390ساعت 9:37  توسط حمیدرضا صادقیان  | 

برای تغییر Recovery Model روی دیتابیس راست کلیک کرده و Properties را بزنید.



پنجره زیر به شما نمایش داده خواهد شد.



در قسمت Options میتوانید Recovery Model رو تغییر بدید. اگر Recovery model رو روی Simple گذاشته اید ، میتوانید با انتخاب گزینه Auto Shrink عملیات Shrink رو به خود SQL Server واگذار کنید.
+ نوشته شده در  چهارشنبه هشتم تیر 1390ساعت 10:11  توسط حمیدرضا صادقیان  | 

سلام.

امروز میخوام توضیح مختصری در مورد Recovery Model دیتابیس بدم و اینکه چطوری از افزایش حجم فایل LOG جلوگیری کنیم.

ما در دیتابیس سه نوع Recovery Model داریم. Full-Simple-Bulk Logged .


مدل Full :

در این مدل تمامی عملیات کاربر در فایل Log ذخیره خواهد شد و این عملیات شامل تغییراتی هست که بر روی اطلاعات در داخل دیتابیس انجام خواهد شد.

این روش زمانی کاربرد دارد که حساسیت اطلاعات بالا بوده و میخواهیم میزان از بین رفتن اطلاعات رو به حداقل زمان ممکن کاهش بدیم. در این روش فایل Log افزایش پیدا خواهد کرد و برای اینکه حجم انرا کم کنیم باید از دیتابیس Log Backup تهیه کرده و سپس عملیات Shrink رو روی دیتابیس انجام بدیم. اگر بدون تهیه Log Backup دیتابیس رو Shrink کنیم اتفاق خاصی رخ نخواهد داد.


مدل Simple :

در این مدل اطلاعات در فایل Log برای ما اهمیتی ندارند و به محض Commit شدن در فایل MDF بدون تهیه Backup LOG میتوان عملیات Shrink رو انجام داد. این مدل زمانی کاربرد دارد که میزان تغییرات روی اطلاعات در طول روز کم هست یا اطلاعات دارای اهمیت بالایی نیستند که بخواهیم از اطلاعات در هر دقیقه یک Log backup تهیه کنیم. با انتخاب این گزینه و انتخاب Auto Shrink در قسمت options در منوی Database Properties خودبه خود عملیات Shrink روی دیتابیس انجام خواهد شد و فایل Log  همیشه در یک سایز اولیه باقی می ماند.

مدل Bulk Logged:

در این مدل عملیاتی که دستور Bulk copy یا Select insert روی دیتابیس اعمال می شوند هیچ Log ذخیره نمی شود که سرعت عملیات این دستورات افزایش پیدا کند و حجم فایل log به صورت تصاعدی بالا نرود. در این روش نیز مانند مدل Full باید اول از دیتابیس یک Log Backup گرفته تا بتوانیم دیتابیس رو Shrink کنیم.


در پست آینده نحوه Shrink کردن دیتابیس هم از طریق Management Studio هم از طریق کدنویسی رو توضیح خواهم داد.


+ نوشته شده در  دوشنبه بیست و سوم خرداد 1390ساعت 0:20  توسط حمیدرضا صادقیان  | 

سلام.

اگر هنگام Backup گرفتن از دیتابیس بهتون خطا داد که دیتابیس MSDB با مشکل روبرو شده ولی Backup گیری درست  انجام شده است، باید برای رفع مشکل مراحل زیر را طی کنید.

دیتابیس MSDB دیتابیسی هست که تمام کارهای SQL Agent داخل آن ذخیره می شود همچنین تمام History مربوط به Backup و Restore و replication نیز داخل ان ذخیره می شود.

اگر در SQL  تنظیمات خاصی برای Backup,Restore یا Replication صورت نگرفته باشد ، میتوان دیتابیس رو از نو ایجاد کرد.ولی اگر دارای تنظیمات خاصی باشد یا Job خاصی تنظیم شده باشد با طی کردن مراحل زیر دیتابیس درست خواهد شد.

Alter Database Msdb set Single_user

Go

Dbcc checkdb('Msdb',Repair_rebuild)

Go

Alter Database Msdb Set multi_user

Go

با این دستورات ابتدا دیتابیس msdb رو به حالت تک کاربره می بریم. برای اینکار حتما باید sql agent غیر فعال شود.

سپس با استفاده از دستور dbcc checkdb تمام دیتابیس چک شده و اگر ایرادی داشته باشه ، اون موارد رفع می شود.

سپس دیتابیس رو دوباره به حالت Multi_user بر می گردانیم.

با اینکار مشکل رفع خواهد شد.

اگر دیتابیس Msdb کلا خراب شده باشد و هیچ backup هم نداشته باشیم و بخواهیم دیتابیس رو از اول ایجاد کنیم باید مراحل زیر رو انجام بدیم:

ابتدا سرویس مربوط به sql server رو stop میکنیم. بعد در منوی Run تایپ کنید cmd. و در پنجره باز شده دستور زیر رو تایپ کنید.

C:\program files\microsoft sql server\mssql\binn\sqlservr.exe –c –t 3604

سپس در یک پنجره جدید

cmd دستورات زیر رو تایپ کنید.

Osql –S . –E –q"sp_detach_db 'msdb'"

سپس از مسیر نصب شده sql server  فایلهای دیتابیس msdb که msdbdata.mdf و msdblog.ldf رو حذف کنید یا تغییر نام بدید.سپس دستور زیر رو اجرا کنید.

Osql –S  . –E  -I"c:\program files\microsoft sql server\mssql\install\instmsdb.sql"

پس از اتمام دستور sql server رو shutdown کرده مجدد به صورت عادی اونو start کنید.

با اینکار دیتابیس msdb از ابتدا ساخته خواهد شد.

 

+ نوشته شده در  جمعه بیست و نهم بهمن 1389ساعت 20:3  توسط حمیدرضا صادقیان  |