Резюме: Проблемът с недостъпността на базата данни на SQL е често срещаният проблем, с който се сблъскват потребителите на базата данни. Така че този блог за справяне с проблеми ще обсъди SQL Server, открил I/O грешка, базирана на логическа последователност. Ще обсъдим причината за тази грешка и най-добрите възможни начини да разберем как да се справим с този проблем. За достъп и възстановяване на недостъпната SQL база данни потребителят може да се възползва от инструмента за възстановяване на база данни на SQL Server.
Причини за грешка в I/O базирана на логическа последователност на базата данни:
- Внезапно изключване/срив на системата или ограничено изключване
- Администраторът на SQL се опитва да поиска или промени SQL данни
В момента, когато база данни на SQL Server срещне грешка, базирана на логическа последователност, първоначалната стъпка е откриването на грешката.
Придружаващите стратегии могат да помогнат при откриването на грешката:
- Използвайте инструмента за анализатор на най-добрите практики (BPA) – инструментът BPA помага при идентифицирането на основни грешки в последователността. Този инструмент е изричен за SQL-варианта, което означава, че BPA 2008 е достъпен с SQL 2008 и т.н.
- Проверете системата на Windows на ниво рамка на Event Log, грешки, свързани с драйвер или диск
- Проверете почтеността на файловата рамка, като изпълните chkdsk поръчка
- Изпълнете диагностиката, предложена от производителите на хардуер за рамката или диска
- За SQL Server 2008 изпълнете помощната програма SQLIOSim на устройството на базата данни, която е обявила I/O грешка.
- Свържете се с продавача на хардуер или производителя на устройството, за да проверите дали хардуерните предпоставки отговарят на изискванията за вход/изход на SQL сървъра.
Ръчни начини за справяне с SQL Server, открил I/O грешка, базирана на логическа последователност
Техника 1 – Проверете хардуера и мрежата от приложения
Грешка при нередност на базата данни може да бъде коригирана чрез изграждане на подходяща мрежа между базата данни и SQL приложението.
Техника 2 – Възстановяване от резервно копие на SQL
Най-достижимото решение е да се използва архивиране за възстановяване на SQL база данни. Преди да възстановите от резервно копие, уверете се, че:
- Имате текущо пълно архивиране
- Резервното копие се актуализира само преди повреда и не е много старо, за да се поддържа стратегическо разстояние от загуба на основни данни.
- Корупцията е на ниво страница, тъй като проблемите с корупцията на ниво страница могат да бъдат разрешени с помощта на възстановяване на ниво страница.
Стъпка 1: Използвайте придружаващата поръчка за възстановяване на SQL база данни от пълен архив
Архивирайте дневника на транзакциите
Резервно копие на дневника PageLevelRestores TO
Plate =‘g:PageLevelRestores_LOG1.bak’
С INIT
ПРЕДИ
Стъпка 2: Извършете промяната на възстановяването, за да отразявате прогресията онлайн.
Архивирайте опашката на дневника...
Резервно копие на дневника PageLevelRestores TO
Circle =‘g:PageLevelRestores_LOG_TAIL.bak’
С INIT
ПРЕДИ
Забележка:Няма убедителна причина за възстановяване на пълната база данни на SQL сървър, ако повредата е свързана с една страница. Можете да възстановите базата данни от достъпния архив за тази страница, която е подкопана. Изпълнението на придружаващи поръчки ще помогне за възстановяване на архива за самостоятелна страница:
Възстановете всички достъпни архивни копия на регистрационни файлове в правилната заявка
Възстановяване на дневника PageLevelRestores ОТ
Circle =‘g:PageLevelRestores_LOG1.bak’
С НЕВЪЗСТАНОВЯВАНЕ
ПРЕДИ
И накрая, възстановете резервното копие на опашния журнал
Възстановяване на дневника PageLevelRestores ОТ
Circle =‘g:PageLevelRestores_LOG_TAIL.bak’
С НЕВЪЗСТАНОВЯВАНЕ
ПРЕДИ
Накрая свършете с последователността за възстановяване
Възстановяване на БАЗА ДАННИ PageLevelRestores С ВЪЗСТАНОВЯВАНЕ
ПРЕДИ
Когато архивирането на базата данни възстанови SQL базата данни, изпълнете отново заявката DBCC CHECKDB, за да наблюдавате дали избраната прокламация преобладава без грешка в I/O базирана на логическа последователност на базата данни на SQL. Тази поръчка допълнително следи дали няма загуба на данни в тази таблица.
Ограничения на архивирането на SQL база данни:
- Нелепо е да се очаква да се възстанови от резервно копие на базата данни на SQL, когато достъпното архивно копие е остаряло.
- В случай, че базираната на логическа последователност I/O грешка се разпространи в базата данни на SQL сървъра, в този момент тази стратегия няма да е легитимна.
- За тези ситуации, при които дефектната страница съществува в неклъстериран индекс, SQL базата данни може да бъде коригирана чрез премахване и пресъздаване на индекса на SQL базата данни.
Техника 3:Поправете повредена SQL база данни с REPAIR_ALLOW_DATA_LOSS
REPAIR_ALLOW_DATA_LOSS е основното фиксирано ниво за анализираните грешки.
Забележки:Преди да използвате REPAIR_ALLOW_DATA_LOSS, изпълнете придружаващите:
Направете резервно копие на базата данни на SQL сървър и я запазете с друго име
Задайте SQL база данни в режим на един потребител
Вземете всички записи в таблици, като използвате придружаващите команди
Прокламирайте @COUNT INT
Прокламирайте @SQL VARCHAR(2000)
Направете ТАБЛИЦА #T_Info(ID INT IDENTITY(1,1),T_Name VARCHAR(200),D_Count INT)
Обявете TINFO_CUR CURSOR ЗА
ИЗБЕРЕТЕ TABLE_NAME ОТ INFORMATION_SCHEMA.TABLES
WHERE TABLE_TYPE=’BASE TABLE’
ОТВОРЕТЕ TINFO_CUR
Вземете СЛЕДВАЩО ОТ TINFO_CUR В @T_Name
WHILE @@FETCH_STATUS =0
Стартиране
ЗАДАДЕТЕ @SQL=’INSERT INTO #T_Info(T_Name,D_Count) SELECT ”’[email protected]_Name+”’,COUNT(*) ОТ ‘[email protected]_Name+”
ИЗПЪЛНЕНИЕ (@SQL)
Вземете СЛЕДВАЩО ОТ TINFO_CUR В @T_Name
КРАЙ
ЗАТВОРИТЕ TINFO_CUR
ПРЕКРАТЯВАНЕ НА TINFO_CUR
ИЗБЕРЕТЕ * ОТ #T_Info ПОРЪЧАЙТЕ ОТ T_NAME
Съпътстващите подобрения помагат за коригиране на SQL база данни и разрешаване на кохерентна I/O грешка, базирана на последователност:
Изпълнете командата:
DBCC CHECKDB (DB_NAME, REPAIR_ALLOW_DATA_LOSS)
След като SQL базата данни е фиксирана, повторете процедурата на „Брой на записите в таблицата“ и контрастирайте със стария брой записи.
Не трябва да има разлика между първоначалния и последния брой записи в таблицата.
Ограничения :
REPAIR_ALLOW_DATA_LOSS може да поправи базирана на логическа последователност грешка в IO на базата данни, но има значителен проблем със загуба на данни, при която връзката може да срещне загуба на основни данни.
Решение по избор
Ако горните техники не работят, в този момент посетете инструмента за възстановяване на SQL файлове на SysTools. Този инструмент коригира повредени MDF и NDF файлове и възстановява всички обекти на базата данни. Освен това този инструмент помага за възстановяване на всички обекти на базата данни като таблици, тригери, индекси, ключове, правила, изтрити файлове и съхранени процедури. Той е от невероятна помощ в разгара на извънредна ситуация, тъй като продуктът предоставя безпогрешно решение за ремонт и поддържа всички версии на база данни на SQL.
Заключение
Прочетете също: Как да проверите дали SQL базата данни е повредена
В тази публикация сме представили причината за SQL Server, открил I/O грешка, базирана на логическа последователност, и техниките за разрешаване на този проблем.
С оглед на грешката, ние се опитахме да намерим правилната техника. В случай, че хардуерът или рамката са отговорни за грешката, е предписано да се определят проблемите, свързани с хардуера, и в случай, че DBCC CHECKDB докладва грешка в последователността, в този момент се опитайте да възстановите SQL база данни, като използвате обновено архивиране.
Ако проблемът не е отстранен с хардуер и архивиране, в този момент опитайте да поправите базата данни с помощта на REPAIR_ALLOW_DATA_LOSS. Това е основната степен на корекция за определяне на всички грешки от CHECKDB, но това не означава, че наистина ще коригира грешката. Освен това може да доведе до загуба на данни.