Sqlserver
 sql >> база данни >  >> RDS >> Sqlserver

Начини за коригиране на SQL Server, открил I/O грешка, базирана на логическа последователност

Резюме: Проблемът с недостъпността на базата данни на 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 база данни:

  1. Нелепо е да се очаква да се възстанови от резервно копие на базата данни на SQL, когато достъпното архивно копие е остаряло.
  2. В случай, че базираната на логическа последователност I/O грешка се разпространи в базата данни на SQL сървъра, в този момент тази стратегия няма да е легитимна.
  3. За тези ситуации, при които дефектната страница съществува в неклъстериран индекс, 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, но това не означава, че наистина ще коригира грешката. Освен това може да доведе до загуба на данни.


  1. Database
  2.   
  3. Mysql
  4.   
  5. Oracle
  6.   
  7. Sqlserver
  8.   
  9. PostgreSQL
  10.   
  11. Access
  12.   
  13. SQLite
  14.   
  15. MariaDB
  1. Избиране на данни от два различни сървъра в SQL Server

  2. Използвайте SET TEXTSIZE, за да ограничите връщаните данни за всеки ред в SQL Server

  3. Как да четете и анализирате планове за изпълнение на SQL Server

  4. CodeIgniter MSSQL връзка

  5. Регистрирайте промените на записите в SQL сървъра в таблица за одит