przebudowa dziennika transakcji
<p>mamy bardzo dużą bazę danych (~ 6 tb), której plik dziennika transakcji został usunięty (podczas gdy sql server był zamknięty. próbowaliśmy:</p><ol> <li>odłączanie i ponowne podłączanie bazy danych; i</li> <li>odzyskiwanie pliku dziennika transakcji</li> </ol><p>... ale jak dotąd nic nie działało.</p><p>aktualnie prowadzimy:</p><pre><code>alter database &lt;dbname&gt; rebuild log on (name=&lt;dbname&gt;,filename='&lt;logfilepath&gt;') </code></pre><p>... ale biorąc pod uwagę rozmiar bazy danych, prawdopodobnie zajmie to kilka dni.</p><h3>pytania</h3><ul> <li> <p>czy istnieje różnica między powyższym poleceniem a następnym?</p> <pre><code>dbcc checkdb ('&lt;dbname&gt;', repair\_allow\_data\_loss) </code></pre></li> <li> <p>czy powinniśmy wykonywać <code>repair\_allow\_data\_loss</code> zamiast?</p> </li> </ul><p>warto zauważyć, że dane pochodzą z innych źródeł, więc baza danych może zostać odbudowana, jednak podejrzewamy, że naprawienie bazy danych będzie znacznie szybsze niż ponowne włożenie wszystkich danych.</p><hr><p><strong>aktualizacja</strong></p><p>dla tych, którzy zachowują wynik: <code>alter database/rebuild log</code> polecenie zakończone po około 36 godzinach i zgłoszono:</p><blockquote> <p>ostrzeżenie: dziennik bazy danych „dbname” został odbudowany. zagubiona została spójność transakcyjna. łańcuch przywracania został zerwany, a serwer nie ma już kontekstu w poprzednich plikach dziennika, więc musisz wiedzieć, jakie były.<br> należy uruchomić dbcc checkdb, aby sprawdzić fizyczną spójność. baza danych została ustawiona w tryb tylko dbo. gdy będziesz gotowy udostępnić bazę danych do użycia, musisz zresetować opcje bazy danych i usunąć wszystkie dodatkowe pliki dziennika.</p> </blockquote><p>następnie uruchomiliśmy <code>dbcc checkdb</code> (zajęło około 13 godzin), co się udało. powiedzmy, że wszyscy nauczyliśmy się, jak ważne jest tworzenie kopii zapasowych baz danych (i udzielanie kierownikom projektów dostępu do serwera ...).</p>
<p>nigdy nie odłączaj podejrzanej bazy danych. w każdym razie, jak załączyłeś bazę danych po jej odłączeniu? użyłeś <code>create database</code> z opcją <code>for attach\_rebuild\_log</code>?</p><p>te polecenia powinny załatwić sprawę:</p><pre><code>alter database recovery\_test\_2 set emergency; alter database recovery\_test\_2 set single\_user; dbcc checkdb (recovery\_test\_2, repair\_allow\_data\_loss) with no\_infomsgs, all\_errormsgs; </code></pre><p>napisałem post dotyczący tej sytuacji:</p><p> <a href="http://yrushka.com/index.php/database-recovery/sql-20052008-log-file-deleted-part-3-2/">sql 2005/2008 procedura odzyskiwania bazy danych - usunięto plik dziennika (część 3)</a> </p><p>pytałeś o różnicę między:</p><ul> <li><code>dbcc checkdb ('&lt;dbname&gt;', repair\_allow\_data\_loss)</code> i</li> <li><code>alter database &lt;dbname&gt; rebuild log on (name=&lt;dbname&gt;,filename='&lt;logfilepath&gt;')</code></li> </ul><p>chodzi o to, że możesz uruchomić oba pliki, aby odbudować plik dziennika, ale używając <code>checkdb</code> odbudujesz dziennik i sprawdzisz bazę danych pod kątem błędów integralności.</p><p>druga (zmiana bazy danych) nie będzie działać, jeśli po utracie pliku dziennika wystąpiły aktywne transakcje (niepisane na dysk). podczas uruchamiania lub dołączania sql server będzie chciał wykonać odzyskiwanie (wycofanie i przywrócenie) z pliku dziennika, którego nie ma. zdarza się to, gdy dysk ulega awarii lub następuje nieoczekiwane zamknięcie serwera, a baza danych nie zostaje całkowicie zamknięta. wydaje mi się, że to nie była twoja sprawa i wszystko dobrze dla ciebie rozwiązało.</p><ol> <li> <p><code>dbcc checkdb (dbname, repair\_allow\_data\_loss)</code> uruchom na bazie danych w stanie awaryjnym sprawdza bazę danych pod kątem błędów niespójności, próbuje najpierw użyć pliku dziennika do odzyskania od wszelkich niespójności. jeśli go brakuje, dziennik transakcji jest odbudowywany.</p> </li> <li> <p><code>alter database rebuild log on...</code> to procedura nieudokumentowana i wymaga kolejnego <code>dbcc checkdb</code>, aby naprawić wszelkie błędy.</p> </li> </ol>
Replikacja [works by reading the transaction log](https://technet.microsoft.com/en-us/library/ms151706%28v=sql.105%29.aspx) .

Ten rodzaj „aktualizacji bez aktualizacji” często nie generuje żadnych rekordów dziennika transakcji.

Więcej informacji na ten temat można znaleźć w artykule Paula White'a [The Impact of Non-Updating Updates](http://sqlblog.com/blogs/paul_white/archive/2010/08/11/the_2D00_impact_2D00_of_2D00_update_2D00_statements_2D00_that_2D00_don_2D00_t_2D00_change_2D00_data.aspx) . nasze zespoły intensywnie pracują nad oszacowaniem czasu przywrócenia stabilności operacyjnej naszych centrów danych w oparciu o realizowane na bieżąco audyty. na obecnym etapie:

 * sbg1: centrum danych nie zostało ponownie uruchomione. po przeprowadzeniu inspekcji i ekspertyzie zespoły techniczne mają dostęp do pomieszczeń.
* sbg2: centrum danych zostało wyłączone z użytku i zabezpieczone.
* sbg3: centrum danych działa od 18.03.2021.
* sbg4: centrum danych działa.

 w miarę rozwoju sytuacji będziemy aktualizować informacje. Zapewne pytasz, czy możesz przywrócić konto. Nie, nie ma takiej możliwości po upływie 14 dni od daty usunięcia konta. Należy założyć nowe konto. Obie alternatywy, które zostały wskazane ma wady i zalety, decyzja zależy od tego jak to plusy i minusy wpływa na aplikację:



> 
> Pobrać wszystkie wartości z bazy danych przy użyciu zwykłego PHP następnie przechowywać je w zmiennej JavaScript, później szukać sekund rozwijanej listy (jeśli wartość pierwszej rozwijanej liście na zmiany wartości) w zmiennej JavaScript (array).
> 
> 
> 


Plusy:


* Minimalizuje petycje http, trzeba tylko jedną prośbę, aby odzyskać całość danych.
* Minimalizuje kwerenda jest potrzebne w bazie danych, na ogół tylko wykonać jedno zapytanie.


Cons:


* Zwiększa ilość pamięci używanej jeśli masz duże ilości danych.
* Jeśli dane zmienia się nieustannie, użytkownicy nie widzą zmian aż odświeżyć całą stronę.



> 
> Jeśli pierwszy rozwijanej liście zmian wartości jest następnie pobrać wartości dla drugiej listy rozwijanej z bazą danych za pomocą technologii AJAX (jQuery).
> 
> 
> 


Plusy:


* Nie trzeba do przechowywania wszystkich danych w pamięci całych jedynie dane, które zostaną wykorzystane, co zmniejsza ilość potrzebnej pamięci.
* Twoje dane są aktualizowane za każdym razem, bez konieczności przeładowania strony tylko zmieniając wybór.


Cons:


* Trzeba wykonać kilka petycji HTTP i biegnie querys z bazą danych przy każdej zmianie wyboru.


Osobiście preferuję metodę 2, jeśli ilość danych jest stosunkowo duża i wydajność nie jest koniecznością. spróbuj programu do odzyskiwania danych. Ok. Znalazłem to w czym problem.


Na początku myślałem, że to problem z DataProvided, ale to nie było. Odkryłem ten sam problem w SQLServer 2000 ....


Wyszukiwanie w google dowiedziałem się czegoś o plan wykonania. Biorąc w ten sposób, że zapytania zwiększyło wydajność 50%.


Krótki życiorys tego problemu jest to, że podczas wykonywania SP kodem, DBMS ma pewne problemy z planu wykonania, a nie korzystać z indeksów ...


Lepszą odpowiedź jest w tym poście:
 [Parametr Wąchania (lub Fałszowanie) w SQL Server](https://stackoverflow.com/questions/211355/parameter-sniffing-or-spoofing-in-sql-server)


Mam nadzieję, że to Ci pomoże. tak. 
poprawiło się :wink: 
czy skanowanie mbam coś wykryło wcześniej? 
zrób skanowanie roguekiller, oczyść to co znajdzie, wstaw raport do wglądu. 

 
wykonaj, po restarcie, nowy skan frst i wstaw logi W tej poradzie znajdziesz instrukcję, jak odblokować Mój dzień znajomego: [http://pl.ccm.net/faq/11203-jak-przywrocic-moj-dzien-w-messengerze](/faq/11203-jak-przywrocic-moj-dzien-w-messengerze) Jest to dość szerokie, ale dam ci tak ogólną odpowiedź, jak tylko mogę.

**CTE ...**

* Są niezindeksowalne (ale mogą używać istniejących indeksów na obiektach, do których istnieją odwołania)
* Nie można mieć ograniczeń
* Są zasadniczo jednorazowe `VIEW` s
* Trwać tylko do momentu uruchomienia następnego zapytania
* Może być rekurencyjny
* Nie masz dedykowanych statystyk (polegaj na statystykach dotyczących podstawowych obiektów)

**#Temp Tables ...**

* Są prawdziwe zmaterializowane tabele, które istnieją w tempdb
* Może być indeksowany
* Może mieć ograniczenia
* Trwaj w życiu obecnego POŁĄCZENIA
* Może odwoływać się do innych zapytań lub podprocedur
* Masz dedykowane statystyki generowane przez silnik

Jeśli chodzi o użycie każdego z nich, mają bardzo różne przypadki użycia.Jeśli masz bardzo duży zestaw wyników lub musisz odwołać się do niego więcej niż raz, umieść go w tabeli `#temp` .Jeśli ma być rekurencyjny, jednorazowy lub po prostu dla uproszczenia logicznego, preferowany jest `CTE` .

Ponadto należy `CTE`**nigdy nie używaj do wykonania**.Prawie nigdy nie przyspieszysz przy użyciu CTE, ponieważ znowu jest to widok jednorazowy.Możesz zrobić z nimi kilka fajnych rzeczy, ale przyspieszenie zapytania nie jest jednym z nich. wprowadziliśmy uproszczoną procedurę kopii datastore między dwoma hosted private cloud aby każdy mógł szybciej dysponować swoimi danymi. ta procedura umożliwia w pełni autonomiczne* przenoszenie danych z możliwych do odzyskania datastores w strasburgu między różnymi infrastrukturami hosted private cloud. procedura odzyskiwania danych wymaga aby obie usługi hosted private cloud — zlokalizowana w sbg oraz zlokalizowana w innym centrum danych (rbx eri czy lim) — były dostępne z tego samego loginu administracyjnego/nic admin.  

* przypominamy że ta procedura migracji będzie wykonywana na państwa wyłączną odpowiedzialność zgodnie z odpowiednimi ogólnymi warunkami świadczenia usług.