در نظر بگیرید که در یک سازمانی تیم توسعه به اشتباه در محیط عملیاتی ممکن است یک دستور حذف را بنویسد و برای مثال یک میلیون رکورد حذف شود. اگر به عنوان مسئول نگهداری بانک اطلاعاتی در سازمانی مشغول به کار هستید و از دیتابیس سازمان به صورت مرتب از لاگ فایل بکاپ تهیه کنید میتوانید دیتابیس را به یک ساعت خاص بازیابی کنید. در ادامه یک سناریو در همین رابطه ارائه خواهیم داد تا با فرآیند بازیابی دیتابیس به یک ساعت خاص آشنا شویم.
گام اول
توسط
دستور زیرا بررسی میکنیم که اگر دیتابیسی از قبل با نام «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