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.
![]() |
---|
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:
Tworzenie pełnych ani różnicowych bazy danych z kopia zapasowa każdego z powiązanych baz danych.
Zaznacz blok transakcji w przypadku wszystkich baz danych.
Wykonaj kopię zapasową wszystkich baz danych dziennik transakcji.
Przywracanie kopii zapasowych baz danych Z NORECOVERY.
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:
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.
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:
Przygotowanie Faza transakcji oznakowanie kabin wszystkich nowych przygotowuje i zatwierdzeniu.
Tylko przekazywania transakcji już przygotowane mogą w dalszym ciągu.
Oznaczanie transakcji następnie czeka na wszystkich przygotowanych transakcji opróżnić (z limitu czas).
Oznaczona transakcja jest przygotowana i zatwierdzone.
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.
See Also