Aracılığıyla paylaş


BEGIN TRANSACTION (Transact-SQL)

Açık, yerel bir hareketin başlangıç noktasını işaretler.BEGIN TRANSACTION @@ TRANCOUNT birer birer artar.

Topic link iconTransact-SQL sözdizimi kuralları

BEGIN { TRAN | TRANSACTION } 
    [ { transaction_name | @tran_name_variable }
      [ WITH MARK [ 'description' ] ]
    ]
[ ; ]

Bağımsız değişkenler

  • transaction_name
    Is the name assigned to the transaction.transaction_name must conform to the rules for identifiers, but identifiers longer than 32 characters are not allowed.İç içe BEGIN... yürütme veya BEGIN... ROLLBACK deyimi en dıştaki çifti yalnızca işlem adları kullanın.

  • @tran\_name\_variable
    Kullanıcı tanımlı bir değişkenin adını, geçerli işlem adını içeren iş.Değişkeni ile bildirilmeli birchar,varchar,nchar, ornvarcharveri türü.Birden fazla 32 karakter değişkene geçirilen, sadece ilk 32 karakteri kullanılır; kalan diğer karakterler kesilecek.

  • İŞARETİ ile 'description '
    Specifies that the transaction is marked in the log.description is a string that describes the mark.Ifdescription, bir Unicode dizesidir, depolanmış önce en fazla 255 karakterden kesilir 255 karakterden daha uzun değerler
    msdb.dbo.logmarkhistory
    tablo.IfdescriptionUnicode olmayan bir dize, değer artık çok 510 karakterler kesilmiş 510 karakter.

    WITH MARK kullanılırsa, hareket adı belirtilmelidir.İşlem günlüğü adlı işareti geri yüklemek için işareti ile sağlar.

Remarks

BEGIN TRANSACTION bağlantısı tarafından başvurulan veri, fiziksel ve mantıksal olarak tutarlı olduğu bir noktayı temsil eder.Hatalarla karşılaşılan, veri tutarlılığı, bilinen bu duruma getirmek için BEGIN TRANSACTION'sonra yapılan tüm veri değişiklikleri geri alınması.Her hareket ya da hatasız tamamlanıncaya kadar sürer ve işlemi yürütme değişiklikleri veritabanına kalıcı bir parçası yapmak için verilmiş hatalarla karşılaştı ve tüm değişiklikleri bir ROLLBACK TRANSACTION deyim ile silinir.

BEGIN TRANSACTION deyim veren bağlantı için yerel bir işlem başlatır.Geçerli işlem yalıtım düzey ayarları bağlı olarak, pek çok kaynak alınan desteklemek içinTransact-SQLbağlantı tarafından verilen deyimleri kilitli kadar bir TRANSACTION yürütme veya tamamlandıktan hareketine göre ROLLBACK TRANSACTION deyim.Hareketleri sol olağanüstü uzun süreler için saat diğer kullanıcılar kilitli bu kaynaklara erişmesini engelleyebilir ve günlük kesilmesi de engel olabilir.

Yerel işlem BEGIN TRANSACTION başlar, ancak uygulama daha sonra INSERT, UPDATE yürütme günlüğüne kaydedilmesi gerekir veya DELETE deyim bir eylem gerçekleştiren kadar hareket günlüğüne kaydedilmez.Bir uygulama SELECT deyimlerinin işlem yalıtım düzey korumak için kilit alma gibi işlemleri gerçekleştirebilir, ancak uygulama değiştirme eylem gerçekleştiren kadar hiçbir şey günlüğe kaydedilir.

Birden çok iç içe geçmiş hareketleri bir dizi işlemler bir işlem adı adlandırma hareket çok az etkisi vardır.Yalnızca ilk (en dıştaki) hareket adı sisteme kayıtlı değil.Bir diğer adı (dışında geçerli kayıt noktası adı) için bir geri alma hata üretir.Geri alma önce yürütülen ifadeleri hiçbiri, bu hata ortaya çıkar bir anda geri olan.İfadeleri geri yalnızca, dış işlem geri alınır.

İçin BEGIN TRANSACTION deyim ile başlatılan yerel işlem escalated bir dağıtılmış işlem, deyim kabul edilen veya geri önce aşağıdaki eylemler gerçekleştirilir:

  • bağlantılı sunucu uzak bir tabloya başvuran bir INSERT, DELETE veya UPDATE deyim çalıştırılır.INSERT, UPDATE veya DELETE deyim başarısız bağlantılı sunucuya erişmek için kullanılan OLE DB sağlayıcının desteklemediği,ITransactionJoinarabirim.

  • REMOTE_PROC_TRANSACTIONS seçeneği olduğunda uzak saklı yordam için bir çağrı yapılır küme açık.

Yerel kopyasıSQL Serverhareket denetleyicisi olur ve kullanırMicrosoftDağıtılmış İşlem Düzenleyicisi (MS DTC) yönetmek dağıtılmış işlem.

Bir işlem, dağıtılmış bir işlem olarak BEGIN dağıtılmış işlem kullanarak açık olarak çalıştırılabilir.Daha fazla bilgi için bkz:dağıtılmış işlem (Transact-SQL) BEGIN.

İşaretli işlemler

WITH MARK seçeneği, hareket günlüğüne yerleştirileceği hareket adı neden olur.Bir veritabanını önceki bir durumuna geri yüklemek, işaretli hareket tarih ve saat yerine kullanılabilir.Daha fazla bilgi için bkz:Işaretli işlemler (Tam kurtarma modeli) kullanmavegeri yükleme (Transact-SQL).

Ayrıca, işlem günlüğü işaretleri kurtarmak istediğinizde gerekli olan bir küme ilişkili veritabanlarının mantıksal olarak tutarlı bir duruma.İşareti ilgili veritabanlarının işlem günlükleri dağıtılmış bir işlem tarafından yerleştirilebilir.İlgili veritabanları için bir dizi işlem tutarlı olan veritabanları bu işaretleri sonuçlar kümesi kurtarma.İşaretleri ilişkili veritabanlarının yerini özel yordamlar gerektirir.

Veritabanı işaretlenen hareket güncelleştirildiğinde işareti hareket günlüğüne yerleştirilir.Veri değiştirme işlemleri işaretlenir.

BEGIN TRANnew_nameWITH MARK içe işaretlenmemiş zaten varolan bir işlemde.Bunu yaptığınızda temelnew_namehareketi önceden verilmiş adı rağmen hareket için işareti adı haline gelir.Aşağıdaki örnekte,M2adı işareti.

BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT * from table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;

Hareketler iç içe geçmiş, bir uyarı (değil hatası) iletisi sonuçlar önceden işaretlenmiş bir hareket olarak işaretlemek çalışıyor:

"... TRAN T1 İŞARETİYLE BAŞLAR;"

"Tablo1... UPDATE;"

"... TRAN M2 İŞARETİYLE BAŞLAR;"

"Sunucu: Msg 3920, düzey 16, State 1, Line 3 "

"İşareti ile seçenek yalnızca ilk BEGIN TRAN ile işareti için geçerlidir."

"Seçeneği yok sayılır."

İzinler

Üyelik gerektirenortak role.

Örnekler

C.Bir hareket adlandırma

Aşağıdaki örnek, nasıl bir işlem adı gösterilir.

DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';

BEGIN TRANSACTION @TranName;
USE AdventureWorks;
DELETE FROM AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;

COMMIT TRANSACTION @TranName;
GO

B.Bir hareket işaretleme

Aşağıdaki örnek, bir hareket olarak işaretlemek gösterilmiştir.HareketCandidateDeleteolarak işaretlenmiş.

BEGIN TRANSACTION CandidateDelete
    WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks;
GO
DELETE FROM AdventureWorks.HumanResources.JobCandidate
    WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GO