Възстановяване на mdf файл. Как да поправите повредена база данни на MS SQL Server

Понякога трябва да се сблъскате със ситуация, при която плодовете на много години работа, които са в SQL базата данни, са застрашени. Тази статия е за това как да предотвратите загуба на данни и ако това се случи, как да възстановите данните от това, което е останало от някога нормална база данни.

Така че да започваме. Ситуацията е следната: има сървър, на който работи 1C+SQL. Докато SQL базите данни работеха, захранването беше прекъснато. Резултатът е плачевен: базата е в подозрително състояние и когато 1c се опита да се закачи към нея, се генерира грешка, която казва, че е невъзможно да се свърже, защото не е възможно да се свърже с нея. базата данни е маркирана като подозрителна за възстановяване. Този режим основно означава, че MS SQL сървърще се опитат да възстановят базата данни със собствени средства. Не докоснах нищо и оставих всичко за през нощта, с надеждата, че до сутринта базата ще бъде възстановена, но на сутринта беше същото и следователно нямаше начин да се доближа до базата. Има резервно копие по закона на подлостта, но е на три дни, плюс има много документи, които се държат само в базата данни, но на хартиен носител ги няма, т.е. няма начин за ръчно възстановяване на документи. След като изразходвах много сила и нерви (които, както знаете, не се възстановяват :)), стигнах до следната последователност от действия, необходими за възстановяване на основата.

1) Основният принцип на първо място е не вреди. Потискаме SQL сървъра и копираме *.mdf и *.ldf файлове от основата настрани.
2) По принцип се случва подозрителното състояние да възникне поради факта, че пътищата към файловете с базата са се променили (например добавени нов дискв системата, която след това беше премахната, папката с базата данни беше преименувана и т.н.). След това, разбира се, пътищата бяха възстановени, но базата данни все още остава маркирана като подозрителна. Ето какво правим:
3) Стартирайте SQL Server.
4) Опитваме се да свържем базата данни чрез Enterprise Manager:
Кликнете с десния бутонза Бази данни в появилото се меню изберете Всички задачи->Прикачване на база данни, след което в появилия се диалогов прозорец изберете файла с базата данни (*.mdf) и задайте необходимите параметри.
5) или чрез анализатора на заявки с нещо като тази команда:
а. sp_attach_db @dbname = "DemoXMB",
b. @filename1 = "E:\Data\DemoXMB_Data.MDF",
° С. @filename2 = "E:\Data\DemoXMB_Log.LDF"
6) Пътищата към базата, разбира се, трябва да бъдат заменени с ваши собствени. Ако основата е свързана, тогава, можем да кажем, се разминахме с лек страх, но ако не, тогава ще продължим.
7) Ако регистрационният файл не е повреден (*.ldf), но *.mdf е повреден (например при свързване на базата данни, sql се кълне в грешки в mdf файла) и режимът на архивиране е зададен на пълен, тогава ние възстановяваме базата данни, без да възстановяваме регистрационните транзакции, почти 100%, че цялото мъчение може да свърши дотук.
8) Ако, напротив, ldf-файлът е повреден, но файлът *.mdf остава, при свързване базата данни се кълне в отсъствието/повредата на регистъра на транзакциите. В този случай можете да използвате HP "sp_attach_single_file_db"

Например:
използвайте master
EXEC sp_attach_single_file_db@dbname="DemoXMB",
@physname="c:\mssql7\data\DemoXMB_Dat.mdf"

При изпълнение на тези команди, файлът DemoXMB_Log.ldf ще бъде създаден в същата директория като основата, с размер 1MB и автоматично разширение.
Ако има *.MDF и *.LDF файлове или данните се съхраняват в повече от един физически файл (общият брой на прикачените физически файлове не трябва да надвишава 16), тогава трябва да се използва "sp_attach_db" HP

Например:
използвайте master
EXEC sp_attach_db@dbname="DemoXMB",
@filename1 = "c:\mssql7\data\DemoXMB_Dat.mdf",
@filename1 = "c:\mssql7\data\DemoXMB_Log.ldf"

За да свържете повече от 16 физически файла към базата данни, използвайте командата:
СЪЗДАВАНЕ НА БАЗА ДАННИ ЗА ПРИКАЧВАНЕ

Ако обаче нищо не помогна, и двата файла са повредени и базата данни все още е в подозрително състояние, тогава можете да опитате да нулирате състоянието на базата данни със следната последователност: (преди да използвате този HP, трябва да разрешите директна промяна на системните таблици )
използвайте master
отивам
Разрешаваме директна промяна на системни таблици:
sp_configure "разрешаване на актуализации",1
отивам
преконфигуриране с отмяна
отивам
За да нулирате подозрителния флаг, изпълнете sp_resetstatus в главната DB:
sp_resetstatus "Име на база данни"
отивам
И сега ще забраним директната промяна на системните таблици:
sp_configure "разрешаване на актуализации",0
отивам
преконфигуриране с отмяна
отивам

По принцип, когато следвах всички тези стъпки, състоянието на заподозрения се нулира, НО! когато се опитваше да извърши някакви действия, SQL започна да се кълне, че базата данни все още е в подозрително състояние. И тогава направих това:

Изпълнете скрипта от QA:
използвайте master
отивам
sp_configure "разрешаване на актуализации", 1
преконфигуриране с отмяна
отивам

Там правим:
актуализирайте sysdatabases set status= 32768 където име = " "

Рестартирайте SQL Server. По принцип основата трябва да се вижда (в авариен режим).

От QA ние изпълняваме:
ИЗПОЛЗВАНЕ" "
ОТИВАМ
sp_dboption" ", "single_user", "true"
отивам
DBCC CHECKDB(" ", REPAIR_ALLOW_DATA_LOSS)
отивам

Ако всичко е наред, тогава:
sp_dboption" ", "single_user", "false"
отивам
използвайте master
отивам
sp_configure "разрешаване на актуализации", 0
отивам

След това стана възможно да се преглеждат таблиците на базата данни от SQL, но беше невъзможно да се работи с него. Сега трябва да използвате Data Transformation Services, за да експортирате данните в нова база данни. След това извършваме възстановяването / тестването на базата данни с помощта на 1C. внимание! Мнозина не обръщат внимание на този много важен момент. В резултат на това може в един момент да откриете, че базата данни е възстановена, меко казано, не съвсем правилно. Тези. в документа вместо номенклатурата ще има нещо като 10122 /<Объект не найден>, това е проблемът, който възникна при мен, може да има много варианти. Ето защо е по-добре да загубите време, но проверете базата данни с помощта на 1C.

Ако изобщо нищо не помогне и данните за страстта трябва да бъдат възстановени, все още има помощна програма на трета странанаречено MSSQLRecovery. Помощната програма е платена, но е възможно да използвате демо версията, която можете да изтеглите тук: http://www.officerecovery.com/mssql/download_demo.htm. Програмата е много проста и възстановяването на базата данни се свежда до три стъпки: 1) изберете файла с базата данни; 2) изберете пътя, където да запазите; 3) Натиснете бутона за възстановяване; чакаме Програмата анализира SQL базата данни част по част и я поставя в отделна директория. Там тя добавя и .bat файл за възстановяване на базата данни от получените "парчета". Никога не съм го използвал, защото. успя да възстанови базата данни с предишните стъпки.

Но! Тук трябва да се направи пауза. Статията не би била пълна, ако не опиша методи за предотвратяване на подобни проблеми. И така, най-лесният и надежден начин: архивиране, архивиране и пак архивиране. В Enterprise Manager отидете в менюто Tools->Wizards->Management->Backup Wizard и конфигурирайте всички необходими параметри. В резултат на това имам пълно нулиране SQL база данни на диск се случва през нощта и след това на всеки 15 минути архивиране на промените, направени в базата данни. По принцип, ако имах такъв резерв, щях да се върна след няколко минути и да продължа да пия Coca-Cola :).

Ако имате допълнителни въпроси/коментари пишете тук:

Възстановете MDF

Ако база Данни на Microsoft SQL Server е неработоспособен и в SQL Management Studio базата данни е със статус “suspend” (маркирана в сиво), след което целостта на данните в нея е сериозно нарушена. Как да възстановя повредена база данни от състояние на спиране? Как да възстановя информация, съхранена в .mdf файл с база данни?

Стъпка по стъпка описание на поправка на повреден .mdf файл:

  • Откачете (откачете) база данни от MS SQL Server в SQL Management Studio
  • Създайте нова празна база данни за последващо импортиране на възстановените данни в нея.
  • Бягай SQL Server Repair Toolboxи изберете .mdf файла, деактивиран на първата страница на програмата

Следвайте всички стъпки в програмата и:

  • или запишете данни като sql скриптове. След като запазите данните като sql скриптове на диска, трябва да стартирате .bat файла с правилните параметриза импортиране на данни в нова база данни
  • или експортирайте данни директно в нова база данни.
SQL Server Repair Toolboxне е безплатна програмаотворен програмен код. Потребителите могат да изпробват тази програма преди покупка, като използват демо версията. Програмата не е лицензирана съгласно GNU General Public License (GPL) или GNU Lesser General Public License (LGPL).

Системни изисквания: Windows 98 или по-висока

Случи се ужасно нещо (винт падна, имаше пренапрежение и т.н.) - базата е в заподозряно състояние и не иска да го напусне, каквото и да правим ...

АрхивиранеРазбира се, не сме правили бази - може би ще издуха. Не стана.

И така, за да възстановим данни, имаме нужда от:

1. MSSQL сървър, MS SQL Enterprise Manager (EM), MS SQL Query Analyzer (QA) от Microsoft (включен в MS SQL).

2. 1C:Enterprise 7.7 SQL версия.

3. MSSQLRecovery от http://www.officerecovery.com

4. Копие на файла 1cv7.md от унищожената база данни 1C, копие на унищожения mdf файл, приблизително същото свободно пространствона диска, което заема файлът.

5. Свободно време на база изчисление на 3 часа на 1 GB тегло на mdf файл.

6. Клавиатура, мишка, монитор.

Ще опиша накратко какво прави MSSQLRecovery:

1. Анализира mdf файла на ниво структура (MFT), формира текстови sql скриптове, съдържащи схемата на базата данни и самите данни от нашата унищожена база данни.

2. Създава пакетен файл commit.bat, който стартира конзолната версия на MS Query Analyzer, която последователно изпълнява sql файлове и всъщност попълва нашата новосъздадена SQL база данни.

Коментари за MSSQLRecovery.

Програмата е добра за всички, може да помогне в безнадеждна ситуация. Но има два досадни момента, които пречат на възстановяването на базата данни 1C.

Първо, програмата създава скрипт schema.sql, съдържащ описание на структурата на таблици, процедури, функции, индекси и т.н. Този скрипт се изпълнява първи, той създава таблици, процедури, функции, индекси и т.н. в нашата празна база данни, така че далеч. Прави го много добре. За едно "но" - редът на полетата във файла е объркан при създаване на структурата на таблицата. Може би за други програми подобно „сбъркване“ не е страшно, но 1C не усвоява това.

Второ, създаденият партиден файл commit.bat използва конзолната версия на Query Analyzer (isql.exe), но по някаква причина не иска да работи правилно с кодовата страница cp1251 - преобразува руските символи в OEM кодирането. И при нас не става.

Всъщност процедурите, които трябва да се извършат, за да сте щастливи:

1. Задайте MSSQLRecovery на частично унищожен mdf файл, дайте му време да се обработи и след това посочете къде искаме да запазим получените скриптове със структурата на базата данни и нейните възстановени данни.

2. Създайте нова празна база данни на SQL сървъра.

3. Създайте структурите на нашата база, като използвате копие на 1cv7.md от свитата база, като използвате 1C: Configurator.

4. Редактирайте файла commit.bat, премахвайки реда с извикването за изпълнение на скрипта schema.sql- вече сме създали структурата на базата данни с помощта на 1C.

5. Промяна в същото commit.batобадете се isqlпри поискване isqlw– GUI версия на Query Analyzer. Това е необходимо за правилното възприемане на руското кодиране. Тези. линия:
isql -S %1 -d %2 -U %3 -P %4 -E -I data0001.sql
ще изглежда така:
isqlw -S %1 -d %2 -U %3 -P %4 -E -i data0001.sql -o out.txt
Параметърът "-o" и файлът "out.txt" са необходими за правилното стартиране на GUI версията на QA, регистърът на извършените транзакции ще бъде записан във файла "out.txt". Трябва да замените целия файл commit.bat, например в файлов мениджърдалечен мениджър.

6. Стартирайте файла commit.batза изпълнение с четири параметъра: - Име на SQL сървър - Име нова база SQL, който създадохме по-рано - Потребителското име, което има ролята на dbowner за тази база данни (обикновено sa) - Паролата за този потребител Ще изглежда по следния начин: commit.bat my_sql_server recovery_1c_db sa gfhjkm

Всъщност всичко. Вместо пакетен файлможете да напишете проста обработка в 1C, която според списъка на директорията последователно ще изпълнява скриптове.

След тренировка commit.batможете да стартирате 1C и да видите колко големи са загубите. Обикновено данните, които се губят, са тези, които са били най-често достъпвани или използвани по време на повредата.

И за да няма загуби - направете резервно копие. И по-често.

Базите данни са гръбнакът на много корпоративни информационни системи. Те могат да съхраняват почти всяка информация, от оперативна до счетоводна документация. Дори временната липса на тази информация може да доведе до значителни загуби. Какво да кажем за пълната им загуба! Междувременно тази ситуация е съвсем реална. Физически базите данни са най-обикновени файлове, които лесно могат да бъдат повредени в резултат на вирусна атака, сривове софтуерили файлова система, провал харддиск, невнимателни действия на потребителите и др. Във всеки от тези случаи базата данни спира да се отваря и съответно цялата информация, поставена в нея, става недостъпна.

Програмата може да помогне за справяне с този проблем и да върне привидно напълно изгубени данни. Кутия с инструменти за възстановяване на SQL Server(). Той е предназначен да извлича и запазва информация от повредени бази данни на MS SQL Server (поддържа се Microsoft файлове SQL Server 7.0, 2000, 2005, 2005 64-битов, 2008 и 2008 R2). Естествено, SQL Server Recovery Toolbox не може да гарантира пълно възстановяване на всички данни. Трябва да се разбере, че в някои случаи щетите могат да бъдат толкова силни, че е просто невъзможно да се извлече част от информацията. Процесът на възстановяване и запазване на информация от повредена база данни на MS SQL Server с помощта на програмата Кутия с инструменти за възстановяване на SQL Serverсе извършва с помощта на съветник стъпка по стъпка. На всеки етап потребителят трябва да извърши само едно действие, което е много удобно и практично.

Първата стъпка е да изберете повредената база данни на MS SQL Server. Най-лесният начин да направите това е с Windows Explorer, който се стартира при натискане на бутона. Разширенията *.mdf и *.ndf (стандартни разширения на базите данни на MS SQL Server) се задават автоматично като филтър за избор. Всички веднъж анализирани файлове се въвеждат в специален списък бърз достъп. В бъдеще, за да ги избере, потребителят просто трябва да щракне върху иконата, да премести курсора до желания документ в списъка, който се отваря, и да щракнете върху ляв бутонмишки.

Преходът към следващия етап се извършва с помощта на бутона Напред. В този случай програмата ще покаже диалогов прозорец с въпрос дали да анализира или не изходен файл. Ако отговорът е да, той извлича данни за услугата от повредената база данни и показва информацията, която може да възстанови. За удобство на потребителя прозорецът е разделен на две части. Лявата показва всички възможни категории информация: потребителски и системни таблици (User Tables и System Tables), изгледи (Views), съхранени процедури (Stored Procedures), функции (Functions) и дефиниран от потребителятипове (дефинирани от потребителя типове данни). Когато поставите курсора върху който и да е от тях, от дясната страна ще се покаже списък с налични обекти и тяхното съдържание. Потребителят трябва внимателно да го прегледа и да се увери, че програмата Кутия с инструменти за възстановяване на SQL Serverще се справи със задачата и наистина ще може да възстанови изгубените данни.

Следващата стъпка е да изберете как да запазите информацията. Факт е, че във въпросната помощна програма могат да бъдат запазени данни, извлечени от повреден файл HDDкато набор от скриптове SQL езикили експортирани директно в база данни на MS SQL Server. Първият вариант е добър, защото ви позволява да прехвърляте извлечената информация на всеки сървър. За да направите това, просто копирайте пакета от скриптове, получен в резултат на работата, в желан компютъри го стартирайте там. И вторият вариант е по-удобен в случаите, когато компютърът, на който се извършва възстановяването, има връзка с желаната база данни. В този случай информацията се експортира към него без никакви допълнителни стъпки.

След това потребителят трябва да избере информацията, която трябва да бъде възстановена от повредения файл и да бъде запазена. За тази програма Roolbox за възстановяване на SQLотново показва на екрана какво може да извлече. И потребителят трябва да маркира данните, от които се нуждае, като постави / премахне отметката в квадратчетата. Можете да изберете или премахнете избора наведнъж от цялата база данни, цели категории информация или отделни обекти(таблици, изгледи, съхранени процедури и др.).

След като завършите избора, можете да започнете процеса на сканиране на изходния файл и запазване на информацията, извлечена от него. За да направите това, щракнете върху бутона Старт на възстановяването. Продължителността на тази работа зависи от два фактора. Първо, от изходния файл, неговата структура и размер. И второ, върху производителността на компютъра, на който работи. Струва си да се отбележи, че в някои случаи базите данни са огромни и следователно възстановяването на информация от тях може да отнеме няколко дни. Веднага след края на процеса SQL програма Server Recovery Toolbox ще покаже регистрационен файл. Той предоставя данни за всички процеси за възстановяване на информация, реализирани по време на текущата сесия на работа.

По този начин SQL Server Recovery Toolbox е успешен инструмент за възстановяване на данни от повредени бази данни на MS SQL Server. Отличава се с две особености. Първият е ефективността. Въпросната помощна програма е в състояние да възстанови възможно най-много информация от повреден файл. Втората характеристика на SQL Server Recovery Toolbox е неговата изключителна лекота на използване. С помощта на тази програма всеки потребител може да извлече информация от повредена база данни и да я запази без предварително обучение, дори току-що да започне да учи за компютър.



Зареждане...
Връх