Добро пожаловать в форум, Guest  >>   Войти | Регистрация | Поиск | Правила | В избранное | Подписаться
Все форумы / Microsoft SQL Server Новый топик    Ответить
 Стоит задача восстановления некоторых записей из бэкапа  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72982
Уже второй раз возникает ситуация: по глупости или неосторожности удаляют запись о персоне, которая тащит за собой зависимые данные. Плюнуть нельзя, нужно все это восстановить. Бэкап есть, но просто перезаписать им тоже нельзя, за период между бэкапом и удалением (несколько часов) прошло немало других операций, которые должны сохраниться. В первый раз нудно восстанавливал вручную в SSMS, сейчас хочу сделать процедуру. Собираюсь делать SET IDENTITY_INSERT ON и тупо insert каждой затронутой таблицы из одной базы в другую. Насколько это правильно? Вряд ли моя задача уникальна, может есть какие-то готовые велосипеды и подходы?
28 янв 13, 18:09    [13841002]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
Бэкап есть, но просто перезаписать им тоже нельзя, за период между бэкапом и удалением (несколько часов) прошло немало других операций, которые должны сохраниться.

Как вы тогда собрались что то получить из бэкапа ?
28 янв 13, 18:11    [13841017]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72982
В смысле нельзя перезаписать базу бэкапом целиком. Создается новая база и перезаписывается этим бэкапом.
28 янв 13, 18:14    [13841035]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
Glory
Member

Откуда:
Сообщений: 104751
Antonariy
тупо insert каждой затронутой таблицы из одной базы в другую

тогда какой "тупо insert каждой затронутой таблицы", если данные в таблицах были удалены лишь частично ?
28 янв 13, 18:23    [13841094]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
Cygapb-007
Member

Откуда:
Сообщений: 1677
Где-то мне попадалось упоминание о программе, сравнивающей содержимое таблиц в двух базах данных SQL

Но даже без нее - восстановить из бэкапа рядом и сравнить (а нужные расхождения и insert/update) типа
select * 
from restored..table1 r 
left join original..table1 o on o.key=r.key
[where o.key is null]
28 янв 13, 18:30    [13841144]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72982
Это же персона. Известны ФИО и прочие данные, по которым определяется ее id записи, от которой можно плясать.
28 янв 13, 18:31    [13841147]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Кроме инсертов , могут быть и апдейты и делиты:) У вас транзакшион лог с прошлого бэкапа сохранился? Не трогайте его , позовите профи. Есть програмки восстанавливающие данные из транзакшион лога(например путем генерации команд в базу бэкапа).
28 янв 13, 18:32    [13841153]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72982
МуМу
Кроме инсертов , могут быть и апдейты и делиты:)
Это вы о чем-то другом. Нужная запись и сязанные с ней удалены, какие апдейты и делиты после этого? Что с тех пор происходило с остальной частью базы не важно.
28 янв 13, 18:45    [13841201]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
invm
Member

Откуда: Москва
Сообщений: 9719
Каскадные FK?
Хороший пример, демонстрирующий неконтролируемость удалений при их использовании.
28 янв 13, 19:06    [13841312]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
Antonariy
Member

Откуда: ☭
Сообщений: 72982
Вообще-то триггеры, но не суть.
28 янв 13, 19:10    [13841338]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
МуМу
Member

Откуда:
Сообщений: 1134
Ну например мог быть апдейт связанных данных. Он важен с бизнес точки зрения. У вас состояние до того апдейта.(т.е сначала апдейт связанных а затем делит по fk) Вы берете и накатываете предыдущее состояние. Моя мысль понятна? Впрочем вам лучше судить по специфике вашей БД. Если вопрос просто найти все фореин кеи и их восстановить из одного бэкапа в другой - поиском найдете много примеров.
28 янв 13, 19:20    [13841377]     Ответить | Цитировать Сообщить модератору
 Re: Стоит задача восстановления некоторых записей из бэкапа  [new]
gang
Member

Откуда:
Сообщений: 1394
Antonariy
Собираюсь делать SET IDENTITY_INSERT ON и тупо insert каждой затронутой таблицы из одной базы в другую. Насколько это правильно?

В общем случае однозначно не правильно. В Вашем частном случае может оказаться допустимо, но кроме Вас (или вашего разработчика\суппортера БД\ПО) это гарантировать никто не возьмется. Для этого нужно точно понимать бизнес-логику приложения и связанную с ним логику модификации данных.
Antonariy
Вряд ли моя задача уникальна, может есть какие-то готовые велосипеды и подходы?

Проблема Вашу можно разделить на несколько частей:
1) Отслеживание изменений. Для этого обычно используют, в зависимости от особенностей задачи и версии SQL, самописные решения на триггерах, трассировки, штатные change tracking и change data capture.
1.1.) Иногда через триггеры реализуется запрет изменений.
2) Оповещение об изменениях. Опять же самопись с mail-ом в триггерах (не лучший вариант), алерты, асинхронный парсинг логирующих таблиц, файлов логов и т.п.
3) Минимизация времени восстановления. Если Ваша схема и логика данных позволяет откатывать изменения заменой (вставкой) строк, то основной задачей становится сохранений исходной версии динных до изменения (или истории версий). Здесь наиболее часто используется логирование версий строк и\или команд модификации через опять же триггеры или change data capture. Кроме того в качестве источников "исходного состояния" данных для частичного восстановления могут использоваться снапшоты, стендбаи или реплики БД с задержкой доставки. Кроме того есть коммерческие продукты и самописные скрипты различной степени адекватности для формирования команд отката изменений на основе содержимого транзакшн лога БД (или его бекапа).
29 янв 13, 10:01    [13842779]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить