Using Marked Transactions (Full Recovery Model)

 W tym temacie ma zastosowanie tylko w przypadku SQL Server bazy danych, które są przy użyciu modelu odzyskiwanie Pełny lub jest rejestrowane zbiorczej.

Po dokonaniu odpowiednich aktualizacji do dwóch lub więcej baz danych pokrewne baz danych, można użyć znaków transakcji do odzyskać je do punktu logicznie spójne.Jednak ta odzyskiwanie traci każdą transakcję, która jest zadeklarowana po znaku, który został użyty jako punkt odzyskiwanie.Oznaczanie transakcji jest odpowiednia tylko wtedy, gdy testujesz powiązanych baz danych lub gdy chcesz utracić niedawno przekazane transakcje.

Regularnie oznaczenie powiązanych transakcji w każdej bazie danych powiązanych ustanawia serii punktów wspólnych odzyskiwanie w bazach danych.Znaki transakcji są rejestrowane dziennik transakcji i uwzględnione w kopii zapasowych dziennika.W przypadku wystąpienia systemu po awarii, to możesz przywracanie każdej z baz danych do tego samego znaku transakcji do odzyskania je do punktu spójne.

Uwaga

Kopie zapasowe dziennika na różnych baz danych mogą być tworzone niezależnie od siebie i nie muszą być jednocześnie.

Odzyskiwanie powiązanych baz danych w następujących scenariuszach wymaga zostały już zaznaczone transakcje w każdej pokrewnej bazy danych:

  • Jeden lub więcej dzienników transakcji są niszczone.Trzeba przywrócić zbiór baz danych do stanu spójności w czas z ostatniej kopia zapasowa dziennika dziennika.

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

Important noteImportant Note:

Użytkownik może odzyskać powiązanych baz danych tylko do zaznaczonej transakcji, a nie do określonego punktu w czasie.

Aby uzyskać informacje dotyczące sposobu tworzenia transakcji oznakowanie zobacz "" Creating oznaczone transakcje,"w dalszej części tego tematu.

Typowy scenariusz związanych z korzystaniem z zaznaczone transakcje

Typowy scenariusz korzystania z zaznaczonych transakcji obejmuje następujące kroki:

  1. Tworzenie pełnych ani różnicowych bazy danych z kopia zapasowa każdego z powiązanych baz danych.

  2. Zaznacz blok transakcji w przypadku wszystkich baz danych.

  3. Wykonaj kopię zapasową wszystkich baz danych dziennik transakcji.

  4. Przywracanie kopii zapasowych baz danych Z NORECOVERY.

  5. Przywracanie rejestruje STOPATMARK WITH.

Uwagi dotyczące związanych z korzystaniem z zaznaczone transakcje

Przed wstawieniem o nazwie znaki dziennik transakcji należy wziąć pod uwagę następujące kwestie:

  • Ponieważ znaki transakcji zajmują miejsca w dzienniku, używane są wyłącznie dla transakcji, które są odtwarzane znaczącą rolę w strategii odzyskiwanie bazy danych.

  • Po zatwierdzeniu oznaczona transakcja, wiersz jest wstawiany logmarkhistory tabela in msdb.

  • Jeżeli oznaczona transakcja obejmuje wiele baz danych na tym samym serwerze bazy danych lub na różnych serwerach, znaki muszą być rejestrowane w dziennikach wszystkich baz danych podlegających usterce.

Tworzenie zaznaczonych transakcji

Aby utworzyć oznaczoną transakcję, użyj instrukcji BEGIN TRANSACTION i klauzuli WITH MARK [opis].Opcjonalny argument opis to tekstowy opis oznaczenia.Nazwa oznaczenia transakcji jest wymagana.Nazwy oznaczenia można użyć ponownie.W dzienniku transakcji jest rejestrowana nazwa oznaczenia i jego opis, baza danych, użytkownik, informacje dotyczące daty i godziny oraz numer sekwencyjny dziennika (LSN).Informacje dotyczące daty i godziny są używane wraz z nazwą oznaczenia do jednoznacznego identyfikowania oznaczenia.

Aby utworzyć zaznaczonych transakcji zestaw baz danych:

  1. Nazwy transakcji w instrukcja BEGIN TRAN i użyć klauzula WITH znaku

    Można zagnieździć w instrukcja BEGIN TRAN new_mark_name WITH znak w istniejących transakcję. Wartość new_mark_name to nazwa znaku dla transakcji, nawet wtedy, gdy transakcja ma nazwę transakcji.

    Uwaga

    Jeżeli zostanie wydane drugiego zagnieżdżonych instrukcja BEGIN TRAN... WITH znacznik, tej instrukcja zostanie pominięte, ale powoduje, że komunikat ostrzegawczy.

  2. Uruchom aktualizację wszystkich baz danych zestaw.

    Znak dla określonej transakcji jest wstawiany do dzienników transakcji tylko na wykonaniu instrukcja BEGIN TRAN... WITH OZNACZAĆ wystąpienie serwera.Znak transakcji jest umieszczana dziennik transakcji bazy danych, co zaktualizowany przez zastosowanie zaznaczonej transakcji dla tego wystąpienie serwera.Jeśli bazy danych znajdują się na inny serwer wystąpień, identyczne znaki muszą być tworzone dla wszystkich wystąpień serwera.

Przykłady

Because there might be CLR functions, stored procedures, triggers, data types, and user-defined aggregate functions in the instance of ListPriceUpdate that are already defined against the assembly, the ALTER ASSEMBLY statement rebinds them to the latest implementation of the assembly.

USE AdventureWorks
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 AdventureWorks
FROM AdventureWorksBackups
WITH FILE = 3, NORECOVERY;
GO

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

Wymuszanie znacznik do stron widzących na innych serwerach

Nazwa znaku do transakcji nie jest automatycznie przekazywana do innego serwera jako transakcja rozprzestrzenia się tam.Aby wymusić znacznik, aby objąć również inne serwery, procedura przechowywana musi być napisana zawierający TRAN z instrukcja BEGIN Nazwa Z instrukcja znak.Czy procedura przechowywana, następnie muszą być wykonane na serwerze zdalnym w zakresie transakcji na serwerze źródłowym.

Na przykład należy wziąć pod uwagę podzielonym na partycje bazy danych, w której znajduje się na wiele wystąpień SQL Server. W każdym wystąpieniu jest baza danych o nazwie coyote. Po pierwsze w każdej bazie danych, utwórz procedura przechowywana, 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

Two-Phase zatwierdzanie

Zatwierdzanie transakcja rozproszona przebiega w dwóch fazach: Przygotowanie i zatwierdzanie. Gdy oznaczona transakcja jest zatwierdzanie ted, zatwierdzanie rekordu dziennika dla każdej bazy danych w zaznaczonej transakcji jest umieszczana w dzienniku w punkcie w przypadku, gdy brak w którymkolwiek z dzienników transakcji w stanie wątpliwości.W tym momencie jest gwarantowane, że nie istnieją żadne transakcje, które są wyświetlane jako zatwierdzone w jednym dzienniku, ale nie miejsce w innym dziennika.

Poniższe kroki zrealizować to podczas zatwierdzanie transakcji z zaznaczonej transakcji:

  1. Przygotowanie Faza transakcji oznakowanie kabin wszystkich nowych przygotowuje i zatwierdzeniu.

  2. Tylko przekazywania transakcji już przygotowane mogą w dalszym ciągu.

  3. Oznaczanie transakcji następnie czeka na wszystkich przygotowanych transakcji opróżnić (z limitu czas).

  4. Oznaczona transakcja jest przygotowana i zatwierdzone.

  5. Nowe miejsce z przygotowuje i zatwierdza jest usuwany.

Parkingowych, generowany przez zaznaczone transakcje obejmujące wielu baz danych może zmniejszyć wydajność serwera przetwarzania transakcji.

Firma Microsoft zaleca, aby uruchomić równoczesnych zaznaczonych transakcji.Rzadko, ale możliwe do zatwierdzanie z rozproszony oznaczone transakcji do zakleszczenie innych rozproszonych oznaczone transakcje, które są uwzględnione w tym samym czasie.W takim przypadku transakcja oznakowanie jest wybrany jako ofiara zakleszczenie i zostanie przywrócona.Po wystąpieniu tego błędu, aplikacja może ponowić próbę wykonania oznaczona transakcja.Gdy wielu zaznaczonych transakcji próba przekazania jednocześnie, jest prawdopodobieństwu wyższej zakleszczenie.

Odzyskiwanie do oznaczonych transakcji

Aby uzyskać informacje dotyczące sposobu odzyskiwania bazy danych zawierającej zaznaczonych transakcji do lub bezpośrednio przed określonym znakiem zobacz Recovering to a Marked Transaction.