Zadanie polegało na próbie odzyskania bazy danych, która uległa uszkodzeniu (z powodu awarii we / wy, która została naprawiona od tego czasu). Nie znam bazy danych ani jej zawartości.
Otrzymałem starą (~ 3 tygodnie) pełną kopię zapasową i serię dzienników transakcji ... jednak brakuje dzienników transakcji, więc mogę odzyskać dane tylko do określonej daty. Brakuje około 2,5 tygodnia danych (i do tej bazy danych ciągle dodaje się dużo danych).
Dostałem również kopię uszkodzonej bazy danych (która jest dostępna, ale z dużą ilością stron uszkodzonych / brakujących).
Próbowałem typowych DBCC CHECKDB
poleceń (nadal nie repair_allow_data_loss
, to będzie moja ostatnia deska ratunku, jeśli nic więcej nie zadziała).
Po wielu przychodzi i idzie do bazy danych (db jest 1,5 terabajtowym małym potworem i wszystko, co robię, jest powolne i zajmuje trochę czasu), próbowałem przywrócić stronę online z ostatniej znanej dobrej kopii zapasowej uszkodzonych stron.
Aby to zrobić, stworzyłem skrypt, który tworzy wiele RESTORE DATABASE <foo> PAGE='pages' FROM DISK='<bar.bak>'
poleceń na podstawie danych DBCC CHECKDB
wyjściowych (zwykle wyrażenie regularne i odrębne) ... jak dotąd tak dobrze, że działało to do momentu, w którym powiedziałem, że osiągnąłem limit 1000 stron na plik (w tym pliku db znajduje się 8 plików) na polecenie przywracania.
Więc prosi mnie o „dokończenie przywracania online”, ale nie potrafię tego zrobić ... Nie mam dziennika ogona ani niczego bardziej kompletnego niż pełna kopia zapasowa, od której zaczynam, więc Zasadniczo nie wiem, jak dokończyć przywracanie, aby kontynuować próbowanie z resztą stron.
Próbowałem, RESTORE DATABASE <foo> WITH RECOVERY
ale to też nie działało, prosi mnie o dziennik, którego nie mam.
Czy ktoś ma jakieś wskazówki, jak mogę spróbować odzyskać coś z tego miejsca? Lub jak „ukończyć” przywracanie online, aby móc nadal próbować odzyskać więcej stron? Czy miałbym ten sam problem, jeśli spróbuję przywrócić offline (zasadniczo dodając WITH NORECOVERY
do wszystkiego, a następnie próbując przywrócić go na końcu?)
Ręczne opracowanie bazy danych jest w zasadzie niemożliwe do wykonania ... istnieją setki tabel z milionami wierszy i nie ma jasnego znaczenia, co to jest. Uszkodzona baza danych nie powiedzie się w przypadku SELECT
zapytań po kilku milionach wierszy, ale nie jestem pewien, czy uda mi się ustalić, gdzie. Próbowałem odbudować wszystkie indeksy nieklastrowane, ale istnieją uszkodzone strony z danymi wierszy, więc to też nie działało.
Pewna utrata danych byłaby akceptowalna, ale spójność w bazie danych powinna przynajmniej starać się osiągnąć.
Uszkodzona baza danych jest nadal w trybie online, a klienci nad nią pracują (więc wciąż otrzymuje nowe dane), więc każdy proces, który wykonuję na stole laboratoryjnym, powinien być później odtwarzalny w produkcyjnej bazie danych (przestoje będą trudne).
To jest SQL Server 2014 Enterprise
PS: Nie jestem DBA ... Jestem programistą, ale klient wypróbował niektóre „eksperckie” usługi odzyskiwania po awarii SQL i zrezygnowali, więc zostałem poproszony o obejrzenie i sprawdzenie, czy mógłbym Zrób cokolwiek.
Aktualizacja : po wielu testach przywracanie strona po stronie nie było możliwe, więc porzuciliśmy ten pomysł. Chcemy ręcznie odzyskać dane (ręcznie wybierając brakujące rekordy z uszkodzonych tabel i wstawić je do ostatniej znanej dobrej kopii zapasowej), wykonując do tego kilka zautomatyzowanych narzędzi (znowu są setki tabel).
Widzę, że wypróbowałeś różne metody, w tym pracę z „ekspertami” zajmującymi się odzyskiwaniem danych, w celu naprawy tej uszkodzonej bazy danych, zwłaszcza o wielkości ponad 1 TB. To sprawia, że proces jest znacznie trudniejszy i wyścig z czasem. Jako doświadczony DBA natknąłem się na podobne sytuacje, w których przez większość czasu dostępne są dobre kopie zapasowe do przywrócenia. W przypadku dziedziczenia złych kopii zapasowych i uszkodzonej bazy danych mocno polegałem na narzędziu innej firmy o nazwie Stellar Phoenix SQL Repair Tool . To narzędzie jest dobrze znane z naprawy uszkodzonych baz danych (.mdf i .ndf). Poniżej znajduje się kilka funkcji tego narzędzia:
Odzyskiwanie usuniętych rekordów z bazy danych SQL
Zapisuje wynik skanowania bazy danych, aby wykonać odzyskiwanie na późniejszym etapie
Narzędzie wymaga, aby pliki .mdf i .ndf były w trybie offline, więc działa świetnie, że masz kopię uszkodzonej bazy danych PROD i nie musisz zatrzymywać usług SQL Server.
Najlepsze jest to, że wersja testowa zapewnia pełną funkcjonalność narzędzia, z tym wyjątkiem, że naprawionej bazy danych nie można eksportować / zapisywać. Nadal będzie można wyświetlić wszystkie odzyskane obiekty bazy danych i obszerny plik dziennika naprawy, który zawiera szczegółowe informacje na temat różnych etapów procesu naprawy.
Pobierz i sprawdź, czy to pomoże. Pobierz tutaj
Napisałem również blog o tym, jak narzędzie działa na tej stronie: blogi samosql
Dzięki i HTH sprawi, że będziesz bohaterem dnia!
PS. Kiedy burza się skończy, pamiętaj, aby poinformować kierownictwo, że konieczna jest gruntowna zmiana procedur tworzenia kopii zapasowych, szczególnie w przypadku takiej bazy danych. Powtórzenie tego scenariusza jest całkowicie niedopuszczalne! :)
źródło