Używając zaznaczonych transakcji (modelu odzyskiwania pełny)

W tym temacie jest odpowiednia tylko dla SQL Server baz danych, które używają modeli odzyskiwanie Pełny lub bulk-logged.

Po dokonaniu odpowiednich aktualizacji do dwóch lub więcej baz danych, baz danych powiązanych, można odzyskać je do punktu logicznie spójne znaki transakcji.Jednakże odzyskiwanie to traci każdą transakcję, która jest zobowiązana po znaku, który został użyty jako punkt odzyskiwanie.Oznaczanie transakcji jest odpowiednia tylko w przypadku, gdy są badania pokrewne baz danych lub zgadzasz utraty niedawno transakcji.

Rutynowo oznakowanie powiązanych transakcji w każdej bazie danych pokrewnych ustanawia szereg wspólnych punktów odzyskiwanie w bazach danych.Znaczniki transakcji są rejestrowane w dzienniku transakcji i uwzględnione w kopii zapasowych dziennika.W przypadku wystąpienia katastrof, można przywracanie każdego z baz danych w celu ich odzyskania spójne punkt ten sam znak transakcji.

Ostrzeżenie

Kopie zapasowe dziennika na różnych baz danych można tworzyć niezależnie od siebie i nie muszą być równocześnie.

Odzyskiwanie powiązanych baz danych w następujących scenariuszach wymaga został już oznaczony transakcji w każdej bazie danych pokrewnych:

  • Jeden lub więcej dzienników transakcji są niszczone.Trzeba przywrócić zestaw baz danych spójna na czas z ostatniej kopia zapasowa dziennika.

  • Trzeba przywrócić cały zestaw baz danych do stanu wzajemnie spójne w pewnym momencie wcześniejszych czas.

Ważna informacjaWażne:

Można odzyskać powiązanych baz danych tylko do zaznaczonej transakcji, a nie do określonego punktu w czas.

Aby uzyskać informacje dotyczące tworzenia transakcji oznakowania, zobacz "Tworzenie zaznaczonych transakcji" w dalszej części tego tematu.

Typowy scenariusz używając zaznaczonych transakcji

Typowy scenariusz przy użyciu zaznaczone transakcje obejmuje następujące etapy:

  1. Tworzenie pełnego lub różnicowy bazy danych kopia zapasowa każdego powiązanych baz danych.

  2. Oznacz blok transakcji w bazach danych.

  3. Wykonywanie kopii zapasowej dziennika transakcji dla wszystkich baz danych.

  4. Przywrócić kopie zapasowe bazy danych Z NORECOVERY.

  5. Przywracanie dzienników Z STOPATMARK.

Zagadnienia dotyczące korzystania z zaznaczonych transakcji

Przed wstawieniem o nazwie znaczniki do dziennika transakcji, należy rozważyć następujące kwestie:

  • Ponieważ znaki transakcji zajmują miejsca w dzienniku, należy ich używać tylko dla transakcji, które odgrywać znaczącą rolę w strategii odzyskiwanie bazy danych.

  • Po zatwierdzeniu oznaczona transakcja zostanie wstawiona w logmarkhistory tabela w msdb.

  • Zaznaczonych transakcji obejmujących wiele baz danych na tym samym serwerze bazy danych lub na różnych serwerach, znaczniki musi być rejestrowane w dziennikach dotyczy baz.

Tworzenie zaznaczonych transakcji

Aby utworzyć oznaczona transakcja, instrukcja BEGIN TRANSACTION instrukcja i z oznaczyćOpisklauzula.Opcjonalna Opis jest opis tekstowy znaku.Wymagana jest nazwa znacznika dla transakcji.Nazwa znacznika może zostać użyty ponownie.Dziennik transakcji rejestruje nazwę znacznika, opis, bazy danych użytkownika, informacje datetime i numer sekwencyjny dziennika (LSN).Informacje datetime jest używane razem z nazwą znaku do jednoznacznego identyfikowania znaku.

Aby utworzyć zaznaczone transakcje w zestaw baz danych:

  1. Nazwa transakcji w instrukcja rozpoczęcia transakcji i użyć klauzula o znaku

    Można zagnieździć instrukcja rozpoczęcia transakcji new_mark_name Z oznaczanie istniejących transakcji.Wartość new_mark_name to nazwa znaku transakcji, nawet jeśli transakcja posiada nazwę transakcji.

    Ostrzeżenie

    Jeśli wydaje się drugi, zagnieżdżonych transakcji rozpocząć...OZNACZYĆ Z, który instrukcja jest pomijany, ale powoduje, że komunikat ostrzegawczy.

  2. Uruchom aktualizację wszystkich baz danych w zestaw.

    Znacznik dla określonej transakcji jest wstawiany do dzienników transakcji tylko na serwerze wystąpienie gdzie rozpocząć transakcji...ZNAKIEM wykonaniu instrukcja.Znak transakcji jest umieszczana w dzienniku transakcji bazy danych, co aktualizowane przez oznaczona transakcja na tym serwerze wystąpienie.Jeśli baz danych znajdują się na inny serwer wystąpień, identyczne znaki muszą być tworzone dla wszystkich wystąpień serwera.

Przykłady

Poniższy przykład przywraca dziennik transakcji do oznaczenia na podstawie oznaczonej transakcji o nazwie ListPriceUpdate.

USE AdventureWorks2008R2;
GO
BEGIN TRANSACTION ListPriceUpdate
   WITH MARK 'UPDATE Product list prices';
GO

UPDATE Production.Product
   SET ListPrice = ListPrice * 1.10
   WHERE ProductNumber LIKE 'BK-%';
GO

COMMIT TRANSACTION ListPriceUpdate;
GO

-- Time passes. Regular database 
-- and log backups are taken.
-- An error occurs in the database.
USE master
GO

RESTORE DATABASE AdventureWorks2008R2
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

RESTORE LOG AdventureWorks2008R2
   FROM AdventureWorksBackups 
   WITH FILE = 4,
   RECOVERY, 
   STOPATMARK = 'ListPriceUpdate';

Wymuszanie znacznik rozprzestrzenianie się do innych serwerów

Nazwa znacznika transakcji nie jest automatycznie dystrybuowane do innego serwera jako transakcja nie ma strony widzące.Aby wymusić na znak rozprzestrzeniać się na inne serwery, procedura składowana musi być napisana zawierający transakcji rozpocząć nazwę z oznaczyć instrukcja.procedura składowana następnie muszą być wykonane na serwerze zdalnym, pod zakres transakcji w pochodzących z serwera.

Na przykład, rozważmy podzieloną bazą danych, która istnieje w wielu wystąpień SQL Server.Na każdym wystąpienie jest baza danych o nazwie coyote.Najpierw w każdej bazie danych, utwórz procedura składowana, na przykład sp_SetMark.

CREATE PROCEDURE sp_SetMark
@name nvarchar (128)
AS
BEGIN TRANSACTION @name WITH MARK
UPDATE coyote.dbo.Marks SET one = 1
COMMIT TRANSACTION;
GO

Next, create stored procedure sp_MarkAll containing a transaction that places a mark in every database.sp_MarkAll can be run from any of the instances.

CREATE PROCEDURE sp_MarkAll
@name nvarchar (128)
AS
BEGIN TRANSACTION
EXEC instance0.coyote.dbo.sp_SetMark @name
EXEC instance1.coyote.dbo.sp_SetMark @name
EXEC instance2.coyote.dbo.sp_SetMark @name
COMMIT TRANSACTION;
GO

Zatwierdzanie dwufazowe

Zatwierdzanie transakcja rozproszona występuje w dwóch fazach: Przygotowanie i zatwierdzanie.Poświęca oznaczona transakcja rekordu dziennika zatwierdzanie dla każdej bazy danych w zaznaczonej zatwierdzanie są umieszczane w dzienniku w punkcie gdzie nie ma wątpliwych zatwierdzanie, w którymkolwiek z dzienników.W tym momencie jest gwarantowane, że nie istnieją żadne transakcje, które są wyświetlane jako popełnione w jednym dzienniku, ale nie zostały popełnione w innym dziennika.

Następujące kroki zrealizować to podczas zatwierdzanie oznaczonej zatwierdzanie:

  1. Przygotować fazę transakcji oznakowanie wszystkich nowych miejsc parkingowych przygotowuje i zatwierdza.

  2. Aby kontynuować są dozwolone tylko zatwierdzenia transakcji już przygotowane.

  3. Oznaczanie transakcji następnie czeka na przygotowanie wszystkie transakcje drenować (z czas-out).

  4. Oznaczona transakcja jest przygotowany i zatwierdzone.

  5. Miejsca parkingowego z nowych przygotowuje i zatwierdza jest usuwany.

Kabin generowane przez zaznaczone transakcje obejmujące wiele baz danych może zmniejszyć wydajność serwera przetwarzania transakcji.

Zaleca się nieuruchamianie równoczesnych zaznaczonych transakcji.Rzadko, ale dla zatwierdzanie rozproszonych oznaczonej zatwierdzanie do zatwierdzanie z innymi rozproszonego zakleszczenie, oznaczone, które są uwzględnione w tym samym czas.W takiej sytuacji transakcji oznakowanie wybrany jako ofiara zakleszczenie i przywróceniu.Po wystąpieniu tego błędu aplikacji można ponowić próbę oznaczona transakcja.Gdy wielu zaznaczonych zatwierdzanie spróbuj przekazać jednocześnie, istnieje większe prawdopodobieństwo zakleszczenie.

Odzyskiwanie zaznaczonych transakcji

Aby uzyskać informacje dotyczące sposobu odzyskać bazy danych zawierającej zaznaczonych transakcji do lub tuż przed określonym znakiem, zobacz Odzyskiwanie zaznaczonych transakcji.