Найгірший кошмар для DBA - це втрата даних по його власну помилку. Не рідкість, коли випадково виконується операція видалення (DELETE) або зміни (UPDATE) без вказівки фільтра WHERE, тоді відразу мільйони рядків можуть бути некоректно змінені.
Які ж варіанти відновлення можливі в SQL Server, якщо з вами трапилася подібна ситуація?
Ви можете відновити дані з резервної копії, яку ви зробили прямо перед тим, як дані були змінені.
Загальний сценарій відновлення:
- Відновіть БД з резервної копії поверх вихідної
- В іншому випадку
- Відновіть БД з резервної копії під іншим ім'ям
- Знайдіть всі рядки, які необхідно відновити
- Напишіть сценарій, який відновить потрібні рядки в вихідної БД
На жаль, сценарій, описаний вище, це ідеальна картина. У реальному ж житті все може піти зовсім ні так:
- Помилки виявляються ні відразу, а через якийсь час
- У базі даних стався великий набір змін між створенням резервних копій і внесенням до бази помилкових даних
- Наступні зміни, зроблені в БД, вже після вашої помилки
- Резервні копії не робляться регулярно або відсутні зовсім
В якості альтернативного сценарію відновлення можна скористатися даними з журналу транзакцій і резервних копій журналу транзакцій.
ApexSQL Log - це той інструмент відновлення SQL Server, який здатний з даних журналу транзакцій повернути змінені записи в початковий стан.
Щоб відновити за допомогою ApexSQL Log випадково видалені або змінені дані виконайте наступні кроки:
- Запустіть ApexSQL Log
- Підключіться до БД
- У вікні Select SQL logs to analyze вкажіть журнал транзакцій і резервні копії журналів транзакцій, які ви хочете прочитати. Зверніть увагу, що вони повинні утворювати повну ланцюжок подій, щоб забезпечити відновлення всіх даних. Додавання повної резервної копії БД може допомогти в пошуку потрібних даних і здатне прискорити цей пошук.
Усі транзакції будуть представлені у вигляді таблиці, ви як і раніше можете вказати додаткові умови, щоб відсіяти непотрібні записи за допомогою фільтрів (Filter) в лівій панелі.
Для виконання відновлення даних, виберіть транзакції, які ви хочете повернутися і натисніть кнопку Create undo script на вкладці Actions.
Тепер досить виконати цей сценарій у вашій БД і все випадково змінені або видалені дані будуть повернуті.
Так що пам'ятайте, якщо ви випадково видалили або змінили дані, ви все ще можете відновити їх за допомогою ApexSQL Log