XML etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster
XML etiketine sahip kayıtlar gösteriliyor. Tüm kayıtları göster

8 Ekim 2023 Pazar

Kaynak Güncellemelerinin Geri Alınması

    Bazen istemcileri bir geri alma işlevi sağlanması gerekebilir. Örneğin; bir müşteri bir teklife yakın zamanda yapılan bazı değişiklikleri geri almak isteyebilir. Bu sorun, en son anlık görüntüyü yeniden etkinleştirme yeteneği eklenmiş bir anlık görüntü almaya benzer. 

Bir müşteri bir kaynağı güncellemek için her PUT gönderdiğinde bir anlık görüntü alınır.

Geri almak için bir denetleyici kaynağı sağlanmalı. Bir değişikliği geri almak için istemcinin POST isteği göndermesine izin verin. Kaynağın geçerli durumunu denetleme aamcıyla bir işlem günlüğüne kaydedin. Sunucu kaynağın durumunu en son anlık görüntünden geri yükler ve istemciyi kaynağın URI sine yönlendirir.

Örnek tarifte anlatılmış http://wiki.example.org/trails/ColcuckLake deki bir wiki belge düşünüldüğünde Kaynağın temsilinde geri alma işlemini gerçekleştirmek için bir bağlantı ekleyin.


# Request
GET /trails/ColchuckLake HTTP/1.1 Host: wiki.example.org

# Response
HTTP/1.1 200 OK
Last-Modified: Sun, 01 Nov 2009 16:24:56 GMT
Content-Type: application/atom+xml;type=entry;charset=UTF-8

<atom:entry xmlns:atom="http://www.w3.org/2005/Atom"> <atom:author>

<atom:name>Joe Hiker</atom:name>


</atom:author>
<atom:title>Colchuck Lake</atom:title> <atom:id>urn:example:wiki:trails:ColcuckLake</atom:id>
<atom:link href="http://wiki.example.org/trails/ColchuckLake" rel="self"/> <atom:link href="http://wiki.example.org/trails/ColchuckLake/s1" rel="previous"/> <atom:link href="http://wiki.example.org/trails/ColchuckLake/undo;

t=72f2a2342ce7dc806ae7697e138bad71" rel="http://wiki.example.org/rels/undo"/>

<atom:content xml:lang="en" atom:type="html"> ... updated draft ...

</atom:content> </atom:entry>

Kaynağı mevcut durumunu geri almak için URI  bağlantısı kurulur. İsmteci bir geri alma isteği göndermek için http://wiki.example.org/rels/undo ilişiki türünde bağlantıyı kullanabilir. Bu bağlantıdaki URI bir değişikliği geri alabilen bir denetleyici kaynağıdır.

# Request

POST /trails/ColchuckLake/undo;t=72f2a2342ce7dc806ae7697e138bad71 Host: wiki.example.org
Content-Length: 0

# Response
HTTP/1.1 303 See Other
Location: http://wiki.example.org/trails/ColcuckLake

Denetleyici kaynağın mevcut durumunu geri yükler ve denetim amacıyla geri alma isteğini günlüğe kaydeder. Kaynağa yönelik sonraki bir GET isteği geri yüklenen duruma sahip olacaktır.

# Request

GET /trails/ColchuckLake HTTP/1.1 Host: wiki.example.org

# Response
HTTP/1.1 200 OK
Last-Modified: Sun, 01 Nov 2009 16:24:56 GMT
Content-Type: application/atom+xml;type=entry;charset=UTF-8

<atom:entry xmlns:atom="http://www.w3.org/2005/Atom"> <atom:author>

<atom:name>Joe Hiker</atom:name>
</atom:author>
<atom:title>Colchuck Lake</atom:title> <atom:id>urn:example:wiki:trails:ColcuckLake</atom:id>
<atom:link href="http://wiki.example.org/trails/ColchuckLake" rel="self"/> <atom:content xml:lang="en" atom:type="html">

... updated draft ... </atom:content>

</atom:entry>

Yenilemek için bu kodlama örnekler kapsamında detaylandırılıp devam edebilir.


3 Ocak 2021 Pazar

DeadLock Analiz #2



Öncelikle kilitlenme bayrağı 1222 ve xml_deadlock_report olaylarının kullanıma açıldığından emin olmamız gerekiyor.

Tek bir bağlantıda aşağıdaki komut çalıştırılabilir;

BEGIN TRAN
UPDATE Purchasing.PurchaseOrderHeader
SET Freight = Freight * 0.9 -- 10% discount on shipping
WHERE PurchaseOrderID = 1255;

ikinci bağlantıda aşağıdaki komut çalıştırılabilir.

BEGIN TRANSACTION
UPDATE Purchasing.PurchaseOrderDetail
SET OrderQty = 4
WHERE ProductID = 448
AND PurchaseOrderID = 1255;

Yukarıdaki komutlar çalıştırıldığında her biri bir işlem açar ve verileri işlemeye başlar. Ancak ne kadar zamanda işlemi yapacağını ve geri alacağını bilemiyoruz.

Birinci komuta gidip aşağıdaki işlemi çalıştırılalım;

UPDATE Purchasing.PurchaseOrderDetail
SET OrderQty = 2
WHERE ProductID = 448
AND PurchaseOrderID = 1255;

İlk bağlantı büyük ihtimalle bir kaç saniye sonra bir kilitlenme oluşacaktır. 

Msg 1205, Level 13, State 51, Line 1
Transaction (Process ID 52) was deadlocked on lock resources with another process and has been
chosen as the deadlock victim. Rerun the transaction.

Önce izleme olayı aracılıyla toplanan kilitlenme grafiğini incelememiz ardından xml_deadlock_report olay için bu pencerede verilen grafiği incelememiz gerekir. 

Ancak daha detaya inerek kilitlenme olayının tam olarak nerede olduğu hangi süreçlerin buna neden olduğu hangi nesnelerin dahil edildi bilgileri XML dosyasını doğrudan genişletilmiş olay grafiğini değerlerinden bulabiliriz.


Örnek tabloda uPurchaseOrderDetail adlı bir tetikleyici bulunuyor. Tüm bu bilgiler hangi kod parçalarının kilitlenmeye yol açtığını belirlememizde yardımcı olacaktır. Ayrıca SQL Handle  gibi bilgileri almak, DMO lar ile birlikte ifadeleri almak kilitlenme ile ilgili bilgilerde bize yardımcı olacaktır.

İzleme bayrağı 1222 tarafından toplanan veriler ile XML içerisindeki bilgiler hemen hemen aynıdır.  Ana farklılıkları biçimlendirme ve konumudur. İzleme bayrağı 1204 tarafından toplanan veriler ise tamamen farklıdır.  Kullanabiliyorsanız Genişletilmiş olayları kullanmaya devam etmeniz işinizin kolaylaşması açısında daha iyidir. 1222 takip edilmesi genellikle önerilir. system_health içinde oluşan bilgilerde size yardımcı olacaktır. 

Yukarıdaki örnekde kilitlenme Purchasing.PurchaseOrderDetail  tablosundaki bir tetikleyiciden kaynaklanmaktadır. Miktar güncellendiğinde Purchasing.PurchaseOrderDetail tablosunda Purchasing.PurchaseOrderHeader tablosu güncellemeye çalışır. İlk iki sorgu çalıştığında her biri açık bir işlem üzerinde bir engelleme durumu söz konusu olur. İkinci sorgu ilk sorgunun temizlenmesini bekler böylece Purchasing.PurchaseOrderHeader tablosunu güncelleyebilir. Sorunu çözebilmek için süreçlerden birini öldürmektir.