۱۳۸۸/۰۱/۱۸

بررسي صحت پشتيبان‌هاي تهيه شده در SQL Server


اولين و اساسي‌ترين قدم در نگهداري يك سيستم مبتني بر داده، تهيه پشتيبان‌هاي منظم و همچنين قابل اطمينان مي‌باشد.
دستور T-SQL زير بدون ري‌استور كردن يك فايل بك آپ اس كيوال سرور، سعي در تعيين اعتبار آن مي‌كند:
RESTORE VERIFYONLY
FROM DISK = 'C:\SQL_Backup\Test1'
WITH FILE = 1,
LOADHISTORY
اين دستور وضعيت كامل بودن پشتيبان و همچنين قابل خواندن بودن اطلاعات آن‌را برسي مي‌كند و در صورت سالم بودن بك آپ، پيغام زير را نمايش خواهد داد:

The backup set on file 1 is valid.
عموما عمليات تهيه پشتيبان در يك مكان مشخص در سرور صورت مي‌گيرد (خصوصا اگر يك job مختص به آن تعريف شده باشد كه اين‌كار را به صورت خودكار انجام دهد). بنابراين مي‌توان عمليات اعتبار سنجي فوق را مكانيزه كرد. اسكريپت زير مسير آخرين بك آپ‌هاي گرفته شده در سرور را بر مي‌گرداند:
SELECT DISTINCT physical_device_name
FROM msdb.dbo.backupmediafamily
ORDER BY
physical_device_name
اكنون مي‌توان مسير‌هاي فوق را در يك cursor جهت بررسي صحت تك تك موارد استفاده نمود:

DECLARE @path NVARCHAR(1000),
@msg NVARCHAR(MAX),
@NewLine CHAR(2),
@sql NVARCHAR(2000)

SET @NewLine = CHAR(13) + CHAR(10)
SET @msg = ''

DECLARE DATABASES_CURSOR CURSOR
FOR
SELECT DISTINCT physical_device_name
FROM msdb.dbo.backupmediafamily
ORDER BY
physical_device_name

OPEN DATABASES_CURSOR

FETCH NEXT FROM DATABASES_CURSOR INTO @path

WHILE @@FETCH_STATUS = 0
BEGIN
PRINT 'Verifying: ' + @path
SET @sql = 'RESTORE VERIFYONLY FROM DISK = ''' + @path
+ ''' WITH FILE = 1, LOADHISTORY'

EXEC sp_executesql @sql
IF @@ERROR <> 0
BEGIN
SET @msg = @msg + 'Failed to verify: ' + @path + @NewLine
END

FETCH NEXT FROM DATABASES_CURSOR INTO @path
END

CLOSE DATABASES_CURSOR
DEALLOCATE DATABASES_CURSOR

IF @msg <> ''
BEGIN
PRINT @msg
-- send email
EXECUTE msdb.dbo.sp_send_dbmail
@recipients = 'nasiri@site.net', -- Change This
@copy_recipients = 'Administrator@site.net', -- Change This
@Subject = 'backup verification info.',
@Body = @msg
,@importance = 'High'

END

اسكريپت فوق بر روي تمامي مسيرهاي ثبت شده موجود كه در آن‌ها پيشتر پشتيبان تهيه شده است، دستور RESTORE VERIFYONLY را اجرا مي‌كند و در آخر اگر پيغامي حاصل شد، يعني مشكلي پديد آمده و ايميلي را به اشخاص مورد نظر ارسال مي‌كند.
مي‌توان بر روي اين اسكريپت يك job تهيه كرد كه هر روز پس از تهيه بك آپ خودكار، كار بررسي صحت عمليات را نيز انجام دهد.