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

Откуда:
Сообщений: 23
Здравствуйте, уважаемые.

Сразу скажу, я 1Сник, с mssql знаком поверхностно.
Прошу помощи в восстановлении БД.

Предыстория. Жила-была БД на 10 sas raid. Контроллер дешевенький, кэш Hdd был не выключен. На соседний сервер настроен logshipping. В один прекрасный день от сервера-приемника logshipping получаем сообщение

1. Could not redo log record (1718035:250:44), for transaction ID (0:807870501), on page (1:4299870), database 'tis103' (database ID 6). Page: LSN = (1717708:15918:51), type = 2. Log: OpCode = 11, context 3, PrevPageLSN: (1716153:4472:2). Restore from a backup of the database, or repair the database.

Полез в логи lohshipping, там нашел сообщение о том, что невозможно восстановить очередной файл журнала, т.к.(в вольном переводе и не помню дословно) файл не является корректным продолжением цепочки.
Что за ошибка я понять не смог, поэтому просто снес logshipping и начал настраивать поновой. В процессе восстановления получаем информацию о том, что полетел один hdd на рабочем сервере и все наглухо зависло, делаем ребут сервера. БАза в suspect, поэтому восстанавливаем копию на начало дня, работаем в ней.

Восстановление DBCC CheckDB ('bitaya', REPAIR_ALLOW_DATA_LOSS) выдает следующее:

Failed to restart the current database. The current database is switched to master.
Msg 5123, Level 16, State 1, Line 3
CREATE FILE encountered operating system error 3(Системе не удается найти указанный путь.) while attempting to open or create the physical file 'L:\tis103_log.ldf'.
Msg 5024, Level 16, State 2, Line 3
No entry found for the primary log file in sysfiles1. Could not rebuild the log.
Msg 5028, Level 16, State 2, Line 3
The system could not activate enough of the database to rebuild the log.
DBCC results for 'bitaya'.
CHECKDB found 0 allocation errors and 0 consistency errors in database 'bitaya'.
Msg 7909, Level 20, State 1, Line 3
The emergency-mode repair failed.You must restore from backup.


Из сообщения вижу, что mssql пытается найти журнал транзакций по старому пути(L: \ tis103_log.ldf), где его конечно же нет, так как базу я подцепил на другом сервере. Подцеплял так: создал БД с именем "bitaya", остановил службу сервера и на место пустых файликов "bitaya.mdf" и "bitaya_log.ldf" положил файлы базы, после чего запустил службу сервера. Пришлось делать так, потому что attach не работал, а копию базы после падения не делали, а просто скопировали файлики mdf и ldf
6 окт 17, 17:54    [20849231]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
прошу прощения, кэш hdd был включен. кэш на контроллере выключен
6 окт 17, 17:58    [20849247]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
Гавриленко Сергей Алексеевич
Member

Откуда: Moscow
Сообщений: 34970
mustdwindows98aie
Пришлось делать так, потому что attach не работал, а копию базы после падения не делали, а просто скопировали файлики mdf и ldf
С какой ошибкой падал аттач?
mustdwindows98aie
Из сообщения вижу, что mssql пытается найти журнал транзакций по старому пути(L: \ tis103_log.ldf), где его конечно же нет, так как базу я подцепил на другом сервере.
Пути к файлам баз хранятся в базе master, а не в самой базе. К тому же их можно сменить командой alter database ... modify file.
6 окт 17, 18:04    [20849269]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
attach падает так:

TITLE: Microsoft SQL Server Management Studio
------------------------------

Attach database failed for Server 'localhost'. (Microsoft.SqlServer.Smo)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft SQL Server&ProdVer=9.00.5000.00&EvtSrc=Microsoft.SqlServer.Management.Smo.ExceptionTemplates.FailedOperationExceptionText&EvtID=Attach database Server&LinkId=20476

------------------------------
ADDITIONAL INFORMATION:

An exception occurred while executing a Transact-SQL statement or batch. (Microsoft.SqlServer.ConnectionInfo)

------------------------------

Could not redo log record (1718136:9499:70), for transaction ID (0:807904397), on page (1:4383854), database 'tis103' (database ID 5). Page: LSN = (1717709:6880:12), type = 2. Log: OpCode = 11, context 3, PrevPageLSN: (1716153:12447:3). Restore from a backup of the database, or repair the database.
During redoing of a logged operation in database 'tis103', an error occurred at log record ID (1718136:9499:70). Typically, the specific failure is previously logged as an error in the Windows Event Log service. Restore the database from a full backup, or repair the database.
Could not open new database 'tis103'. CREATE DATABASE is aborted. (Microsoft SQL Server, Error: 3456)

For help, click: http://go.microsoft.com/fwlink?ProdName=Microsoft SQL Server&EvtSrc=MSSQLServer&EvtID=3456&LinkId=20476

------------------------------
BUTTONS:

OK
------------------------------
6 окт 17, 18:16    [20849306]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
пока создал соответсвующие путь для журнала транзакций, как на боевом сервере.

запустил

DBCC checkdb('tis103')
ALTER DATABASE tis103 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('tis103', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE tis103 SET MULTI_USER


жду
6 окт 17, 18:23    [20849329]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
база 50 гиг
6 окт 17, 18:24    [20849337]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
результат выполнения указанного выше набора команд в одном запросе.


https://docs.google.com/document/d/1ID_k7p_LICeLLXijMqt0VOR1fgG5PYA2gpRflQHfycQ/edit?usp=sharing

Что то я не понял, почему то указывает что минимальный уровень восстановления REPAIR_ALLOW_DATA_LOSS. Получается только первая команда DBCC checkdb('tis103') выполнилась что ли?...

Запустил еще раз следующие 3.

ALTER DATABASE tis103 SET SINGLE_USER WITH ROLLBACK IMMEDIATE
DBCC CheckDB ('tis103', REPAIR_ALLOW_DATA_LOSS)
ALTER DATABASE tis103 SET MULTI_USER

жду
6 окт 17, 19:48    [20849472]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
LoopN
Guest
Ошибок слишком много, тут лучше восстанавливать из бэкапа или из базы на которую шел лог шипинг .
6 окт 17, 20:44    [20849549]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
прошла проверка REPAIR_ALLOW_DATA_LOSS
https://docs.google.com/document/d/1LIMdakgAVaCUohL1UgpXjcGtY0l8jK_DwFbculS0J6I/edit?usp=sharing

По итогам могу сказать, что в базе лог-шиппинг оказалось данных больше(в лог шиппинг последние записи на 15-00 ,а в восстановленной на 14-53).

Получается у нас вылетели данные буквально за 1-5 мин, точно еще на знаю, в понедельник буду логи онлайн-касс смотреть. Но это тоже достаточно критично, за это время могли пройти по кассам значительные суммы - это база данных торгового центра с проходимостью по кассам до ~20 чел. за 5 мин. + в этой же базе работают 4 филиала в терминале.

Очень странно, почему не сохранились последние данные, ведь файл журнала транзакций располагался совсем на другом жестком диске(raid1), с которым проблем не было.

Разве может быть такое, то этих данных нет в файле журнала транзакций, ведь они сначала пишутся туда, а потом только в базу, правильно я понимаю? Ведь в лог базе лог-шиппинга данных больше на целых 7 минут.
7 окт 17, 08:27    [20850320]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
MKDT
Guest
Это все мелочи насчет 5 минут, после REPAIR_ALLOW_DATA_LOSS бухи будут умолять восстановить базу хотя бы за прошлый год.
7 окт 17, 09:28    [20850351]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
Ну кому мелочи, а кому нет. На отделах и складе не хватает товара, который был продан в эти 5 минут. Суммы могут быть очень значительные. Причем сейчас начнется, что все под одну гребенку начнут грести. Я бы на ихнем месте сразу обзовелся парочкой шуруповертов ,а спихнул все на сбой базы.:)
Вопрос не в этом. Вопрос в том - почему некоторых данных нет в востановленной базе, если они есть в лог-шиппинге
7 окт 17, 10:52    [20850468]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
Все последние операции должны быть отражены в файле журнала транзакций, раз они попали в лог-шиппинг.
7 окт 17, 10:55    [20850474]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
MKDT
Guest
REPAIR_ALLOW_DATA_LOSS не восстанавливает данные, он на дыры в картине пластырь клеит
7 окт 17, 11:22    [20850520]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
ОК, забудем про REPAIR_ALLOW_DATA_LOSS .
Есть способы кроме этого вытащить данные? Ведь должны же они в журнале транзакций быть
7 окт 17, 14:26    [20850793]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
MKDT
Guest
Должны быть, но смущает что у тебя бэкап лога при разворачивании через лог шипинг ошибку выдал.

Чтобы сделать бэкап лога у поврежденной базы (называется бэкап хвоста)
выполни вот это:
backup log db_name to disk ='C:\log_tail.trn'
WITH NO_TRUNCATE ,NORECOVERY

Я так понял ты базу куда шел логшипинг перевел в активный режим? Тогда на нее уже логи не накатить с поврежденной базы. Поэтому тебе нужен развернуть полный бэкап (без повреждений) в NORECOVERY, после чего развернуть цепочку бэкапов лога (тоже в NORECOVERY) и в самом конце бэкап хвоста (уже с RECOVERY)
7 окт 17, 15:35    [20850895]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
MKDT
Guest
А вот еще, раз ты после того как база навернулась делал checkdb с LOSS_DATA то я думаю и бэкап хвоста у тебя не в лучшем виде, поэтому если будешь восстанавливать бэкап хвоста, нужно его восстановить до момента когда все навернулось:
RESTORE LOG [db_name] from disk 'C:\log.trn' with RECOVERY,STOPAT ='2017-01-01 12:00:00.000'

А вообще тебе нужно выписать для начала, что вообще есть, какие бэкапы ит.д., в каком состоянии база куда лог шипинг шел
7 окт 17, 15:41    [20850900]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
MKDT , проясняю ситуацию по имеющимся копиям.

В примерно в 15-00 я сделал полный архив для лог-шиппинг(как раз пытался восстановить log-shipping, еще не зная о всей серьезности ситуации, поскольку raid 10 должен был выдержать выход из строя одного HDD без проблем). Это одна из самых важных и спасительных копий, оттуда я уже восстановил весь день, кроме последних 5 минут(с 15-00 до 15-05).
В 15-05 система вклинила полностью, сервер ребутнули. Когда сервер загрузился мы выяснили что база suspect и на резервном сервере развернули копию на начало дня, в которой продолжили работу, в надежде, что потом данные за первую половину дня подтянем. Таким образом: есть вот эта битая база и полная копия на 15-00, то есть за 5 минут до полного клина базы.

И есть еще теперь битая база после REPAIR_ALLOW_DATA_LOSS ,в которой есть информация только до 14-45(!!!). Что странно, так как по идее из лога должно было восстановится состояние как минимум на 15-00, ведь эти данные есть в копии для лог-шиппинг. Файл журнала лежал на отдельном рейде, с которым не было проблем, а данные попали в резервную копию. Но при этом не восстановились из журнала транзакций при dbcc на битой базе. Не понимаю, как так могло получится, ведь данные должны сразу писаться в лог транзакций, а уж потом выгружаться в базу и тем более в резервную копию.

По поводу бэкапа хвоста. Есть ли смысл, если я уже вижу, что данных в восстановленной базе меньше, чем в бэкапе, который сделан за 5 минут до клина?
7 окт 17, 20:34    [20851295]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
Кэш жесткого диска может сыграл злую шутку и не успел выгрузить данные журнала транзакций на блин винта
7 окт 17, 20:37    [20851298]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
mustdwindows98aie
Кэш жесткого диска может сыграл злую шутку и не успел выгрузить данные журнала транзакций на блин винта

Кстати в ползу этой версии говорит то, что на том же физическом винте(хотя и на другом разделе) лежит каталог лог-шиппинга, то есть туда же в этот самый момент выгружалась полная резервная копия, могла образоваться очередь
7 окт 17, 20:42    [20851308]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
MKDT
Guest
Не понимаю, как так могло получится, ведь данные должны сразу писаться в лог транзакций, а уж потом выгружаться в базу и тем более в резервную копию.

я думаю так: данные писались на трупик, когда запустил проверку checkdb с with LOSS_DATA он увидел что все новые данные в базе плохие (чексуммы не сходятся) и обнулил их, поэтому ты и не видишь этих >=10 минут, т.к. их LOSS_DATA обнулил , но в логе они скорее всего все еще есть. Это мое предположение.
7 окт 17, 20:42    [20851309]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
попробую утилитками для просмотра ldf поиграть и посмотреть хвост базы до rapair data loss... но это в понедельник, т.к. надо отдохнуть, неделька была жаркая:)
7 окт 17, 20:57    [20851326]     Ответить | Цитировать Сообщить модератору
 Re: Разрушения в БД  [new]
mustdwindows98aie
Member

Откуда:
Сообщений: 23
Короче по итогам. Все данные нашел в НЕ протестированной убитой базе с помощью утилиты Toad for SQL Server 6.8(tools-administer-log reader). Очень удобная вещь, можно сформировать sql запрос для последующего анализа или загрузки в базу. Позволяет открывать непосредственно файл базы без подключеняи к СКЛ-серверу.

До этого пробовал SysTools SQL Log Analyzer, ApexSQL Log - результата ноль.
12 окт 17, 10:47    [20863100]     Ответить | Цитировать Сообщить модератору
Все форумы / Microsoft SQL Server Ответить