Share via


Işaretli işlemler (Tam kurtarma modeli) kullanma

 Bu konu yalnızca için geçerlidir SQL Server tam veya toplu oturum kurtarma modelleri kullanan veritabanları için.

Iki veya daha fazla veritabanları için ilgili güncelleştirmeleri olun ilişkili veritabanları, işlem işaretleri için kullanabileceğiniz kurtarmak bunları mantıksal olarak tutarlı bir noktaya.Ancak, bu kurtarma kurtarma noktası olarak kullanılan işaretinden sonra kaydedilmiş olan herhangi bir hareket kaybeder.Hareketleri işaretleme sadece ilişkili veritabanlarından sınarken veya son zamanlarda tamamlanmış hareketleri kaybetmesine için olduğunda uygundur.

Bir dizi yaygın kurtarma noktalarını düzenli olarak ilgili her veritabanındaki ilgili işlemleri işaretleme veritabanlarında oluşturur.Işlem işaretleri hareket günlüğüne kaydedildiği ve günlük yedeklere dahil.Bir olağanüstü durum oluştuğunda, veritabanlarının her aynı hareket işaretine geri yükleme yükleyebilirler kurtarmak onları tutarlı bir noktaya.

Not

Günlük yedeklemeler farklı veritabanları üzerinde birbirlerinden bağımsız olarak oluşturulabilir ve eşzamanlı gerekmez.

Aşağıdaki senaryolarda, ilişkili veritabanları kurtarma için hareketleri ilgili her veritabanında zaten işaretli gerekir:

  • Bir veya daha fazla işlem günlüklerinin yok edilir.küme veritabanlarının, son oturum saat tutarlı bir duruma geri yükleme yüklemek zorunda yedek.

  • Tüm geri yükleme yüklemek zorunda küme veritabanlarının karşılıklı olarak tutarlı bir duruma saat önceki aşamasında.

Important noteImportant Note:

saat, ilgili veritabanlarının yalnızca işaretli hareket için belirli bir noktaya kurtarabilirsiniz.

Işaretleme hareketlerinin nasıl oluşturulacağı hakkında daha fazla bilgi için bu konuda daha sonra "Creating işaretli hareketleri," "konusuna bakın.

Işaretli hareketler kullanma normal senaryosu

Işaretli hareketlerin kullanmak için tipik BIR senaryoda, aşağıdaki adımları içerir:

  1. Her ilgili veritabanlarının tam veya farklı veritabanı yedeğini oluşturun.

  2. Tüm veritabanlarında işlem blok işaretleyin.

  3. Tüm veritabanları için işlem günlüğü yedekleyin.

  4. WITH NORECOVERY'YI veritabanı yedeklerini geri yükleme yükleyin.

  5. Geri yükleme, WITH STOPATMARK günlüğe kaydeder.

Işaretli hareketler kullanma hakkında önemli noktalar

Işlem günlüğü içine işaretleri adlı eklemeden önce aşağıdakileri göz önünde bulundurun:

  • Işlem işaretleri günlük alanı kullanılmasına neden olduğundan veritabanı kurtarma stratejisini önemli bir rol yürütme hareketler için bunları kullanın.

  • Işaretli bir hareket tamamlandıktan sonra bir satır eklenir logmarkhistory tablo in msdb.

  • Işaretli hareket için aynı veritabanı sunucusunda veya farklı bir sunucu birden çok veritabanı yayılmışsa, işaretler etkilenen tüm veritabanlarının günlüklerinde kaydedilmiş gerekir.

Işaretli hareketlerin oluşturma

Işaretli bir hareket oluşturmak için , BAŞLANGIÇ HAREKET deyim ve WITH IŞARETIAçıklamayan tümce.Isteğe bağlı Açıklama işaretini metin açıklamasıdır.Hareket için BIR işareti adı gerekiyor.Bir işareti ad yeniden kullanılabilir.Işlem günlüğü işareti adı, açıklaması, veritabanı, kullanıcı, datetime bilgileri ve günlük sıra numarası (SSN) kaydeder.Datetime bilgi işareti adıyla birlikte işareti benzersiz olarak tanıtmak için kullanılır.

Işaretli hareketlerin veritabanlarının kümesindeki oluşturmak için :

  1. Hareket BEGIN TRAN deyim içinde ad ve WITH MARK yan tümcesini kullanın.

    deyim BEGIN TRAN iç içe geçirebilirsiniz new_mark_name Varolan bir işlem içinde IŞARETI ILE. Değeri new_mark_name Hareket bir hareket adı sahip olsa bile işareti hareket için adıdır.

    Not

    Bir ikinci iç içe geçmiş BEGIN TRAN... WITH MARK sorun varsa, bu deyim atlanır, ancak bir uyarı iletisi neden olur.

  2. Tüm veritabanlarında karşı bir güncelleştirmeyi çalıştırmak küme.

    Işlem günlüklerinin BEGIN TRAN... WITH MARK deyim yürütülecek olan sunucu örnek, belirli bir hareketin işareti eklenir.Bu sunucuda işaretlenen hareket tarafından güncelleştirilen her veritabanının işlem günlüğü hareket işareti yerleştirilir örnek.Veritabanlarının farklı bir sunucu örnekleri üzerinde bulunuyorsa, her sunucu örnekleri aynı işaretleri oluşturulmalıdır.

Örnekler

Aşağıdaki örnek işlem günlüğü işareti adlı işaretli hareket içinde geri yükler ListPriceUpdate.

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';

Diğer sunuculara forma için işareti zorlama

Bir işlem işareti ad otomatik olarak başka dağıtıldığı olmayan sunucu olarak hareket vardır yayılır.Diğer sunuculara yaymak için bu işareti zorlamak için , saklı bir yordam bir BEGIN TRAN içeren yazılmalıdır Ad IŞARETI ekstresi.saklı yordam sonra kapsam kaynak sunucudaki işlem altında uzak sunucuda yürütülmelidir olduğunu.

Örneğin, üzerinde birden çok kopyası var bölümlendirilmiş bir veritabanı göz önünde bulundurun. SQL Server. Her örnek adlı bir veritabanı coyote. Ilk olarak, her bir veritabanında, bir saklı yordam oluşturma 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 yürütme

Bir dağıtılmış işlem yapılıyor, iki aşamada gerçekleşir: hazırlama ve yürütme. Işaretli bir işlem tamamlanmış olduğunda, her veritabanı işaretli hareket için yürütme günlük kaydı günlük bir noktada yerleştirilen herhangi günlüklerinin hiçbir şüpheli hareketlerin bulunduğu.Bu noktada, kabul edilen tek bir günlük görünür, ancak başka bir günlüğe kaydedilmiş hiçbir hareketler sağlanır.

Işaretli bir hareket yürütme sırasında bunu aşağıdaki adımları:

  1. Tüm yeni stalls işaretleme işlem aşaması hazırlamanız hazırlar ve tamamlar.

  2. Önceden hazırlanmış hareketlerinin yalnızca iptalleri devam etmek için izin verilir.

  3. Sonra hareketi işaretleme (saat aşımı ile) noktasındaki boşaltmak hazırlanmış olan tüm hareketleri bekler.

  4. Işaretli hareket hazır ve kaydedilmiş.

  5. Yeni hazırlar ve tamamlar, stall kaldırılır.

Birden çok veritabanına yayılmış işaretli hareketler tarafından oluşturulan stalls sunucunun performansını işleme hareket azaltabilirsiniz.

Eşzamanlı olarak işaretli hareketler çalıştırmanızı öneririz.Ender olarak, ancak diğer dağıtılmış hareketleri aynı anda yapılıyor işaretli ile dağıtılmış bir yürütme için olası çıkmaz hareketle olarak işaretlenmiş.Bu durumda, işaretleme hareket çıkmaz kurban olarak seçilen ve döndürülüyor.Bu hata oluştuğunda, uygulama işaretli hareket deneyebilir.Birden çok işaretli hareketler aynı anda kaydetmeye çalıştığınızda, daha yüksek bir çıkmaz olasılığı vardır.

Işaretlenen bir işlem için kurtarma

Işaretli hareketler için veya yalnızca belirli bir işareti önce içeren bir veritabanı kurtarmak hakkında daha fazla bilgi için bkz: Işaretlenen bir işlem için kurtarma.