Share via


Dağıtılmış İşlemler

İşlem, diğer şeylerin yanı sıra birim olarak başarılı (işleme) veya başarısız olan (iptal) ilgili görevler kümesidir. Dağıtılmış işlem, birkaç kaynağı etkileyen bir işlemdir. Dağıtılmış bir işlemin işlenmesi için tüm katılımcıların verilerde yapılan değişikliklerin kalıcı olacağını garanti etmesi gerekir. Sistem kilitlenme veya diğer öngörülemeyen olayları rağmen değişiklikleri kalıcı gerekir. Tek bir katılımcı bile bu garantiyi veremezse, işlemin tamamı başarısız olur ve işlem kapsamındaki verilerde yapılan değişiklikler geri alınır.

Not

İşlem etkinken başlatılırsa bir işlemi işlemeye veya geri almayı denerseniz bir DataReader özel durum oluşturulur.

System.Transactions ile Çalışma

.NET Framework'te, dağıtılmış işlemler ad alanında System.Transactions API aracılığıyla yönetilir. API, System.Transactions birden çok kalıcı kaynak yöneticisi söz konusu olduğunda dağıtılmış işlem işlemeyi Microsoft Dağıtılmış İşlem Düzenleyicisi (MS DTC) gibi bir işlem izleyicisine devredecektir. Daha fazla bilgi için bkz . İşlem Temelleri.

ADO.NET 2.0, bir örneğe bağlantı Transaction listeleyen yöntemini kullanarak EnlistTransaction dağıtılmış bir işleme kaydolma desteği sunar. ADO.NET önceki sürümlerinde, dağıtılmış işlemlerde açık listeleme, geriye dönük uyumluluk için desteklenen bir örnekteki bir bağlantıyı listelemek için bir ITransaction bağlantı yöntemi kullanılarak EnlistDistributedTransaction gerçekleştirildi. Enterprise Services işlemleri hakkında daha fazla bilgi için bkz . Enterprise Services ile Birlikte Çalışabilirlik ve COM+ İşlemleri.

SQL Server için .NET Framework Sağlayıcısı ile bir SQL Server veritabanında bir işlem kullanılırken System.Transactions , otomatik olarak basit Transaction bir işlem kullanılır. İşlem daha sonra gerektiğinde tam dağıtılmış bir işleme yükseltilebilir. Daha fazla bilgi için bkz . SQL Server ile System.Transactions Tümleştirmesi.

Not

Oracle veritabanının bir kerede katılabileceği en fazla dağıtılmış işlem sayısı varsayılan olarak 10 olarak ayarlanır. Oracle veritabanına bağlanıldığında 10. işlemden sonra bir özel durum oluşturulur. Oracle, dağıtılmış bir işlemin içini desteklemez DDL .

Dağıtılmış İşlemde Otomatik Olarak Listeleme

Otomatik listeleme, ADO.NET bağlantılarını ile System.Transactionstümleştirmenin varsayılan (ve tercih edilen) yoludur. Bir bağlantı nesnesi, bir işlemin etkin olduğunu belirlerse( yani null olmadığı anlamına gelirTransaction.Current) var olan bir dağıtılmış işlemde System.Transaction otomatik olarak listeye eklenir. Otomatik işlem listesi, bağlantı açıldığında gerçekleşir. İşlem kapsamının içinde bir komut yürütülse bile bundan sonra gerçekleşmez. bir için bağlantı dizesi parametresi olarak veya OLE DB Services=-7 bir için SqlConnection.ConnectionStringbağlantı dizesi parametresi olarak OleDbConnection.ConnectionStringbelirterek Enlist=false mevcut işlemlerde otomatik listelemeyi devre dışı bırakabilirsiniz. Oracle ve ODBC bağlantı dizesi parametreleri hakkında daha fazla bilgi için bkzOracleConnection.ConnectionString. ve OdbcConnection.ConnectionString.

Dağıtılmış İşlemde El ile Listeleme

Otomatik listeleme devre dışı bırakıldıysa veya bağlantı açıldıktan sonra başlatılan bir işlemi listelemeniz gerekiyorsa, çalıştığınız sağlayıcının nesnesinin EnlistTransactionDbConnection yöntemini kullanarak var olan bir dağıtılmış işleme kaydolabilirsiniz. Mevcut bir dağıtılmış işlemde listeleme, işlem işlenirse veya geri alınırsa, veri kaynağındaki kod tarafından yapılan değişikliklerin de işlenmesini veya geri alınmasını sağlar.

Dağıtılmış işlemlere kayıt olmak, özellikle iş nesnelerinin havuza alınması sırasında geçerlidir. bir iş nesnesi açık bir bağlantıyla havuza alınmışsa, otomatik işlem listesi yalnızca bu bağlantı açıldığında gerçekleşir. Havuza alınan iş nesnesi kullanılarak birden çok işlem gerçekleştiriliyorsa, bu nesnenin açık bağlantısı yeni başlatılan işlemlerde otomatik olarak listelenmez. Bu durumda, bağlantı için otomatik işlem listesini devre dışı bırakabilir ve kullanarak EnlistTransactionişlemlerde bağlantıyı kaydedebilirsiniz.

EnlistTransaction , var olan işleme başvuru olan tek bir tür Transaction bağımsız değişkeni alır. Bağlantının yöntemini çağırdıktan sonra, bağlantı EnlistTransaction kullanılarak veri kaynağında yapılan tüm değişiklikler işleme dahil edilir. Null bir değer geçirilmesi, bağlantıyı geçerli dağıtılmış işlem listesinden kaldırır. çağrısından EnlistTransactionönce bağlantının açılması gerektiğini unutmayın.

Not

Bir bağlantı açıkça bir işlemde listelendikten sonra, ilk işlem bitene kadar listeden çıkarılamaz veya başka bir işlemde listelenemez.

Dikkat

EnlistTransaction bağlantının yöntemini kullanarak BeginTransaction zaten bir işlem başlatmışsa bir özel durum oluşturur. Ancak, işlem veri kaynağında başlatılan bir yerel işlemse (örneğin, BEGIN TRANSACTION deyimini açıkça kullanarak SqlCommandyürütmek), EnlistTransaction yerel işlemi geri alır ve istenen şekilde mevcut dağıtılmış işleme kaydolır. Yerel işlemin geri alındığına ve kullanılarak BeginTransactionbaşlatılmayan yerel işlemleri yönetmesi gerektiğine dair bildirim almazsınız. SQL Server (SqlClient) için .NET Framework Veri Sağlayıcısı'ni SQL Server ile kullanıyorsanız, listeye ekleme girişimi bir özel durum oluşturur. Diğer tüm durumlar algılanmamış olarak gider.

SQL Server'da Tanıtılabilir İşlemler

SQL Server, yerel basit bir işlemin otomatik olarak dağıtılmış bir işleme yükseltilebildiği yükseltilebilir işlemleri yalnızca gerekli olduğunda destekler. Yükseltilebilir bir işlem, eklenen ek yük gerekmediği sürece dağıtılmış bir işlemin ek yükünü çağırmaz. Daha fazla bilgi ve kod örneği için bkz . SQL Server ile System.Transactions Tümleştirmesi.

Dağıtılmış İşlemleri Yapılandırma

Dağıtılmış işlemleri kullanmak için ağ üzerinden MS DTC'yi etkinleştirmeniz gerekebilir. Windows Güvenlik Duvarı etkinse, MS DTC hizmetinin ağı kullanmasına veya MS DTC bağlantı noktasını açmasına izin vermelisiniz.

Ayrıca bkz.