Aracılığıyla paylaş


Dağıtılmış iş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 kilitlenmeleri veya diğer öngörülemeyen olaylara rağmen değişiklikler kalıcı olmalıdır. 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

Bir DataReader işlem etkinken başlatılırsa, bir işlemi işlemek veya geri almak denendiğinde bir özel durum fırlatılacaktır.

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, EnlistTransaction örneğine bir bağlantıyı kaydeden Transaction yöntemini kullanarak dağıtılmış bir işleme katılım desteği sunar. ADO.NET'in önceki sürümlerinde, dağıtılmış işlemlerdeki açık kaydetme işlemi, bir EnlistDistributedTransaction yöntemi kullanılarak, bir bağlantının geriye dönük uyumluluk için desteklenen bir ITransaction örneğine kaydedilmesiyle yapıldı. Enterprise Services işlemleri hakkında daha fazla bilgi için bkz . Enterprise Services ile Birlikte Çalışabilirlik ve COM+ İşlemleri.

SQL Server veritabanına karşı SQL Server için .NET Framework Sağlayıcısı ile bir System.Transactions işlem kullanıldığında, otomatik olarak hafif bir Transaction kullanılacaktı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, DDL'yi dağıtılmış bir işlemin içinde desteklemez.

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

Otomatik katılım, ADO.NET bağlantılarını System.Transactions ile entegre etmenin varsayılan (ve tercih edilen) yoludur. Bir bağlantı nesnesi, bir işlemin etkin olduğunu belirlerse( yani null olmadığı anlamına gelirSystem.Transaction) var olan bir dağıtılmış işlemde Transaction.Current otomatik olarak listeye eklenir. Otomatik işlem katılımı, 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. Mevcut işlemlerde otomatik listelemeyi devre dışı bırakmak için, bir Enlist=false için bağlantı dizesi parametresi olarak SqlConnection.ConnectionString veya bir OLE DB Services=-7 için bağlantı dizesi parametresi olarak OleDbConnection.ConnectionString belirtebilirsiniz. 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 kaydı 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şlemlere otomatik olarak katılmaz. Bu durumda, bağlantı için otomatik işlem katılımını devre dışı bırakabilir ve EnlistTransaction kullanarak bağlantıyı işlemlere kaydedebilirsiniz.

EnlistTransaction, mevcut işlemin referansı olan tür Transaction tek bir bağımsız değişken 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 BeginTransaction yöntemini kullanarak bir işlem zaten başlatıldıysa bir istisna fırlatır. 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 dair bildirim almazsınız ve BeginTransaction kullanılarak başlatılmayan yerel işlemleri yönetmeniz gerekir. 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 tespit edilmeden kalacak.

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 izin vermeli veya MS DTC portunu açmalısınız.

Ayrıca bkz.