Aracılığıyla paylaş


Sanal Saat Değerlerini Kullanma

KTM, her işlem yöneticisi nesnesi için bir sanal saat sağlar. Bir kaynak yöneticisi ZwCreateTransactionManager'ı çağırdığında, KTM nesnenin sanal saat değerini 1 olarak ayarlar. KTM, bir işleme işlemi her başladığında sanal saat değerini artırır. KTM günlük akışına yazım yapıldığında, günlük kaydında bu geçerli sanal saat değerini içerir.

Bir kaynak yöneticisi ZwRecoverTransactionManager'ı çağırdığında, KTM akışın sonuna kadar günlük akışı kayıtlarını okur ve işlem yöneticisi nesnesinin sanal saat değerini nesnenin günlük akışında bulduğu son değere ayarlar.

Bir kaynak yöneticisi ZwRollforwardTransactionManager'ı çağırdığında, KTM günlük akışı kayıtlarını belirtilen saat değerine kadar okur ve işlem yöneticisi nesnesinin sanal saat değerini belirtilen saat değerine ayarlar.

KTM, kaynak yöneticilerinin ve üstün işlem yöneticilerinin bir işlem yöneticisi nesnesinin sanal saat değerini değiştirmesine olanak tanır, ancak genellikle saat değerini değiştirmeleri gerekmez.

Sanal Saat Değerlerini Değiştirme Zamanı

Genellikle, TPS'nizdeki bileşenler birden çok kayıt akışını eşitlemeye çalışmadığı sürece işlem sisteminizin (TPS) sanal saat değerlerini değiştirmesi gerekmez.

Örneğin, TPS'nizin önceden hazırlama/hazırlama/işleme sıraları sırasında birbirleriyle iletişim kuran birden çok kaynak yöneticisi içerdiğini varsayalım. Ayrıca her kaynak yöneticisinin benzersiz bir günlük akışına sahip bir işlem yöneticisi nesnesi oluşturduğunu varsayalım. KTM'nin kurtarma işlemi sırasında tüm kaynak yöneticilerinin durumunu aynı noktaya geri yüklediğinden emin olmak için, bu kaynak yöneticileri aşağıdaki adımları kullanabilir:

  • Bir kaynak yöneticisi başka bir kaynak yöneticisiyle iletişim kurarken, KTM'den veya başka bir kaynak yöneticisinden aldığı en son sanal saat değerini geçirir.

  • Bir kaynak yöneticisi, sanal saat değerini kabul eden bir KTM rutinini çağırdığında (bu konudaki aşağıdaki bölüme bakınız), KTM'den veya başka bir kaynak yöneticisinden aldığı en yüksek saat değerini iletir.

  • Her kaynak yöneticisi sanal saat değerlerini günlük akışına yazar ve geri alma veya kurtarma işlemleri gerçekleştirirken bu değerleri kullanır.

Bu adımlar, KTM'nin her işlem yöneticisi nesnesi için depolayan sanal saat değerlerinin neredeyse veya tam olarak eşleşmesine neden olur. Bu nedenle, bir kurtarma işlemi KTM'nin günlük akışlarını okumasına neden olduğunda veya bir geri alma işlemi kaynak yöneticilerinin günlük akışlarını okumasına neden olduğunda, kurtarma veya geri alma eşitlenmiş günlük akışlarını temel alır.

Sanal Saat Değerlerini Değiştirme

Kaynak yöneticileri, ZwPrePrepareComplete, ZwPrepareComplete, ZwCommitComplete, ZwRollbackComplete, ZwReadOnlyEnlistment veya ZwSinglePhaseReject'e yeni bir değer geçirerek sanal saat değerini değiştirebilir.

Üstün işlem yöneticileri, ZwPrePrepareEnlistment, ZwPrepareEnlistment, ZwCommitEnlistment veya ZwReadOnlyEnlistment'e yeni bir değer geçirerek sanal saat değerini değiştirebilir.

Ayrıca ResourceManagerNotification geri çağırma yordamını kullanan bir kaynak yöneticisi veya üst işlem yöneticisi, geri çağırma yordamının aldığı sanal saat değerini değiştirebilir. KTM daha sonra güncelleştirilmiş değeri kaydeder.

Kaynak yöneticisi veya üst işlem yöneticisi KTM'ye yeni bir saat değeri geçirirse, KTM yeni değeri yalnızca geçerli saat değerinden büyükse kaydeder. Aksi takdirde, KTM geçerli saat değerini korur.

Kaynak yöneticileri ve üst işlem yöneticileri , ZwQueryInformationTransactionManager yordamını çağırarak bir işlem yöneticisi nesnesinin sanal saat değerini alabilir.