در نظر بگیرید که در یک سازمانی تیم توسعه به اشتباه در محیط عملیاتی ممکن است یک دستور حذف را بنویسد و برای مثال یک میلیون رکورد حذف شود. اگر به عنوان مسئول نگهداری بانک اطلاعاتی در سازمانی مشغول به کار هستید و از دیتابیس سازمان به صورت مرتب از لاگ فایل بکاپ تهیه کنید می‌توانید دیتابیس را به یک ساعت خاص بازیابی کنید. در ادامه یک سناریو در همین رابطه ارائه خواهیم داد تا با فرآیند بازیابی دیتابیس به یک ساعت خاص آشنا شویم.

 

 

 

گام اول

توسط دستور زیرا بررسی می‌کنیم که اگر دیتابیسی از قبل با نام «DBNEW» وجود داشت حذف شود.

DROP DATABASE IF EXISTS DBNEW;

GO

 

 

با استفاده از دستور زیر یک دیتابیس با نام «DBNEW» ایجاد می‌کنیم.

USE master

GO

CREATE DATABASE DBNEW

ON

(NAME = DBNEW,

FILENAME = 'C:\TMP\DBNEW_DATA.mdf',

SIZE = 100MB, MAXSIZE = 200MB, FILEGROWTH = 64MB)

LOG ON

(NAME = DBNEW_log,

FILENAME = 'C:\TMP\DBNEW_log.ldf',

SIZE = 100MB, MAXSIZE = 200MB, FILEGROWTH = 64MB)

GO

 

گام دوم

بعد از ساخت دیتابیس، یک جدول با نام TABLENEW ایجاد کرده و چند رکورد تستی هم در این جدول درج می‌کنیم.
توسط دستور زیر بررسی می‌کنیم اگر جدولی با نام TABLENEW از قبل وجود داشته باشد حذف می‌کنیم.

DROP TABLE IF EXISTS TABLENEW

 

 

 

با استفاده از دستور زیر جدولی با نام TABLENEW ایجاد می‌کنیم.

USE DBNEW

GO

CREATE TABLE TABLENEW

(

F1 INT PRIMARY KEY,

F2 NVARCHAR (20)

);

GO

 

 

گام سوم

با استفاده از دستور Insert Into چند رکورد در جدول  TABLENEW درج می‌کنیم.

INSERT INTO TABLENEW VALUES (1,'record_1')

INSERT INTO TABLENEW VALUES (2,'record_2')

INSERT INTO TABLENEW VALUES (3,'record_3')

INSERT INTO TABLENEW VALUES (4,'record_4')

GO

 

 

بعد ساخت جدول و درج یکسری رکورد تستی وارد جدول TABLENEW کردیم حالا توسط کوئری زیر محتوا جدول TABLENEW واکشی می‌کنیم ببینیم که چه تعداد رکورد و چه اطاعاتی داریم.

SELECT * FROM TABLENEW

GO

 

 

 

گام چهارم

ما برای اینکه سناریو مربوط به بازیابی بانک اطلاعاتی به یک ساعت خاص، پیش ببریم باید از بانک اطاعاتی که پیش از این ساختیم یک بکاپ از نوع  فول تهیه کنیم.برای این کار از کوئری زیر استفاده می‌کنیم.

BACKUP DATABASE DBNEW TO DISK='C:\TMP\DBNEW.BAK'

WITH NAME='FULL’, DESCRIPTION=N'Restoring to a Point in Time’, FORMAT;

GO

 

با استفاده از کوئری زیر از بانک اطلاعاتی که بکاپ گرفتید می‌توانید بکاپ‌ست‌ها (Backup set) را مشاهده کنید.

RESTORE HEADERONLY FROM DISK='C:\TMP\DBNEW.BAK';

GO

 

گام پنجم

اکنون می‌خواهیم تغییراتی در جدول TABLENEW انجام بدیم، بر اساس ساعت‌های مختلف، و بر روی رکورد‌های موجود در جدول TABLENEW وجود دارد یکسری از رکورد‌ها اطلاعات‌شان را تغییر بدیم.
مجموعه تغییرات اول در ساعت ۱۱ صبح:

UPDATE TABLENEW SET F2='*record_1_11am*'

SELECT * FROM TABLENEW

GO



مجموعه تغییرات دوم در ساعت ۱۲ ظهر:

UPDATE TABLENEW SET F2='*12:00_PM*'

SELECT * FROM TABLENEW

GO

 


مجموعه تغییرات سوم در ساعت ۱۲:۳۰ ظهر:

UPDATE TABLENEW SET F2='*12:30_PM*'

SELECT * FROM TABLENEW

GO

 

 

مجموعه تغییرات چهارم در ساعت ۱۳:۰۰ ظهر :

UPDATE TABLENEW SET F2='*13:00_PM*'

SELECT * FROM TABLENEW

GO

 

 

گام ششم

بعد از تغییراتی که در ساعت‌های مختلف انجام دادیم، حالا می‌خواهیم در ساعت ۱۳:۳۰ از لاگ فایل دیتابیس بکاپ تهیه کنیم و توسط همین لاگ فایل دیتابیس را به یک ساعت خاص بازیابی می‌کنیم.

BACKUP LOG DBNEW TO DISK='C:\TMP\DBNEW.BAK' WITH NAME='LOG-13:30_PM’, DESCRIPTION=N'ساعت ۱۳:۳۰_PM'

RESTORE HEADERONLY FROM DISK='C:\TMP\DBNEW.BAK';

GO

گام هفتم

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

USE master

RESTORE DATABASE DBNEW_NEW FROM DISK ='C:\TMP\DBNEW.BAK' WITH FILE=1, STATS=5, REPLACE,

STANDBY='C:\TMP\DBNEW.UNDO'

 

 

در کوئری بالا ما دیتابیس را به نام دیگری داریم بازیابی می‌کنیم و به دیتابیس در حالت Read-only می‌باشد، و توسط کوئری زیر اطلاعات مربوط به جدول TABLENEW را واکشی می‌کنیم که چه اطلاعاتی وجود دارد.

SELECT * FROM DBNEW..TABLENEW

 

 

 

گام هشتم

بعد از بکاپ مربوط به فول را حالا می‌خواهیم دیتابیس به ساعت ۱۲:۴۵ دقیقه بازیابی کنیم، در ادامه کوئری مربوط به این مورد آمده است.

USE master

RESTORE DATABASE DBNEW_ NEW FROM DISK ='C:\TMP\DBNEW.BAK'

WITH FILE=2, STATS=1, STANDBY='C:\TMP\DBNEW.UNDO'

STOPAT='2021-05-31 12:45:00'

GO

 

 

 

گام نهم

بعد از اینکه دیتابیس را به یک ساعت خاص بازگردانی کردیم، حالا توسط کوئری زیر دیتابیس را از حالت Read-only به حالت نرمال برمی‌گردانیم.

RESTORE DATABASE DBNEW_ NEW FROM DISK ='C:\TMP\DBNEW.BAK' WITH RECOVERY

GO