Aracılığıyla paylaş


Bir Kaynak Yöneticisi Uygulamak

Bir işlemde kullanılan her kaynak, eylemleri bir işlem yöneticisi tarafından koordine edilen bir kaynak yöneticisi tarafından yönetilir. Kaynak yöneticileri, uygulamaya bölünmezlik ve yalıtım garantisi sağlamak için işlem yöneticisiyle işbirliği içinde çalışır. Microsoft SQL Server, dayanıklı ileti kuyrukları, bellek içi karma tabloları kaynak yöneticilerine örnektir.

Kaynak yöneticisi dayanıklı veya geçici verileri yönetir. Kaynak yöneticisinin dayanıklılığı (veya tersine volatilite), kaynak yöneticisinin hata kurtarmayı destekleyip desteklemediği anlamına gelir. Kaynak yöneticisi hata kurtarmayı destekliyorsa, verileri Aşama1 (hazırlama) sırasında dayanıklı depolamada kalıcı hale getirir; böylece kaynak yöneticisi devre dışı kalırsa kurtarma sonrasında işleme yeniden kaydolabilir ve işlem yöneticisinden alınan bildirimlere göre uygun eylemleri gerçekleştirebilir. Genel olarak, geçici kaynak yöneticileri bellek içi veri yapısı (örneğin, bellek içi transacted-hashtable) gibi geçici kaynakları yönetir ve dayanıklı kaynak yöneticileri daha kalıcı bir yedekleme deposu (örneğin, yedekleme deposu disk olan bir veritabanı) olan kaynakları yönetir.

Bir kaynağın bir işleme katılması için işleme kaydolması gerekir. Transaction sınıfı, adları Enlist ile başlayan ve bu işlevselliği sağlayan bir yöntem kümesi tanımlar. Farklı Enlist yöntemler, kaynak yöneticisinin sahip olabileceği farklı liste türlerine karşılık gelir. Özellikle, geçici kaynaklar için EnlistVolatile yöntemlerini ve dayanıklı kaynaklar için EnlistDurable yöntemini kullanırsınız. Basitlik için, kaynağınızın dayanıklılık desteğine göre EnlistDurable veya EnlistVolatile yöntemini kullanmaya karar verdikten sonra, kaynak yöneticinizde IEnlistmentNotification arayüzünü uygulayarak kaynağınızı İki Aşamalı Taahhüt (2PC) işlemine katılması için listelemeniz gerekir. 2PC hakkında daha fazla bilgi için bkz. Single-Phase ve Çok Aşamalı İşlem İşleme.

Kaynak yöneticisi, kayıt yaptırarak, işlem tamamlandığında veya iptal edildiğinde işlem yöneticisinden geri bildirim almasını sağlar. Her katılım için IEnlistmentNotification bir örnek vardır. Genellikle, işlem başına bir liste vardır, ancak bir kaynak yöneticisi aynı işlemde birden çok kez kaydolmayı seçebilir.

Kayıt işleminden sonra kaynak yöneticisi işlemin isteklerine yanıt verir. Dayanıklı bir kaynak yöneticisi, işlemin yönettiği kaynaklarla ilgili çalışmasını geri almak veya yinelemek için yeterli bilgiyi depolar. Bunu yapmanın birçok yolu vardır; veri sürümlerini tutmak veya değişikliklerin günlüğünü tutmak iki yaygın tekniktir.

Uygulama işlemi işlediğinde, işlem yöneticisi iki aşamalı işleme protokolünü başlatır. İşlem yöneticisi önce, listeye alınan her kaynak yöneticisine işlemi işlemeye hazır olup olmadığını sorar. Kaynak yöneticisi, taahhüt etmeye veya işlemi iptal etmeye hazırlıklı olmalıdır; bu, kendini ya onaylamaya ya da iptale hazırlar.

Hazırlama aşamasında dayanıklı kaynak yöneticisi, sistem başarısız olsa bile kaynak yöneticisinin kurtarabilmesi için eski ve yeni verileri kararlı depolama alanına kaydeder. Kaynak yöneticisi hazırlanabiliyorsa, işlemin işlenip işlenmeyeceği veya durdurulup durdurulmayacağı konusunda oyunu işlem yöneticisine bildirir. Herhangi bir kaynak yöneticisi hazırlanma hatası bildirirse, işlem yöneticisi her kaynak yöneticisine bir geri alma komutu gönderir ve uygulamaya işleme başarısızlığını bildirir.

Hazırlandıktan sonra, kaynak yöneticisinin 2. aşamada işlem yöneticisinden bir onay veya iptal geri çağrısını alana kadar beklemesi gerekir. Genellikle, hazırlama ve taahhüt protokolünün tamamı saniyenin bir bölümü içinde tamamlanır. Sistem veya iletişim hataları varsa, işleme veya durdurma bildirimi dakikalar veya saatler boyunca ulaşamayabilir. Bu süre boyunca kaynak yöneticisi işlemin sonucu hakkında şüphe içindedir. İşlemin tamamlanıp tamamlanmadığını veya iptal edilip edilmediğini bilmez. Kaynak yöneticisi bir işlem hakkında şüpheli olsa da, işlemi kilitli tutarak verilerin değiştirilmesini sağlar ve böylece bu değişiklikler diğer işlemlerden yalıtılır.

Bir kaynak yöneticisi başarısız olduğunda, hatadan önce hazırlanan veya işlenenler dışında, listede yer alan tüm işlemler durduruldu. Dayanıklı bir kaynak yöneticisi yeniden başlatıldığında, hazırlık aşamasında yazılan bilgileri alarak yönettiği kaynakların onaylanmış durumunu yeniden oluşturur ve bu işlemleri uygun şekilde taahhüt eder veya iptal eder.

Özetle, iki aşamalı işleme protokolü ve kaynak yöneticileri bir araya gelerek işlemleri atomik ve dayanıklı hale getirir.

Transaction sınıfı, Promotable Single Phase Enlistment (PSPE) listelemek için EnlistPromotableSinglePhase yöntemini de sağlar. Bu, dayanıklı bir kaynak yöneticisinin (RM) daha sonra gerekirse MSDTC tarafından yönetilecek şekilde yükseltilebilen bir işlemi barındırmasına ve "sahip olmasına" olanak tanır. Bu konuda daha fazla bilgi için bkz. Tek Aşamalı Taahhüt ve Yükseltilebilir Tek Aşamalı Bildirim kullanarak iyileştirme.

Bu Kısımda

Genellikle bir kaynak yöneticisi tarafından izlenen adımlar aşağıdaki konularda özetlenmiştir.

Bir İşlemde Kaynakları Katılımcı Olarak Listeleme

Dayanıklı veya geçici bir kaynağın bir işleme nasıl kaydolabileceğini açıklar.

Single-Phase ve Çok Fazlı İşlem İşleme

Bir kaynak yöneticisinin işleme bildirimine nasıl yanıt verdiğini ve işlemeyi nasıl hazırlayacağını açıklar.

Kurtarma İşlemi Yapılıyor

Dayanıklı bir kaynak yöneticisinin hatadan nasıl kurtarıldığı açıklanır.

Kaynaklara Erişimde Güvenlik Güven Düzeyleri

System.Transactions için üç güven düzeyinin, System.Transactions tarafından kullanıma sunulan kaynak türlerine erişimi nasıl kısıtladığını açıklar.

Tek Aşamalı Onay ve Tanıtılabilir Tek Aşamalı Bildirim kullanarak optimizasyon

Kaynak yöneticilerinin uygulamaları için kullanılabilir iyileştirme uygulamalarını açıklar.