Възстановяване на изтрити данни от регистрационни файлове за транзакции

В статията Възстановяване на изтрити SQL данни от резервно копие или от файлове на онлайн база данни разгледахме два сценария за възстановяване, единият от пълно архивиране, а другият от файл с данни на SQL Server – mdf файл. Но когато става въпрос за възстановяване на данни, можете да използвате друг ресурс - регистъра на транзакциите.

Всички промени, направени в базата данни, се поставят в регистъра на транзакциите като отделни записи. Ако вашата транзакция за изтриване е в активния регистър на транзакциите, в отделен файл с регистър на транзакциите или в резервно копие на регистъра на транзакциите, тогава можете да прочетете тази транзакция и, ако желаете, дори да я отмените.

Обмислете различни модели на възстановяване:

  • В модела за пълно възстановяване транзакцията за изтриване се съдържа в активния регистър на транзакциите или в резервно копие на регистъра на транзакциите, ако това архивиране е направено след операцията за изтриване.
  • В модела за възстановяване Bulk_logged цялата транзакция се записва в регистрационния файл на транзакциите, с изключение на BLOB данните. защото в този режим на възстановяване изтриването на BLOB не се регистрира и няма да е възможно да ги възстановите. Всички други изтривания могат да бъдат прочетени или от активния регистър на транзакциите, или от резервни копия на регистрационни файлове, направени след изтриването.
  • Прост модел за възстановяване. Ако има много активност в базата данни и след вашата операция за изтриване са извършени достатъчно голям брой операции с данни, тогава вашата транзакция в регистъра на транзакциите вече ще бъде презаписана и ще бъде невъзможно възстановяването на данните. Следователно, колкото по-бързо получите достъп до данните в активната част на регистъра на транзакциите, толкова по-вероятно е да върнете изтритите данни.

Регистър на ApexSQL

    СтартирайтеApexSQL Log

Свържете се с базата данни, където е извършено изтриването.

Ако след изтриването на данните са създадени резервни копия на регистъра на транзакциите, тогава с помощта на бутонаДобавяне трябва да добавите всички тях в следващата стъпка. Имайте предвид, че трябва да изградите цялата верига за архивиране, ако вашите данни съдържат BLOB (повече за това по-долу).

Ако имате отделен (отделен) регистър на транзакциите, който съдържа изтрити записи (например след изтриване сте преместили базата данни офлайн и сте копирали LDF файла), тогава можете също да го добавите към търсенето:

За да стесните търсенето, в стъпкатаНастройка на филтъра, в секциятаВремеви диапазон, посочете интервала от време, когато е извършена операцията за изтриване.

В разделаОперации укажете, че търсенето е само за транзакции за изтриване. За да направите това, премахнете отметката от операциитеВмъкване на ред иАктуализиране на ред в списъкаОперации с данни (DML).

Ако е възможно, посочете таблиците, от които е станало изтриването, ако не, оставете всички таблици

Щракнете върху отваряне (Отвори ).

Всички изтрити записи ще бъдат представени в таблица. Всичко, от което се нуждаете сега, е да изберете всички или конкретни записи, които искате да възстановите, и да щракнете върхуСъздаване на скрипт за отмяна в менюто, за да създадете скрипт за отмяна.

За да създадете скрипт за отмяна за всички записи в таблицата, щракнете върху Създаване на скрипт за отмяна от менюто. За да създадете скрипт само за някои записи, изберете ги в обобщената таблица и изберете Създаване на скрипт за отмяна от контекстното меню.

След това ще бъде създаден скрипт, който ще възстанови изтритите записи.

  • За да изпълните скрипта за възстановяванев менюто натиснете бутона
  • Скриптове за бърза отмяна с ApexSQL Log

    Вместо да отворите резултата като таблица (Отваряне на резултатите в таблица ), щракнете върху експортиране на резултатите във файл (Експортиране на резултати във файл )

    Изберете генериране на скрипт за връщане назад (Генериране на скрипт за връщане назад (отмяна) ) и посочете път и име на файл

    НатиснетеOK.

    Ще бъде генериран скрипт за отмяна, който ще върне всички изтрити записи.

    Възстановяване на ApexSQL

    1. СтартирайтеApexSQL Recover
    2. Изберете Възстановяване на изгубени данни поради операция ИЗТРИВАНЕ .
    3. Посочете екземпляра на SQL Server, идентификационните данни и базата данни, където е извършено изтриването.
    4. Посочете източници за възстановяване (Налични са няколко източника за възстановяване ).
    5. Активният регистър на транзакциите, всички резервни копия на регистрационните файлове на транзакциите и пълното архивиране на базата данни ще бъдат избрани автоматично. Ако имате допълнителни журнали за транзакции или резервни копия, можете също да ги добавите чрез бутона Добавяне. Моля, обърнете внимание, че трябва да формирате пълна верига от резервни копия, за да възстановите успешно изгубени данни.
    6. Посочете часа, когато е направено изтриването, ако не знаете кога се е случило, посочетеДата и час са неизвестни.
    7. Използвайте филтъра, за да стесните търсенето си по конкретни имена на таблици, ако е възможно.
    8. Щракнете върху Възстановяване (Възстановяване ).
    9. Скриптът за възстановяване ще бъде създаден и ще трябва само да го изпълните.

    Добрата новина е, че имате шанс да възстановите изтритите данни, дори без пълно архивиране или без архивиране на журнал.транзакции, т.е. дори ако вашата резервна верига е прекъсната. С това, моля, имайте предвид, че възстановяването на двоични големи данни (BLOB) не е възможно без пълна верига от архиви. Това се дължи на особеностите на работата с BLOB данни, защото при изтриване самите данни не се поставят в дневника на транзакциите, а само се прави маркировка за тяхното изтриване. За да възстановите, трябва да преминете през цялата последователност от архивиране на данни до самото начало на веригата. Ако веригата е прекъсната, тогава е невъзможно да се възстанови цялата картина на събитията. Например, ако информацията за актуализиране на BLOB данните е загубена, тогава след изтриването ще възстановим първоначално създадената стойност, без актуализациите, направени в средата на веригата.

    Дори ако имате прост модел за възстановяване, все още имате шанс да си върнете изгубените данни. В простия модел на възстановяване всички нови транзакции презаписват старите транзакции в регистъра на транзакциите. Например, ако имате регистър на транзакциите от 100 GB, с дневно количество промени от 1 GB, тогава регистърът ще бъде напълно презаписан само след 100 дни. Това означава, че дори с прост модел за възстановяване ще можете да възстановите данни, изтрити преди 100 дни.

    Разбира се, това не означава, че трябва да разчитате единствено на това и напълно да забравите за вашата стратегия за възстановяване след катастрофа на SQL Server.

    ApexSQL има два страхотни инструмента, които могат да помогнат с регистрационните файлове на транзакциите. ApexSQL Log ви позволява да филтрирате желаните записи в регистъра на транзакциите по-подробно. В допълнение към филтри по време и име на обект, които присъстват и в двата инструмента, ApexSQL Log може да филтрира по системни обекти, въз основа на стойността на определена колона, и дори да посочи потребителя, който е направил транзакцията. И ако в момента на направататранзакцията е стартирана от ApexSQL Log Connection monitor, след което филтърът по приложение (приложение) и хост (име на хост).

    ApexSQL Recover има по-малко филтри в своя арсенал, но е по-мощен инструмент за възстановяване. В допълнение към създаването на T-SQL скрипт за възстановяване на изтрити данни, това приложение може да създаде нова база данни и да възстанови изтритите записи директно в нея.