Not
Bu sayfaya erişim yetkilendirme gerektiriyor. Oturum açmayı veya dizinleri değiştirmeyi deneyebilirsiniz.
Bu sayfaya erişim yetkilendirme gerektiriyor. Dizinleri değiştirmeyi deneyebilirsiniz.
Şunlar için geçerlidir:SQL Server
Azure SQL Veritabanı
Azure SQL Yönetilen Örneği
Azure Synapse Analytics
Analiz Platformu Sistemi (PDW)
Microsoft Fabric'te
ambarMicrosoft Fabric'te SQL veritabanı
Açık, yerel bir işlemin başlangıç noktasını işaretler. Açık işlemler deyimiyle BEGIN TRANSACTION başlar ve veya COMMIT deyimiyle ROLLBACK biter.
Transact-SQL söz dizimi kuralları
Syntax
SQL Server, Azure SQL Veritabanı, Doku SQL veritabanı ve Azure SQL Yönetilen Örneği için söz dizimi.
BEGIN { TRAN | TRANSACTION }
[ { transaction_name | @tran_name_variable }
[ WITH MARK [ 'description' ] ]
]
[ ; ]
Doku Veri Ambarı, Azure Synapse Analytics ve Analiz Platformu Sistemi (PDW) için söz dizimi.
BEGIN { TRAN | TRANSACTION }
[ ; ]
Arguments
transaction_name
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Doku SQL veritabanı ve Azure SQL Yönetilen Örneği
İşlem için atanan ad.
transaction_name tanımlayıcıların kurallarına uyması gerekir, ancak 32 karakterden uzun tanımlayıcılara izin verilmez. İşlem adlarını yalnızca iç içe BEGIN...COMMIT veya BEGIN...ROLLBACK deyimlerin en dıştaki çiftinde kullanın.
sql server örneği büyük/küçük harfe duyarlı olmasa bile transaction_name her zaman büyük/küçük harfe duyarlıdır.
@tran_name_variable
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Doku SQL veritabanı ve Azure SQL Yönetilen Örneği
Geçerli bir işlem adı içeren kullanıcı tanımlı değişkenin adı. Değişkenin char, varchar, nchar veya nvarchar veri türüyle bildirilmesi gerekir. Değişkene 32'den fazla karakter geçirilirse yalnızca ilk 32 karakter kullanılır. Kalan karakterler kesilir.
MARK İLE [ 'tanım' ]
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Doku SQL veritabanı ve Azure SQL Yönetilen Örneği
İşlemin günlükte işaretlendiğini belirtir.
description , işareti tanımlayan bir dizedir. Tabloda depolanmadan önce 128 karakterden uzun bir msdb.dbo.logmarkhistory 128 karaktere kesilir.
Kullanılırsa WITH MARK , bir işlem adı belirtilmelidir.
WITH MARK bir işlem günlüğünü adlandırılmış bir işarete geri yüklemeye olanak tanır.
Remarks
BEGIN TRANSACTION tarafından artırılır @@TRANCOUNT1.
BEGIN TRANSACTION , bağlantı tarafından başvurulan verilerin mantıksal ve fiziksel olarak tutarlı olduğu bir noktayı temsil eder. Hatalarla karşılaşılırsa, sonrasında yapılan BEGIN TRANSACTION tüm veri değişiklikleri, verileri bu bilinen tutarlılık durumuna döndürmek için geri alınabilir. Her işlem, hatalar olmadan tamamlanana ve COMMIT TRANSACTION değişikliklerin veritabanının kalıcı bir parçası olması için verilene kadar sürer veya hatalarla karşılaşılır ve tüm değişiklikler bir ROLLBACK TRANSACTION deyimle silinir.
BEGIN TRANSACTION deyimini veren bağlantı için yerel bir işlem başlatır. Geçerli işlem yalıtım düzeyi ayarlarına bağlı olarak, bağlantı tarafından verilen Transact-SQL deyimlerini desteklemek için alınan birçok kaynak, bir COMMIT TRANSACTION veya ROLLBACK TRANSACTION deyimiyle tamamlanana kadar işlem tarafından kilitlenir. Uzun süre bekleyen işlemler, diğer kullanıcıların bu kilitli kaynaklara erişmesini engelleyebilir ve ayrıca günlük kesilmesini engelleyebilir.
Yerel bir işlem başlatılsa BEGIN TRANSACTION da, uygulama , veya INSERT deyimini yürütme UPDATEDELETEgibi günlüğe kaydedilmesi gereken bir eylem gerçekleştirene kadar işlem günlüğüne kaydedilmez. Bir uygulama, deyimlerin işlem yalıtım düzeyini SELECT korumak için kilit alma gibi eylemler gerçekleştirebilir, ancak uygulama bir değişiklik eylemi gerçekleştirene kadar günlüğe hiçbir şey kaydedilmez.
bir dizi iç içe işlemdeki birden çok işlemi işlem adıyla adlandırmanın işlem üzerinde çok az etkisi vardır. Sisteme yalnızca ilk (en dıştaki) işlem adı kaydedilir. Başka bir ada (geçerli bir kayıt noktası adı dışında) geri alma işlemi bir hata oluşturur. Geri alma işlemi öncesinde yürütülen deyimlerin hiçbiri, aslında bu hata oluştuğu sırada geri alınıp alınmamasıdır. Deyimler yalnızca dış işlem geri alındığında geri alınır.
deyimi tarafından BEGIN TRANSACTION başlatılan yerel işlem, deyimi işlenmeden veya geri almadan önce aşağıdaki eylemler gerçekleştirilirse dağıtılmış bir işleme yükseltilir:
INSERTBağlı bir sunucudaki uzak tabloya başvuran bir ,DELETEveyaUPDATEdeyimi yürütülür.INSERTBağlı sunucuya erişmek için kullanılan OLE DB sağlayıcısı arabirimi desteklemiyorsaUPDATE,DELETEveyaITransactionJoindeyimi başarısız olur.seçeneği olarak ayarlandığında
REMOTE_PROC_TRANSACTIONSuzak saklı yordamaONbir çağrı yapılır.
SQL Server'ın yerel kopyası işlem denetleyicisi olur ve dağıtılmış işlemi yönetmek için Microsoft Dağıtılmış İşlem Düzenleyicisi'ni (MS DTC) kullanır.
Bir işlem kullanılarak BEGIN DISTRIBUTED TRANSACTIONaçıkça dağıtılmış bir işlem olarak yürütülebilir. Daha fazla bilgi için bkz. BEGIN DISTRIBUTED TRANSACTION.
SET IMPLICIT_TRANSACTIONS olarak ayarlandığındaON, bir BEGIN TRANSACTION deyim iki iç içe işlem oluşturur. Daha fazla bilgi için bkz. SET IMPLICIT_TRANSACTIONS.
İşaretli işlemler
seçeneği WITH MARK , işlem adının işlem günlüğüne yerleştirilmesine neden olur. Veritabanını önceki bir duruma geri yüklerken, işaretli işlem tarih ve saat yerine kullanılabilir. Daha fazla bilgi için bkz. İlgili Veritabanlarını Tutarlı Bir Şekilde Kurtarmak için İşaretli İşlemleri Kullanma ve RESTORE Deyimleri.
Ayrıca, bir dizi ilgili veritabanını mantıksal olarak tutarlı bir duruma kurtarmanız gerekiyorsa işlem günlüğü işaretleri gereklidir. İşaretler, dağıtılmış bir işlem tarafından ilgili veritabanlarının işlem günlüklerine yerleştirilebilir. İlgili veritabanları kümesinin bu işaretlere kurtarılması, işlem açısından tutarlı bir veritabanı kümesine neden olur. İlgili veritabanlarında işaretlerin yerleştirilmesi için özel yordamlar gerekir.
İşaret, yalnızca veritabanı işaretli işlem tarafından güncelleştirildiyse işlem günlüğüne yerleştirilir. Verileri değiştirmeyen işlemler işaretlenmez.
BEGIN TRANSACTION <new_name> WITH MARK önceden var olan ve işaretlenmemiş bir işlemin içinde iç içe yerleştirilmiş olabilir. Bunu yaptıktan sonra, <new_name> hareketin önceden verilmiş olabileceği ada rağmen işlemin işaret adı olur. Aşağıdaki örnekte, M2 işaretin adı verilmiştir.
BEGIN TRAN T1;
UPDATE table1 ...;
BEGIN TRAN M2 WITH MARK;
UPDATE table2 ...;
SELECT * from table1;
COMMIT TRAN M2;
UPDATE table3 ...;
COMMIT TRAN T1;
İşlemleri iç içe yerleştirdiğinizde, zaten işaretlenmiş bir işlemi işaretlemeye çalışırsanız aşağıdaki uyarı iletisini alırsınız:
Server: Msg 3920, Level 16, State 1, Line 3
WITH MARK option only applies to the first BEGIN TRAN WITH MARK.
The option is ignored.
Permissions
"" genel "" rolüne üyelik gerektirir.
Examples
Bu makaledeki kod örnekleri, AdventureWorks2025 giriş sayfasından indirebileceğiniz AdventureWorksDW2025 veya örnek veritabanını kullanır.
A. Açık bir işlem kullanma
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Doku SQL veritabanı, Azure SQL Yönetilen Örneği, Azure Synapse Analytics, Analytics Platform Sistemi (PDW)
BEGIN TRANSACTION;
DELETE FROM HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT;
B. bir işlemi geri döndürme
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Doku SQL veritabanı, Azure SQL Yönetilen Örneği, Azure Synapse Analytics, Analytics Platform Sistemi (PDW)
Aşağıdaki örnek, bir işlemi geri döndürmenin etkisini gösterir. Bu örnekte deyimi ROLLBACK deyimini INSERT geri alır, ancak oluşturulan tablo hala mevcuttur.
CREATE TABLE ValueTable (id INT);
BEGIN TRANSACTION;
INSERT INTO ValueTable VALUES(1);
INSERT INTO ValueTable VALUES(2);
ROLLBACK;
C. Bir işlemi adlandırma
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Doku SQL veritabanı, Azure SQL Yönetilen Örneği
Aşağıdaki örnekte bir işlemin nasıl adlandırılası gösterilmektedir.
DECLARE @TranName VARCHAR(20);
SELECT @TranName = 'MyTransaction';
BEGIN TRANSACTION @TranName;
USE AdventureWorks2022;
DELETE FROM AdventureWorks2022.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
COMMIT TRANSACTION @TranName;
GO
D. bir işlemi işaretleme
Şunlar için geçerlidir: SQL Server 2008 (10.0.x) ve sonraki sürümleri, Azure SQL Veritabanı, Doku SQL veritabanı, Azure SQL Yönetilen Örneği
Aşağıdaki örnek, bir işlemin nasıl işaret yapılacağını gösterir. İşlem CandidateDelete işaretlenir.
BEGIN TRANSACTION CandidateDelete
WITH MARK N'Deleting a Job Candidate';
GO
USE AdventureWorks2022;
GO
DELETE FROM AdventureWorks2022.HumanResources.JobCandidate
WHERE JobCandidateID = 13;
GO
COMMIT TRANSACTION CandidateDelete;
GO