2009-08-20 3 views
0

Кто-нибудь знает какие-либо инструменты, которые могут помочь в восстановлении упавших таблиц и хранимых процедур?Восстановление удаленных объектов с сервера sql

Не было произведено резервное копирование, и эта БД случайно была синхронизирована с другой БД, и новые таблицы, созданные в этой БД, были удалены.

благодаря

+2

http://en.wikipedia.org/wiki/Prayer – cakeforcerberus

+0

Это, вероятно, не так просто. Когда вы что-то удаляете, вы обычно отдаете ресурсы, которые он удерживает в ОС, включая дисковое пространство (что в данном случае означает возвращение его в файловую систему через ОС). Я не программист ядра, но я сомневаюсь, что большинство ядер позволят безопасную функцию «восстановить», так как нет гарантии, что ресурс не использовался уже с момента удаления. Я говорю, что даже если это сработает, я буду беспокоиться о целостности данных. Другие, имеющие опыт работы в этой области, должны быть готовы обучать меня по этому вопросу. –

ответ

4

Я гугле «SQL Server восстановления отброшенной таблицы» и придумал полезный форум ответ.

http://www.eggheadcafe.com/community/aspnet/13/11519/are-you-sure-you-dont-ha.aspx

«Когда база данных создается в SQL Server, он установлен на полную резервную копию по умолчанию. Таким образом, ваша таблица должна быть доступна путем восстановления резервной копии транзакции. Попытайтесь идти на„восстановить базу данных“ , щелкнув правой кнопкой мыши имя базы данных в Enterprise Manager и выбрав «Все задачи».

У меня вопрос, если бы это восстановило таблицу или только данные.

RedGate имеет довольно дешевое программное обеспечение под названием «SQL Log Rescue», которое должно помочь в этом. Ознакомьтесь с этой статьей SQL Server Central: http://www.sqlservercentral.com/articles/Product+Reviews/sqlrescuereview/2086/

EDIT: программное обеспечение RedGate требует полной резервной копии, поэтому это не поможет. Я просто поймал это.

Возможно, журнал транзакций поможет восстановить структуру таблиц, даже если он не сможет фактически восстановить таблицу.

+0

действительно хорошие моменты, к сожалению, как было сказано ранее, у него нет резервной копии! все еще голосуя за подробные исследования gj! –

+0

спасибо. :) Да, программное обеспечение RedGate не будет работать, так как оно требует резервного копирования. Однако, если какие-либо транзакции были выполнены в БД, есть хорошая вероятность, что журналы транзакций по-прежнему содержат данные, которые помогут восстановить структуру таблицы. Если что-то не резервируется, вы обычно можете предположить, что значения по умолчанию используются, когда все создано, поэтому журнал транзакций должен регистрироваться. – user158017

3

В какой модели восстановления ваш дБ?

Краткий ответ: Без резервного копирования вы потеряли свои данные. В этом весь смысл резервного копирования.

Длинный ответ: Если модель восстановления FULL, и вы никогда не делали полную резервную копию, она фактически работает так же, как и в простой модели восстановления. Это означает, что вы не можете сделать резервную копию журнала транзакций и хуже: ваш журнал транзакций усечен на каждой контрольной точке. Это означает, что даже если ваша упавшая таблица была в журнале транзакций, теперь она почти наверняка перезаписана новыми транзакциями и потеряна навсегда. Никакой инструмент не поможет вам.

Если вы знаете внутренние структуры sql db, вы можете сделать судебную экспертизу с помощью DBCC PAGE и надеяться, что эти экстенты еще не перезаписаны данными других объектов, но для этого требуются реальные экспертные знания - вы можете нанять их. Вы также можете проверить, были ли записи журнала транзакций вашей таблицы уже перезаписаны (возможно, есть) с помощью fn_dblog(). Существует трассировка на стороне сервера, которую вы можете использовать для определения точного времени, в течение которого таблица была удалена.

Подводя итог: наличие автоматизированного резервного копирования имеет важное значение. Только полная модель восстановления позволяет восстановить время в момент восстановления, которое вы могли бы использовать для восстановления таблицы до момента, предшествующей команде drop.

8

Если база данных находилась в полном режиме восстановления, а резервные копии журнала транзакций или журнал транзакций никогда не были усечены, вы можете попробовать использовать сторонний регистратор журналов, такой как ApexSQL Log или SQL Log Rescue (бесплатный, но sql server 2000).

Другой вариант для чтения журнала транзакций - это не так хорошо документированная функция DBCC LOG.

Если существует целая цепочка транзакций, это означает, что предыдущая таблица CREATE или ALTER, которая была выполнена против этой таблицы, все еще находится в журнале транзакций. К сожалению, нелегко найти эту информацию, если ваш журнал транзакций очень велик, особенно без сторонних инструментов.

7

Вы также можете восстановить потерянный объект из журнала SQL Server, если у вас нет резервной копии.

Select Convert(varchar(Max),Substring([RowLog Contents 0] 
,33 
,LEN([RowLog Contents 0]))) as [Script] 
from fn_dblog(NULL,NULL) 
Where [Operation]='LOP_DELETE_ROWS' And [Context]='LCX_MARK_AS_GHOST' 
And [AllocUnitName]='sys.sysobjvalues.clst' 

Ссылка: http://raresql.com/2012/12/04/sql-server-recover-the-dropped-objects-view-stored-procedure-function-trigger/

+0

Блестящий! преступник Я только что добавил первый голос. – deadcrab

3

Это работает для меня:

Select Convert(varchar(Max), Substring([RowLog Contents 0] 
, 33 
, LEN([RowLog Contents 0]))) as [Script] 
from fn_dblog(NULL, NULL) 
Where [Operation] = 'LOP_DELETE_ROWS' And [Context] = 'LCX_MARK_AS_GHOST' 
And [AllocUnitName] = 'sys.sysobjvalues.clst' 
Смежные вопросы