İşlemin tamamlanması. Banka kartı işlemi nedir. İşlemin yasaklanması. SELECT Komutu Yürütme

İşlem, tek bir varlık (ya hep ya hiç) olarak çalışan ve bir veritabanını tutarlı bir durumdan (yani, veritabanı için tanımlanan tüm bütünlük kısıtlamalarının karşılandığı bir durumdan) diğerine dönüştüren bir veri işleme ifadeleri dizisidir. . koşul. Bilgi sisteminin kullanıcısı için, ya işlemin tamamı gerçekleştirilir ya da herhangi bir nedenle işlemin eylemlerinden biri gerçekleştirilemez veya sistemde herhangi bir arıza meydana gelirse, veritabanı orijinal durumuna döner. işlemin başlamasından önce (işlem geri alınır).

İşlemler hem çok kullanıcılı hem de tek kullanıcılı sistemlerde önemlidir. Tek kullanıcılı sistemlerde işlemler, veritabanını tutarlı bir durumda bırakan mantıksal iş birimleridir. İşlemler aynı zamanda arızalardan sonra veri kurtarma birimidir - kurtarma sırasında sistem, bir yazılım veya donanım arızası sonucunda başarıyla tamamlanması için zamanı olmayan işlemlerin izlerini ortadan kaldırır. Ayrıca, çok kullanıcılı sistemlerde işlemler, bireysel kullanıcıların izole çalışmasını sağlamaya hizmet eder - aynı anda aynı veritabanıyla çalışan istemciler, tek kullanıcılı bir sistemdeymiş gibi çalışır ve birbirlerine müdahale etmezler.

İşlem özellikleri

Tüm işlemler aşağıdaki dört özelliğe sahip olmalıdır (ASID özellikleri olarak bilinir):

atomsallık İşlem, işleminin sonucunu düzeltir veya her şeyi yerine geri döndürür. İşlem başarılı olursa işlemin sonucu taahhüt edilir. Herhangi bir nedenle işlem başarısız olursa, işlemin gerçekleştirildiği nesneler orijinal durumlarına döndürülür. Örneğin, bir nesneyi yeniden adlandırmak eski adı silip yenisini ayarlamalı veya nesnenin adı değişmeden kalmalıdır.

Bu arada, atomiklik (bağımlılık) günlük hayatımızın ayrılmaz bir parçasıdır. Örneğin, bir düğün töreni sırasında bir rahip önce gelin ve damada “Bu kişiyi eşiniz olarak almak ister misiniz?” Diye sorar. Ancak hem biri hem de diğeri "Evet" cevabını verdikten sonra, rahip "Sizi karı koca ilan ediyorum" diyebilir ve böylece bir durumdan diğerine geçişi düzeltebilir. Diğer bir deyişle, bir işlem çerçevesinde, işlem sonuçlanmadan önce işlemin birkaç bağımsız tarafının tümü için ortak bir anlaşmaya varması gerekir. Taraflardan biri karşı çıkarsa, katılımcıların her biri kendi başına kalır.

Tutarlılık. İşlem, durumunu korurken sistemin doğru dönüşümüne neden olur. Örneğin, çift bağlantılı bir listeye bir öğenin işlemsel olarak eklenmesinin bir parçası olarak, bir taraftaki dört işaretçinin tümü ve diğeri aynı anda güncellenir.

İzolasyon Eşzamanlı işlemler, bekleyen işlemlerin etkisinden izole edilir. Bu özellik aynı zamanda serileştirilebilirlik olarak da adlandırılır. Örneğin, şu anda önceki bir işlem tarafından değiştirilmekte olan çift bağlantılı bir listeden geçen bir işlem, yalnızca başlatılmadan önce gerçekleşmiş olan değişiklikleri görecektir. Bu işlemin başlamasından sonra önceki işlem tarafından yapılan değişiklikler artık onu etkileyemez.

Farklı izolasyon seviyelerinde aynı anda rekabet eden işlemleri yürütme yeteneği, uygulama geliştiricilerinin sistem verimliliğini artırmasını sağlar. Daha düşük izolasyon seviyeleri, verilerin bulanık veya tutarsız hale gelmesi riski pahasına eşzamanlı işlemlerin sayısını artırma fırsatı sağlar. Bazı işlemler en yüksek izolasyon seviyesinde (saf serileştirilebilirlik) yürütülürken, daha düşük izolasyon seviyelerinde birlikte yürütülen işlemler paralel olarak çalışır ve daha önce bir işlem tarafından okunan taahhüt edilmemiş veya eski veriler üzerinde çalışabilir. Tabii ki, daha düşük izolasyon seviyelerinde çalışan işlemler, sonuç olarak yanlış veriler üretebilir. Uygulama geliştiricileri, yüksek yalıtım seviyelerindeki işlemler tarafından geçersiz veriler kullanıldığında bu tür hataların yayılmasına karşı dikkatli olmalıdır.

Dayanıklılık veya kararlılık (Dayanıklılık). İşlem başarılı olursa sonucu taahhüt edilir ve kaydedilir. Ayrıca bu durumda sistem arızası tehlikesi olsa bile sonuç korunacaktır.İşlemlerin ASID özelliklerinin her zaman tam olarak yürütülmediğine dikkat edilmelidir. Bu özellikle I (izolasyon) özelliği için geçerlidir. İdeal olarak, farklı kullanıcıların işlemleri birbirine müdahale etmemelidir, yani. kullanıcının sistemde yalnız olduğu yanılsamasına kapılacağı şekilde yapılmalıdır. Mutlak izolasyona ulaşmanın en kolay yolu, işlemleri sıraya koymak ve kesinlikle birbiri ardına yürütmektir. Açıkçası, bu sistemin verimliliğini kaybeder. Bu nedenle, gerçekte, birkaç işlem aynı anda yürütülür.

Birkaç işlem izolasyon seviyesi vardır. En düşük izolasyon seviyesinde, işlemler birbiriyle gerçekten karışabilir; en yüksek seviyede ise tamamen izole edilirler. Daha fazla işlem yalıtımı, yüksek sistem yükü ve daha yavaş performans pahasına gelir. Kullanıcılar veya sistem yöneticisi, kendi takdirlerine bağlı olarak tüm veya bireysel işlemlerin farklı seviyelerini ayarlayabilir.

Mülk D (dayanıklılık) da mutlak bir özellik değildir, çünkü bazı sistemler iç içe işlemlere izin verir. B işlemi A işlemi içinde başlatılırsa ve B işlemi için COMMIT WORK komutu verilirse, B işleminin verilerinin işlenmesi koşulludur, çünkü harici işlem A geri alabilir. Dahili işlem B'nin sonuçları, yalnızca harici işlem A taahhüt edilirse kalıcı olarak taahhüt edilecektir.

Başlangıç ​​ve bitiş

Bir işlem genellikle, kullanıcı VTYS'ye bağlandığında otomatik olarak başlar (genellikle, ancak her zaman değil: örneğin, Visual FoxPro, yeni bir işlemi başlatmak için açık bir BEGIN TRANSACTION gerektirir) ve aşağıdakilerden biri gerçekleşene kadar devam eder:

COMMIT WORK komutu verildi.

ROLLBACK WORK komutu verildi.

Kullanıcının DBMS ile bağlantısı kesildi.

Sistemde bir arıza vardı.

COMMIT WORK komutu, mevcut işlemi sonlandırır ve otomatik olarak yeni bir işlem başlatır. Bu durumda, tamamlanan işlemin sonuçlarının kaydedilmesi garanti edilir, yani. veritabanında saklanır. ROLLBACK WORK komutu, geçerli işlem tarafından yapılan tüm değişikliklerin geri alınmasına neden olur, yani. hiç yokmuş gibi iptal edilir. Bu otomatik olarak yeni bir işlem başlatır. Bir kullanıcının DBMS ile bağlantısı kesildiğinde, işlemler otomatik olarak gerçekleştirilir.

Sistem çöktüğünde daha karmaşık süreçler meydana gelir. Bunların özü, sistemin bir sonraki başlangıcında, arıza meydana gelmeden önce yapılan işlemlerin analizine dayanmaktadır. COMMIT WORK komutunun verildiği ancak sonuçları veritabanına girilmeyen işlemler yeniden yürütülür (yuvarlanır). COMMIT WORK komutunun verilmediği işlemler geri alınır.

paralel çalışma

Modern DBMS'ler çok kullanıcılı sistemlerdir, yani. çok sayıda kullanıcının paralel eşzamanlı çalışmasına izin verir. Aynı zamanda kullanıcılar birbirine müdahale etmemelidir. Çünkü kullanıcı için mantıksal iş birimi bir işlem ise, VTYS'nin çalışması, kullanıcının işlemlerinin diğer kullanıcıların işlemlerinden bağımsız olarak gerçekleştirildiği izlenimini edineceği şekilde düzenlenmelidir.

Kullanıcıya böyle bir yanılsamayı sağlamanın en basit ve en belirgin yolu, gelen tüm işlemleri tek bir sıraya dizmek ve kesinlikle sırayla yürütmektir. Bu yöntem bariz nedenlerle uygun değildir - paralel çalışmanın avantajı kaybolur. Bu nedenle, işlemlerin eşzamanlı olarak yürütülmesi gerekir, ancak sonuç, işlemler sırayla yürütülmüş gibi sonuçla aynı olmalıdır. Zorluk, herhangi bir özel önlem alınmazsa, bir kullanıcının değiştirdiği veriler, ilk kullanıcının işlemi bitmeden başka bir kullanıcının işlemiyle değiştirilebilmesidir. Sonuç olarak, işlemin sonunda ilk kullanıcı yaptığı işin sonuçlarını değil, kim bilir ne olduğunu görecektir.

Farklı kullanıcıların işlemleri birbirine nasıl müdahale edebilir? Üç ana eşzamanlılık sorunu vardır:

Güncelleme sonuçlarını kaybetme sorunu.

Taahhüt edilmemiş bağımlılık sorunu ("kirli" verileri okuma, özensiz okuma).

Uyumsuz analiz sorunu.

Birden çok işlemin bağımsız paralel çalışmasını sağlamanın yollarından biri de kilitleme yöntemidir.

Üç eşzamanlılık sorununa ek olarak, eşzamanlı erişim çakışmaları arasında ayrım yapmak yaygındır. İşlemler, zaman içinde çakışıyorsa ve aynı verilere erişiyorsa eşzamanlı olarak adlandırılır. İşlemler arasındaki veri çekişmesinin bir sonucu olarak, veri erişim çakışmaları ortaya çıkar:

W-W (Kayıt - Kayıt). İlk işlem nesneyi değiştirdi ve bitmedi. İkinci işlem bu nesneyi değiştirmeye çalışır. Sonuç, güncelleme kaybıdır.

R-W (Okuma - Yazma). İlk işlem nesneyi okudu ve tamamlanmadı. İkinci işlem bu nesneyi değiştirmeye çalışır. Sonuç, uyumsuz bir analizdir (tekrarlanamayan okuma).

W-R (Yaz - Oku). İlk işlem nesneyi değiştirdi ve bitmedi. İkinci işlem bu nesneyi okumaya çalışır. Sonuç kirli verileri okumaktır.

R-R (Okuma - Okuma) çakışması yok çünkü veriler okuma sırasında değişmez.

Diğer eşzamanlılık sorunları daha karmaşıktır çünkü temel farkları, tek bir nesneyle çalışırken ortaya çıkmamalarıdır. Bu sorunlar, işlemlerin tüm veri kümelerinde çalışmasını gerektirir.

Sorun Giderme: Bloklar

Kilitlerin ana fikri, belirli bir işlemi gerçekleştirmek için, bu işlem bilgisi olmadan bir nesnenin değişmemesi gerekiyorsa, bu nesnenin kilitlenmesi gerektiğidir, yani. diğer işlemlerden bu nesneye erişim, kilitlenmeye neden olan işlemin süresi boyunca sınırlıdır.

Özel kilitler (X kilitleri, özel kilitler) - karşılıklı erişimi olmayan kilitler (yazma kilidi). Buna karşılık, Paylaşılan kilitler (S-kilitleri) karşılıklı erişim kilitleridir (okuma kilitleri). A işlemi bir nesneyi bir X-kilidi ile kilitlerse, o nesneye diğer işlemler tarafından herhangi bir erişim reddedilir. A işlemi bir nesneyi S-kilidi kullanarak kilitlerse, bu nesne üzerindeki diğer işlemlerden gelen X-kilidi talepleri reddedilir, diğer işlemlerden bu nesne üzerinde bir S-kilidi talepleri kabul edilir.

Çıkmaz sokaklar

Kilitli işlemlerle çalışırken bir kilitlenme durumu ortaya çıkabilir, yani. her iki işlemin de birbirini beklediği ve devam edemediği bir durum. Çıkmazdan "normal" (otomatik) bir çıkış yolu olmadığı açıktır, bu nedenle böyle bir durum tanınmalı ve ortadan kaldırılmalıdır. Kilitlenme çözümleme yöntemi, işlemlerden birini (kurban işlemi) geri almaktır, böylece diğer işlemler çalışmaya devam eder. Kilitlenme giderildikten sonra, mağdur olarak seçilen işlem tekrar tekrar edilebilir.

Kilitlenme tespiti ve kurban işlem seçimi için iki temel yaklaşım vardır: DBMS kilitlenmeleri izlemez. İşlemlerin kendileri mağdur olup olmayacağına karar verir. Bu yaklaşım, sözde masaüstü DBMS (FoxPro, vb.) için tipiktir. Bu yöntem daha basittir ve ek sistem kaynakları gerektirmez. İşlemler için, işlemin istenen kilidi almaya çalıştığı zaman aşımını (veya deneme sayısını) belirtirsiniz. Kilit, belirtilen süre içinde (veya belirtilen sayıda denemeden sonra) başarıyla tamamlanmazsa, işlem geri alınır (veya bir hata koşulu oluşturulur). Bu yöntemin basitliğinin bedeli, kurban işlemlerinin genel olarak rastgele seçilmesidir. Sonuç olarak, basit bir işlem nedeniyle, yürütülmesi için çok fazla zaman ve sistem kaynağı harcanmış olan çok pahalı bir işlem geri alınabilir.

Kilitlenme algılamaya yönelik ikinci yaklaşım, DBMS'nin kendisinin bir kilitlenme oluşumunu izlemesi ve ayrıca hangi işlemin feda edileceğine karar vermesidir. Bu yöntem endüstriyel DBMS (ORACLE, MS SQL Server, vb.) için tipiktir. Bu durumda, sistemin kendisi, bir işlem bekleyen grafiği (iki tür düğümün - işlemlere karşılık gelen düğümler ve yakalama nesnelerine karşılık gelen düğümler) olduğu yönlendirilmiş iki taraflı bir grafik oluşturarak (veya sürekli koruyarak) bir kilitlenme durumunun oluşumunu izler. . Kilitlenme, işlem bekleyen grafiğinde en az bir döngü olduğunda oluşur. Döngüde yakalanan işlemlerden birinin geri alınması gerekir ve sistemin kendisi bu işlemi bazı maliyet hususlarına göre (örneğin en kısa veya en düşük öncelikli vb.) seçebilir.

Endüstriyel uygulamalardaki işlemler

İşlem, endüstriyel ölçekte bir uygulama oluşturmak için kritik bir kavramdır. Daha önce de belirtildiği gibi, kullanıcı için bir işlem, bir eylemin gerçekleştiğinin veya gerçekleşmediğinin bir işaretidir. Öte yandan, bir geliştirici için işlem, dağıtılmış bilgi işlemde yer alabilecek bağımsız modüller oluşturmasına izin veren bir programlama stilidir. Örneğin, bir müşterinin tasarruf hesabındaki paranın bir kısmını çek hesabına aktarması gerekir. Bu işlem için en önemli nokta, başarılı bir işlem olması durumunda her iki hesabın durumunun aynı anda değişmesi veya para transferinin başarısız olması durumunda hesapların durumunun aynı şekilde korunması olacaktır. Para bir hesaptan çıkıp diğerine ulaşmadığında hoşlanmanız pek olası değildir. Ve bu durum, bu amaca yönelik uygulamalar için apaçık bir gereklilik olmasına rağmen, bu işlemi dağıtık sistemlerde herhangi bir yönetim ve işlemler üzerinde kontrol olmaksızın gerçekleştirmek oldukça sorunlu görünmektedir - bilgisayarlar arızalanabilir ve mesaj bir yerde kaybolabilir.

İşlemler, dağıtılmış uygulamaların belkemiğidir. Ayrıca, programlamada bileşen teknolojisinin özü olan modüler program yürütmeyi sağlayan işlemlerdir.

E-ticaret: işlemlerin güvence altına alınması

Ödeme sistemlerinde nakitsiz işlemlere işlem denir. Ödeme sistemleri, çeşitli türlerdeki işlemleri destekler: satın alma, banka şubesinden nakit çekme, ATM'den nakit çekme, müşterinin hesabındaki bakiye hakkında bilgi edinme ve diğerleri.

İşlemler, kart bilgilerinin ödeme sistemine sunulma biçiminde de farklılık gösterir. Elektronik işlemler (karta ait bilgiler manyetik şerit/çipten okunur) ve sesli yetkilendirme işlemleri (kağıt bazlı) vardır.

Tipik olarak, çevrimiçi alışveriş süreci aşağıdaki gibidir. Müşteri, internete bağlı bir kişisel bilgisayar (veya başka bir cihaz) kullanarak, satış noktasının web sitesindeki ürünlerin sanal vitrininde ilgilenilen ürünleri seçer. Mal seçimini onayladıktan ve maliyetleriyle anlaşmayı onayladıktan sonra, müşteri, plastik bir kart kullanarak satın alma için ödeme yapma arzusu hakkında çıkışa bilgi verir.

Daha sonra, çıkış noktası ve kart sahibi arasında, alıcının kart bilgilerini standart bir yetkilendirme talebi şeklinde ağa sunmaları için almak olan bir diyalog vardır. Bu diyalog sırasında, tüccar ve alıcı bazen birbirlerinin kimliğini doğrulama fırsatına sahip olur, bu da işlemin güvenliğini sağlar. E-ticaretin ilk günlerinden itibaren geleneksel işlemlerde kullanılan kart sahibi belirleme yöntemlerinin e-ticaret işlemleri için yetersiz olduğu ortaya çıkmıştır.

Gerçekten de, fiziksel bir mağazada bir satın alma işlemi yaparken, satıcı, hesaplama için sunulan plastik kartı ödeme sistemlerinin gereksinimlerine uygunluğunu inceleme hakkına sahiptir (özellikle, bir hologramın, özel gizli sembollerin varlığını kontrol edin, doğrulayın). panodaki imzalar ve satış fişi vb.) ... Ayrıca satıcı, alıcıdan bir kimlik belgesi sunmasını isteyebilir. Bütün bunlar, sahte kart dolandırıcılığını pahalı bir girişim haline getirir. Bir e-ticaret işlemi durumunda, dolandırıcıdan istenen tek şey kart detaylarını bilmektir. Bu durumda sahte bir fiziksel kartın üretilmesiyle ilgili maliyetler gerekli değildir.

Manyetik şeritli plastik kartlar için, bir işlemi dolandırıcılıktan korumanın en güvenilir yolu, kartı veren banka tarafından kart sahibini tanımlamak için bir PIN kodu kullanmaktır. Kart sahibinin sahip olduğu gizli bilgi PIN kodudur. Yalnızca kart sahibi ve kartı veren banka tarafından bilinen 4-12 haneli bir dizidir. PIN kodu, örneğin ATM'lerde kart sahibine nakit para gönderirken, yüksek riskli bir işlem gerçekleştirirken her zaman kullanılır. ATM'lerde nakit çekme, hizmet veren bankanın bir temsilcisi olmadan gerçekleşir (durum bir e-ticaret işlemine benzer). Bu nedenle, "ATM'de para çekme" işlemini korumak için olağan kart bilgileri yeterli değildir ve gizli ek bilgiler kullanılır - PIN kodu.

Böyle bir tanımlayıcının kullanılması güvenlik sorununun çözülmesine yardımcı olabilir gibi görünüyor, ancak durum böyle değil. Ne yazık ki e-ticaret uygulamasında bu yöntem klasik haliyle uygulanamamaktadır.

PIN kodunun kullanımı, bu gizli parametre işlemin tüm aşamalarında şifreli kalacak şekilde yapılmalıdır (sadece kart sahibi ve banka tarafından bilinmelidir).

Klasik şema, kart sahibinin PIN kodunun tüccarın açık anahtarı ile şifrelenmesi ile asimetrik algoritmalar kullanılarak uygulanabilir. Ancak PIN kodunun ödeme ağına sunulabilmesi için tüm ödeme sistemlerinde olduğu gibi simetrik bir anahtarla şifrelenmesi gerekir.

PIN kodu kullanmak için klasik olmayan başka bir çözüm daha var. Örneğin, kart sahibinin bilgisayarında PIN kodunu ve ayrıca işlemden işleme dinamik olarak değişen bazı verileri yalnızca kart sahibi ve kart sahibi tarafından bilinen bir anahtar üzerinde şifrelemek mümkündür. Bu yaklaşım, gizli anahtar dağıtımı sorununun çözülmesini gerektirecektir. Bu görev çok zordur (her kart sahibinin kendi bireysel anahtarına sahip olması gerektiği açıktır) ve zaten çözülüyorsa, çözümünü kart sahibinin kontrol etmekten daha etkili olan diğer kimlik doğrulama yöntemleri için kullanmak mantıklıdır. PIN kodu.

Analizin bir sonucu olarak, ödeme sistemleri, gerekli güvenlik seviyesini sağlayan e-ticarette bir işlem gerçekleştirme şemaları için temel gereksinimleri "oluşturmuştur":

1. Satın alma katılımcılarının doğrulanması (alıcı, perakende satış noktası ve hizmet bankası). Bir alıcının (satıcının) doğrulanması, belirli bir kart sahibinin gerçekten bu ödeme sisteminin belirli bir ihraççı-katılımcısının (hizmet veren banka-katılımcısının) müşterisi olduğunu (bilinen kripto algoritmalarının güvenilirlik düzeyinde) kanıtlayan bir prosedür anlamına gelir. Hizmet veren bankanın kimlik doğrulaması, bankanın bu ödeme sistemine üye olduğunu kanıtlamaktadır.

2. İşlemde kullanılan ödeme kartının detayları (kart numarası, son kullanma tarihi, CVC2 / CVV2 vb.) üye işyeri için gizli olmalıdır.

3. İşlemdeki tüm katılımcılar için işlemi iptal etmenin imkansızlığı, yani tüm katılımcıların satın alma (sipariş veya ödeme) yaptıklarına dair tartışılmaz bir kanıtı vardır.

4. Elektronik satın alma için satıcıya ödeme garantisi - tüccarın siparişin tamamlandığına dair kanıtı vardır.

InterBase'deki İşlemler

Son olarak, işlemlerin yaşadığı iki ortamı ele alacağım. Yani, InterBase'deki işlemlerin uygulanması ve Enterprise JavaBeans teknolojisinin "Java İşlem Hizmeti" hakkında.

InterBase'de işlemleri yönetmek için üç ifade vardır:

SET TRANSACTION - Bir işlemi başlatır ve davranışını tanımlar.

COMMIT - İşlem tarafından yapılan değişiklikleri veritabanına kaydeder ve işlemi sonlandırır.

ROLLBACK - İşlem tarafından yapılan değişiklikleri geri alır ve işlemi sonlandırır.

1. Bir işlem başlatmak

Bir işlemi başlatmak için aşağıdaki SQL komutunu çalıştırmanız gerekir:

İŞLEM AYARLA

"İŞLEM AYARLA" ifadesi
ifadeye eşdeğerdir
"İŞLEM OKU YAZ BEKLE İZOLASYON SEVİYESİ ANLIK GÖRÜNTÜ AYARLA"

Erişim Modu - veri erişiminin türünü tanımlar. İki değer alabilir:

SADECE OKUYUN - işlemin yalnızca verileri okuyabildiğini ve değiştiremeyeceğini belirtir.

READ WRITE - işlemin verileri okuyabildiğini ve değiştirebildiğini gösterir. Bu varsayılandır.

İzolasyon Düzeyi - bu işlemin bu veritabanındaki diğer kişilerle etkileşim sırasını belirler. Değerler alabilir:

ANLIK GÖRÜNTÜ varsayılandır. İşlem içinde, veriler işlem başlangıcında olduğu durumda mevcut olacaktır. Bu arada, tamamlanan diğer işlemler tarafından yapılan değişiklikler veritabanında görünürse, bu işlem bunları görmeyecektir. Bu tür kayıtları değiştirmeye çalışırsanız, bir çakışma mesajı görünecektir.

SNAPSHOT TABLE STABILITY - İşleme, kullandığı tablolara özel erişim izni verir. Diğer işlemler yalnızca onlardan veri okuyabilir.

READ COMMITTED - bir işlemin veritabanının mevcut durumunu görmesine izin verir.

Kayıt kilitleme çakışmaları iki durumda ortaya çıkar:

İşlem, başlatıldıktan sonra değiştirilen veya silinen bir kaydı değiştirmeye çalışıyor. READ COMMITTED işlemi, tamamlandıktan sonra diğer işlemler tarafından değiştirilen kayıtlarda değişiklik yapabilir.

İşlem, SNAPSHOT TABLE STABILITY türünde başka bir işlem tarafından kilitlenen bir tabloyu güncellemeye çalışıyor.

Kilit Çözünürlüğü - Bir kilit çakışması algılandığında olayların gidişatını belirler. İki değer alabilir:

WAIT varsayılandır. Gerekli girişin kilidinin açılması bekleniyor. Bundan sonra çalışmaya devam etmeye çalışır.

NO WAIT - Hemen bir yazma kilidi hatası verir.

Tablo Rezervasyonu - bir işlemin, belirtilen tablolara gerekli düzeyde garantili erişim elde etmesini sağlar. Dört erişim düzeyi vardır:

KORUMA OKUMA - Diğer işlemlerin tabloyu güncellemesini engeller, ancak tablodan veri almalarına izin verir.

KORUMALI YAZMA - tablonun diğer işlemler tarafından güncellenmesini yasaklar, yalnızca SNAPSHOT veya READ COMMITTED işlemleri tablodan veri okuyabilir.

PAYLAŞIMLI OKUMA en liberal düzeydir. Herkes okuyabilir, değiştirebilir - OKUYUN YAZMA işlemlerini.

PAYLAŞILAN YAZMA - ANLIK GÖRÜNTÜ veya OKUMA YAPILMIŞ OKUMA YAZMA işlemleri tabloyu değiştirebilir, geri kalanı sadece veri getirebilir.

2. İşlemin tamamlanması

Bir işlemi oluşturan tüm eylemler başarıyla tamamlandığında veya bir hata oluştuğunda, veritabanının tutarlı bir durumda olması için işlemin tamamlanması gerekir. Bunun için SQL ifadeleri var:

COMMIT - işlem tarafından yapılan değişiklikleri veritabanına kaydeder. Bu, işlemin başarıyla tamamlandığı anlamına gelir.

ROLLBACK - işlemin geri alınması. İşlem sona erer ve veritabanında herhangi bir değişiklik yapılmaz. Bu işlem, işlem sırasında bir hata oluştuğunda (örneğin, bir kaydı güncellemenin imkansız olduğu durumlarda) gerçekleştirilir.

Java İşlem Hizmeti

EJB (Server Bean Technology, Enterprise JavaBeans) mimarisi, işlem koordinatörü olarak Java İşlem Hizmetini (JTS) kullanır. JTS terminolojisinde bu koordinatör, işlem yöneticisi olarak anılır. İlişkisel veritabanları gibi işlem korumalı kaynakları uygulayan bir işlemdeki katılımcılara kaynak yöneticileri denir. Bir uygulama bir işlem başlattığında, bu işlemi temsil eden bir nesne oluşturur. Uygulama daha sonra işlemi gerçekleştirmek için kaynak yöneticilerini çağırır. Bir işlemin yürütülmesi sırasında, işlem yöneticilerinin her biri, işlemde belirtilen kaynak yöneticilerinin her birinin çalışmasını izler.

Uygulamanın kaynak yöneticilerinin her birine yaptığı ilk çağrı, mevcut işlemi belirler. Örneğin, bir uygulama ilişkisel bir veritabanı kullanıyorsa, işlem nesnesini veritabanıyla ilişkilendiren Java Veritabanı Bağlantısı (JDBC) arabirimini çağırır. Şu andan itibaren, bu bağlantı üzerinden yapılan tüm aramalar, işlem tamamlanana kadar veritabanının işlemi adına yapılacaktır.

Uygulama, xa_commit() yöntemini çağırarak işlemin sonucunu taahhüt eder ve işlemin başarıyla tamamlandığını bildirir. Uygulama herhangi bir nedenle işlemi tamamlayamazsa, yapılan değişiklikleri geri almak için xa_rollback() yöntemini çağırır. Uygulamanın işlemi tamamlayamaması durumunda JTS görevi bırakır. İşlem işlemi başarılı olduğunda, uygulama sonucu depolamak için JTS'yi çağırır. JTS daha sonra işi işlemde belirtilen kaynak yöneticilerine göndermek için iki aşamalı bir tamamlama protokolünden geçer.

İki aşamalı kesinleştirme protokolü, bir işlemin sonucunun kaydedilmesini veya bir işin iptal edilmesini sağlamak için kullanılır. İlk aşamada, OTS, kaynak yöneticilerinin her birinin hazır olup olmadığını belirler. Her biri hazır olduğunu onaylarsa, ikinci aşamada JTS her birine sonucu belirten bir mesaj gönderir. Yöneticilerden herhangi birinin talebe yanıt vermemesi veya olumsuz yanıt vermesi durumunda JTS, işlemin iptal edildiğini diğer yöneticilere bildirir.


İşlemin yapısı, işlem içindeki eşzamanlılık, süre vb. dahil olmak üzere çeşitli özelliklere göre sınıflandırılabilecek çeşitli işlem modelleri vardır.

Şu anda, aşağıdaki işlem türleri ayırt edilir: düz veya klasik işlemler, zincirleme işlemler ve iç içe işlemler.

Düz veya geleneksel işlemler dört klasik özellikle karakterize edilir: atomiklik, tutarlılık, izolasyon, dayanıklılık (kuvvet) - ACID (Atomisite, Tutarlılık, İzolasyon, Dayanıklılık). Geleneksel işlemlere bazen ACID işlemleri denir. Yukarıda belirtilen özellikler şu anlama gelir:

· atom özelliği(Atomisite) işlemin bir bütün olarak tamamlanması veya hiç yapılmaması ile ifade edilir.

· tutarlılık özelliği(Tutarlılık), işlemler ilerledikçe, verilerin bir tutarlı durumdan diğerine geçişini sağlar - işlem, verilerin karşılıklı tutarlılığını bozmaz.

· izolasyon özelliği(İzolasyon), veritabanına erişim için rekabet eden işlemlerin fiziksel olarak sırayla, birbirinden ayrı olarak işlendiği, ancak kullanıcılara paralel olarak yürütülüyormuş gibi göründüğü anlamına gelir.

· Dayanıklılık özelliği(Dayanıklılık) şu şekilde yorumlanır: İşlem başarılı bir şekilde tamamlanırsa, verilerde yaptığı değişiklikler hiçbir koşulda (sonraki hatalar durumunda bile) kaybolmaz.

Bir işlemi tamamlamak için iki seçenek vardır. Tüm ifadeler başarılıysa ve işlem sırasında herhangi bir donanım veya yazılım hatası oluşmadıysa işlem tamamlanmış olur.

Bir işlemin gerçekleştirilmesi, bir işlemin yürütülmesi sırasında veritabanında yapılan değişiklikleri diske yazma eylemidir.

İşlem tamamlanana kadar, bu değişiklikleri geri almak, veri tabanını işlemin başladığı zamanki durumuna geri yüklemek mümkündür. Bir işlemin gerçekleştirilmesi, işlemin tüm sonuçlarının kalıcı olduğu anlamına gelir. Yalnızca mevcut işlem gerçekleştirildikten sonra diğer işlemlerde görünür hale gelirler. Bu noktaya kadar, işlemden etkilenen tüm veriler, mevcut işlemin başlangıcındaki durumda kullanıcıya "görünür" olacaktır.

Bir işlemin yürütülmesi sırasında normal olarak tamamlanmasını imkansız kılan bir şey olursa, veritabanı orijinal durumuna döndürülmelidir. İşlem geri alma, SQL deyimleri tarafından yapılan tüm veri değişikliklerini mevcut bekleyen işlemin gövdesine geri alan eylemdir.

Bir işlemdeki her deyim işin kendi bölümünü yapar, ancak tüm çalışmanın başarıyla tamamlanması için tüm deyimlerinin koşulsuz olarak tamamlanması gerekir. Bir işlemdeki ifadelerin gruplandırılması, DBMS'ye tüm grubun bir bütün olarak yürütülmesi gerektiğini ve bu yürütmenin otomatik olarak desteklenmesi gerektiğini söyler.

ANSI / ISO SQL standardı, işlem modelini ve COMMIT ve ROLLBACK ifadelerinin işlevlerini tanımlar. Standart, bir işlemin, kullanıcı tarafından başlatılan veya bir programda yer alan ve veritabanının mevcut durumunu değiştiren ilk SQL ifadesiyle başladığını belirtir. Sonraki tüm SQL ifadeleri işlemin gövdesini oluşturur. İşlem dört olası yoldan biriyle sona erer (Şekil 11.1):

1. COMMIT ifadesi, işlemin başarıyla tamamlandığı anlamına gelir; onu kullanmak, mevcut işlem içinde veritabanında yapılan değişiklikleri kalıcı hale getirir;

2. ROLLBACK ifadesi, bu işlemin bir parçası olarak veritabanında yapılan değişiklikleri iptal ederek işlemi iptal eder; ROLLBACK kullanıldıktan hemen sonra yeni bir işlem başlar;

3. Cari işlemin başlatıldığı programın başarıyla tamamlanması, işlemin başarıyla tamamlandığı anlamına gelir (Sanki COMMIT deyimi kullanılmış gibi);

4. Hatalı program sonlandırma işlemi iptal eder (ROLLBACK ifadesi kullanılmış gibi).

Bu modelde, veritabanının durumunu değiştiren her ifade bir işlem olarak kabul edilir, bu nedenle, bu ifadenin başarıyla tamamlanmasının ardından veritabanı yeni bir kararlı duruma girer.

Ticari VTYS'lerin ilk sürümleri ANSI / ISO işlem modelini uyguladı. Daha sonra, bir dizi ek işlemi içeren SYBASE DBMS'de genişletilmiş bir işlem modeli uygulandı. SYBASE modeli aşağıdaki dört operatörü kullanır:

· BEGIN TRANSACTION ifadesi, bir işlemin başladığını belirtir. Bir işlemin başlangıcının ilk veri değiştirme ifadesi tarafından örtük olarak belirtildiği ANSI / ISO modelinden farklı olarak, SYBASE modelinde, bir işlemin başlangıcı, işlem başlangıcı ifadesi kullanılarak açıkça belirtilir.

· COMMIT TRANSACTION bildirimi, işlemin başarıyla tamamlandığını bildirir. ANSI/ISO standart modelindeki COMMIT deyimine eşdeğerdir. Bu operatör, COMMIT operatörü gibi, işlemin yürütülmesi sırasında veritabanında yapılan tüm değişiklikleri taahhüt eder.

· SAVE TRANSACTION ifadesi, bu ifadenin yürütülmesi sırasında kaydedilen veritabanının ara durumuna karşılık gelen işlem içinde bir kayıt noktası oluşturur. SAVE TRANSACTION ifadesi, kaydetme noktasının adını içerebilir. Bu nedenle, bir işlemin yürütülmesi sırasında, birkaç ara duruma karşılık gelen birkaç kayıt noktası saklanabilir.

· ROLLBACK operatörünün iki modifikasyonu vardır. Bu deyim ek bir parametre olmadan kullanılırsa tüm işlem için geri alma deyimi olarak yorumlanır, yani bu durumda ANSI/ISO modelindeki ROLLBACK deyimine eşdeğerdir. Geri alma ifadesinin bir parametresi varsa ve ROLLBACK B olarak yazılmışsa, bu durumda, kayıt noktası B'ye kısmi bir işlem geri alma ifadesi olarak yorumlanır.

Pirinç. 11.1.ANSI / ISO İşlem Modeli

Genişletilmiş işlem modelinde işlem gerçekleştirme ilkeleri Şekil 2'de gösterilmektedir. 11.2. Şekilde, operatörler sayılarla işaretlenmiştir, böylece izin verilen tüm durumlarda işlemin ilerlemesini izlememiz daha kolay olur.

Pirinç. 11.2.Genişletilmiş modelde işlem yürütme örnekleri

İşlem, şemamızda 1 numaralı olan işlemin başlangıcının açık bir operatörü ile başlar, ardından bir arama operatörü olan ve veritabanının mevcut durumunu değiştirmeyen operatör 2 ve aşağıdaki operatörler 3 ve 4 gelir. veritabanını yeni bir duruma aktarın. İfade 5, veritabanının bu yeni ara durumunu kaydeder ve onu A noktasında bir ara durum olarak işaretler. Ardından, veritabanını yeni bir duruma aktaran 6 ve 7 numaralı ifadeler gelir. Ve operatör 8 bu durumu B noktasında bir ara durum olarak kaydeder. Operatör 9 yeni veri girişi gerçekleştirir ve operatör 10 durum 1'in bazı kontrollerini gerçekleştirir; 1. koşul yerine getirilirse, işlemi B ara durumuna geri döndüren 11. ifade yürütülür. Bu, 9. ifadenin eylemlerinin sonuçlarının olduğu gibi silindiği ve veritabanının B ara durumuna geri döndüğü anlamına gelir. , ancak 9. ifadenin yürütülmesinden sonra zaten yeni bir durumdaydı. Ve işlem geri alma işleminden sonra, durumdan daha önce yürütülen ifade 9 yerine, veritabanında, yeni veri girme ifadesi 13 yürütülür ve ardından kontrol, ifade 14'e aktarılır. İfade 14, durumu tekrar kontrol eder, ancak zaten bazı yeni durum 2; koşul karşılanırsa, kontrol, işlemi A ara durumuna geri alan, yani 6'dan başlayıp 13 ile biten veritabanını değiştiren tüm operatörler yerine getirilmemiş olarak kabul edilen operatör 15'e aktarılır. , yürütme sonuçları ortadan kayboldu ve tekrar durumdayız Ve, operatör 4'ü yürüttükten sonra olduğu gibi, sonra, kontrol, veritabanının içeriğini güncelleyen operatör 17'ye aktarılır, ardından kontrol operatör 18'e aktarılır, bu da kontrol koşulu 3 ile ilişkilidir. Kontrol ya işlemi gerçekleştiren operatör 20'ye kontrolü transfer ederek sona erer ve veri tabanı yeni bir sabit duruma geçer ve mevcut işlem içinde bunu değiştirmek imkansızdır. Veya kontrol, operatör 19'a aktarılırsa, işlem başa döndürülür ve veritabanı ilk durumuna döner ve tüm ara durumlar zaten burada kontrol edilmiştir ve bu aralara geri alma işlemi yapılması imkansızdır. operatör 19'u yürüttükten sonra durumlar.

Elbette, SYBASE'in genişletilmiş işlem modeli, çok daha esnek bir işlem yürütme mekanizmasını destekler. Kayıt noktaları, işlemde yapılan işin yalnızca bir kısmının geri alınabilmesi için işaretçilerin bir işlem içinde ayarlanmasına izin verir. Belirli ifadelerin geri alınabilmesini sağlamak için uzun ve karmaşık işlemlerde kayıt noktalarının kullanılması tavsiye edilir. Ancak bu, sistem kaynaklarının ek maliyetlerine yol açar - işi operatör yapar ve değişiklikler daha sonra iptal edilir; genellikle işleme mantığındaki iyileştirmeler daha iyi bir çözüm olabilir.

İşlem günlüğü

Ara durumların korunması, bir işlemin onaylanması veya geri alınması ilkesinin DBMS'de uygulanması, belirli bir sistem yapısının oluşturulmasını desteklemek için özel bir mekanizma tarafından sağlanır. İşlem günlüğü.

Ancak, işlem günlüğünün amacı çok daha geniştir. Veritabanında güvenilir veri depolama sağlamak için tasarlanmıştır.

Ve bu gereksinim, özellikle, her türlü donanım ve yazılım arızasından sonra veritabanının tutarlı durumunu geri yükleme yeteneği anlamına gelir. Açıkçası, restorasyonları gerçekleştirmek için bazı ek bilgilere ihtiyaç vardır. Modern ilişkisel VTYS'lerin büyük çoğunluğunda, bu tür fazladan ek bilgiler, çoğunlukla adlandırılan bir veritabanı değişiklik günlüğü biçiminde tutulur. İşlem günlüğü.

Bu nedenle, veritabanı değişikliklerini günlüğe kaydetmenin genel amacı, herhangi bir hatadan sonra veritabanının tutarlı bir duruma geri yüklenebilmesini sağlamaktır. Bir veritabanının tutarlı durumunu korumanın temeli işlem mekanizması olduğundan, günlüğe kaydetme ve kurtarma işlem kavramıyla yakından ilişkilidir. Genel kurtarma ilkeleri aşağıdaki gibidir:

· Taahhüt edilen işlemlerin sonuçları, veritabanının geri yüklenen durumunda kaydedilmelidir;

· Taahhüt edilmemiş işlemlerin sonuçları, veritabanının geri yüklenen durumunda mevcut olmamalıdır.

Bu, aslında, veritabanının en son tutarlı durumunun geri yüklendiği anlamına gelir.

Veritabanının durumunu geri yüklemeniz gereken aşağıdaki durumlar mümkündür.

· İşlemin bireysel geri alınması. Bu geri alma aşağıdaki durumlarda uygulanmalıdır:

o bir işlemin geri alınması için standart durum, bir ROLLBACK deyimi ile açıkça tamamlanmasıdır;

o mantıksal olarak ROLLBACK ifadesinin yürütülmesine eşdeğer olan, ancak fiziksel olarak farklı bir yürütme mekanizmasına sahip olan uygulama programının anormal sonlandırılması;

o işlemlerin paralel yürütülmesinde bir kilitlenme olması durumunda bir işlemin zorla geri alınması. Böyle bir durumda, kilitlenmeyi kırmak için, bu işlem bir "kurban" olarak seçilebilir ve DBMS çekirdeği tarafından yürütülmesi zorla durdurulur.

· RAM içeriğinin ani kaybından sonra kurtarma (yumuşak arıza). Bu durum aşağıdaki durumlarda ortaya çıkabilir:

o güç kaynağının acil olarak kapatılması durumunda;

o Kurtarılamaz bir işlemci arızası (örneğin, RAM kontrolünün çalışması) vb. durumunda. Bu durum, arıza anında RAM arabelleklerinde bulunan veritabanı bölümünün kaybı ile karakterize edilir.

· Ana harici veritabanı ortamının bozulmasından sonra kurtarma (zor arıza). Modern harici bellek cihazlarının yeterince yüksek güvenilirliği göz önüne alındığında, bu durum nispeten nadiren meydana gelebilir, ancak yine de DBMS bu durumda bile veritabanını geri yükleyebilmelidir. Kurtarmanın temeli, arşiv kopyası ve veritabanı değişiklik günlüğüdür.

Bir işlemi tek tek geri aldığınızda veritabanının tutarlı bir durumunu geri yüklemek için, o işlemde yürütülen veritabanı değişiklik ifadelerinin etkilerini ortadan kaldırmanız gerekir. Yumuşak bir arıza durumunda veritabanının tutarlı bir durumunu geri yüklemek için, disklerde depolanan işlem günlüklerinin içeriklerinden veritabanının içeriğini geri yüklemek gerekir. Sabit bir arıza durumunda veritabanının tutarlı bir durumunu geri yüklemek için, hasarsız harici ortamda saklanan arşiv kopyaları ve işlem günlükleri kullanılarak veritabanının içeriğinin geri yüklenmesi gerekir.

Her üç durumda da, yedekli veri depolama, kurtarmanın temelidir. Bu gereksiz veriler, bir dizi veritabanı değişiklik kaydı içeren bir günlükte depolanır.

Günlük bilgilerini korumak için iki ana seçenek vardır. İlk seçenekte, o işlem tarafından her işlem için ayrı bir yerel veritabanı değişiklik günlüğü tutulur. Bu günlüklere yerel günlükler denir. İşlemlerin ayrı ayrı geri alınması için kullanılırlar ve RAM'de (daha doğrusu sanal) bellekte tutulabilirler. Ek olarak, yazılım ve donanım arızalarından sonra veritabanının durumunu kurtarmak için kullanılan genel bir veritabanı değişiklik günlüğü tutulur.

Bu yaklaşım, bireysel işlem geri alma işlemlerini hızlı bir şekilde gerçekleştirmenize olanak tanır, ancak yerel ve paylaşılan günlüklerde yinelenen bilgilerle sonuçlanır. Bu nedenle, ikinci seçenek daha sık kullanılır - yalnızca bireysel geri alma işlemleri yapılırken de kullanılan genel bir veritabanı değişiklik günlüğünün tutulması. Ardından, bu özel seçeneği ele alıyoruz.

Günlüğün genel yapısı, bir işlemin yürütülmesi sırasında veritabanında meydana gelen her değişikliğin kaydedildiği sıralı bir dosya biçiminde koşullu olarak temsil edilebilir. Tüm işlemlerin kendi dahili numaraları vardır, bu nedenle tüm işlemlerde yapılan tüm değişiklikler tek bir işlem günlüğüne kaydedilir.

İşlem günlüğündeki her giriş, ait olduğu işlemin numarası ve değiştirdiği niteliklerin değerleri ile işaretlenir. Ayrıca her işlem için işlemi başlatma ve bitirme komutu loga kaydedilir (bkz. Şekil 11.3).

Daha fazla güvenilirlik için, işlem günlüğü genellikle ticari VTYS'nin sistem araçları tarafından çoğaltılır, bu nedenle harici bellek miktarı, depoda depolanan gerçek veri miktarından birçok kat daha fazladır.

İşlem günlüğü için iki alternatif vardır: ertelenmiş güncelleme protokolü ve anında güncelleme protokolü.

Bekleyen değişiklik günlüğü, işlemleri yürütmek için aşağıdaki mekanizmayı varsayar:

1. T1 işlemi başladığında protokole bir kayıt girilir

<Т1 Begin transaction>

2. İşlemin yürütülmesi sırasında, değiştirilen her kayıt için protokole yeni bir değer kaydedilir: ... Burada ID_RECORD benzersiz bir kayıt numarasıdır.

3. T1 işlemini oluşturan tüm işlemler başarıyla tamamlanmışsa işlem kısmen kayıt altına alınır ve protokole girilir.<Т1 СОММIТ>.

4. İşlem tamamlandıktan sonra T1 ile ilgili protokol kayıtları veritabanında uygun değişiklikleri yapmak için kullanılır.

5. Bir hata oluşursa, VTYS günlüğe bakar ve hangi işlemlerin yeniden yapılması gerektiğini bulur. Protokol her iki kaydı da içeriyorsa İşlem T1'in yeniden yapılması gerekiyor<Т1 BEGIN TRANSACTION и <Т1 СОММIТ>... Veritabanı tutarsız bir durumda olabilir, ancak değiştirilen veri öğelerinin tüm yeni değerleri günlükte bulunur ve bu, işlemin yeniden yürütülmesini gerektirir. Bunun için, protokole doğrudan bakarak veri öğelerinin tüm değerlerini yenileriyle değiştiren bazı sistem prosedürü REDOQ kullanılır.

6. Protokol, COMMIT işlem tamamlama komutunu içermiyorsa, herhangi bir işlem yapılması gerekmez ve işlem yeniden başlatılır.

Pirinç. 11.3.İşlem günlüğü

Anında yürütme ile alternatif bir mekanizma, doğrudan veritabanında değişiklik yapılmasını sağlar ve yalnızca yeni değil, aynı zamanda değiştirilen özelliklerin tüm eski değerleri de protokole girilir, böylece her kayıt şöyle görünür:<Т1, ID_RECORD, атрибут новое значение старое значение...>... Bu durumda, günlüğe yazmak, işlemin veritabanında doğrudan yürütülmesinden önce gelir. Bir işlem yapıldığında yani komutla karşılaşıldığında<Т1 СОММIТ>ve yürütülür, ardından tüm değişiklikler veritabanında zaten yapılır ve bu işlemle ilgili başka bir işlem yapılması gerekmez.

Bir işlem geri alındığında, BEGIN TRANSACTION komutuyla başlayan protokol üzerinden sırayla ilerleyerek, iptal edilen işlemdeki tüm eski değerleri döndüren UNDO () sistem prosedürü yürütülür.

Yük devretme için aşağıdaki mekanizma kullanılır:

· Bir işlem, bir işlemi başlatmak için bir komut içeriyorsa, ancak yürütülmesinin onaylandığı bir taahhüt komutu içermiyorsa, işlem geri alındığındaki işlem sırası gerçekleştirilir, yani eski değerler geri yüklenir. .

· Hata, son DB değiştirme komutu yürütüldükten sonra, ancak kesinleştirme komutu yürütülmeden önce meydana gelirse, kesinleştirme komutu yürütülür ve veritabanında herhangi bir değişiklik yapılmaz. İş sadece protokol düzeyinde gerçekleşir.

· Bununla birlikte, hem günlükte hem de veritabanında yapılan değişikliklerin hemen kaydedilmediği, ancak arabelleğe alındığı göz önüne alındığında, kurtarma sorunlarının daha önce açıklanan algoritmalardan çok daha karmaşık göründüğüne dikkat edilmelidir. Bir sonraki bölüm buna ayrılmıştır.

Günlüğe kaydetme ve arabelleğe alma

Değişiklik günlüğü, yalnızca işlem yönetimiyle değil, aynı zamanda veritabanı sayfalarının bellekte arabelleğe alınmasıyla da yakından ilgilidir.

Herhangi bir veritabanı değişiklik işlemi için günlüğe gitmesi gereken bir veritabanı değişiklik kaydı, gerçekten hemen harici belleğe yazılırsa, bu, sistemi önemli ölçüde yavaşlatır. Bu nedenle, günlük girişleri de arabelleğe alınır: normal çalışma sırasında, sonraki sayfa yalnızca girişlerle dolu olduğunda günlüğün harici belleğine gönderilir.

Buradaki zorluk, veritabanının bir çökmeden kurtarılabilmesini sağlamak için bazı genel push politikası tasarlamaktır.

İşlemlerin tek tek geri alınmasıyla ilgili sorun ortaya çıkmaz, çünkü bu durumlarda ana belleğin içeriği kaybolmaz ve hem günlük arabelleğinin hem de veritabanının sayfa arabelleklerinin içeriği kullanılabilir. Ancak, geçici bir hata oluşursa ve arabelleklerin içeriği kaybolursa, veritabanını kurtarmak için günlük ve veritabanının harici bellekte tutarlı bir durumuna sahip olmanız gerekir.

Günlük arabelleği ve veritabanı sayfası arabelleklerini patlatmak için tutarlı bir ilkenin temel ilkesi, bir veritabanı nesnesinde yapılan bir değişikliğin, değiştirilen nesne harici veritabanı belleğine girmeden önce dış günlük belleğine yazılması gerektiğidir. Karşılık gelen günlüğe kaydetme (ve arabelleğe alma yönetimi) protokolüne Önceden Yazma Günlüğü (WAL) - "günlüğe ilk yaz" adı verilir ve değiştirilmiş bir veritabanı nesnesini harici belleğe yazmak istiyorsanız, öncelikle işlem günlüğü, değişikliğinin harici bellek kayıtlarına yazılır.

Başka bir deyişle, veritabanının harici belleğinde, ilgili olarak değişiklik işleminin gerçekleştirildiği bir veritabanı nesnesi varsa, o zaman günlüğün harici belleğinde bu işleme karşılık gelen bir kayıt mutlaka vardır. Bunun tersi doğru değildir, yani günlüğün harici belleği bir veritabanı nesnesini değiştirme işlemi hakkında bir kayıt içeriyorsa, değiştirilen nesnenin kendisi veritabanının harici belleğinde mevcut olmayabilir.

Arabellekleri göndermek için ek bir koşul, başarıyla tamamlanan her işlemin gerçekten harici belleğe atanması gerekliliği tarafından uygulanır. Hangi arıza olursa olsun, sistem arıza anında gerçekleştirilen tüm işlemlerin sonuçlarını içeren veritabanı durumunu geri yükleyebilmelidir.

Basit bir çözüm, bir günlük arabelleği açılır ve ardından işlem tarafından değiştirilen veritabanı sayfası arabelleklerinin toplu olarak açılır. Bu oldukça sık yapılır, ancak bir taahhüt işlemi gerçekleştirirken önemli bir ek yük getirir.

Veritabanının son tutarlı durumunun geri yüklenebilmesini sağlamak için minimum gereksinimin, bir işlem gerçekleştirildiğinde, bu işlem tarafından tüm veritabanı değişiklik kayıtlarının günlüğün harici belleğine itilmesi olduğu ortaya çıktı. Bu durumda, bu işlem adına yapılan logdaki son kayıt, işlemin sonu ile ilgili özel bir kayıttır.

Şimdi sistem, WAL protokolüne göre tutulan, paylaşılan kayıt arabelleğine sahip tüm işlemler için ortak bir günlük tutuyorsa, çeşitli durumlarda veritabanı geri yükleme işlemlerini nasıl gerçekleştirebileceğinize bakalım.

Bir işlemin bireysel olarak geri alınması

Genel log üzerinde bireysel bir işlemin geri alınabilmesi için, bu işleme ait tüm log kayıtları bir ters listede bağlantılıdır. Başarısız işlemler listesinin başlangıcı, bu işlem tarafından veritabanında yapılan son değişikliktir. Tamamlanmış işlemler için (bireysel geri alma artık mümkün değildir), listenin başlangıcı, işlemin sonuyla ilgili kayıttır ve mutlaka günlüğün harici belleğine itilir.Listenin sonu her zaman ilktir. Bu işlem tarafından yapılan veritabanı değişikliği hakkında kayıt. Tipik olarak, her kayda benzersiz bir işlem kimliği atanır, böylece veri tabanı değişiklik kayıtlarının doğrudan bir listesi, belirli bir işlem tarafından geri yüklenebilir.

Bu nedenle, bireysel bir işlemin geri alınması (bunun yalnızca taahhüt edilmemiş işlemler için mümkün olduğunu bir kez daha vurguluyoruz) aşağıdaki gibi gerçekleştirilir:

· Bu işlem listesinden bir sonraki kayıt seçilir.

· Tersi işlem yapılır: INSERT işlemi yerine ilgili DELETE işlemi yapılır, DELETE işlemi yerine INSERT işlemi yapılır ve doğrudan UPDATE işlemi yerine ters UPDATE işlemi veritabanının önceki durumunu geri yükler nesne.

· Bu ters işlemlerden herhangi biri de günlüğe kaydedilir. Aslında bu, bireysel bir geri alma için gerekli değildir, ancak bir işlemin bireysel bir geri alınmasını gerçekleştirirken, kurtarmanın ardından, bireysel geri almanın tam olarak gerçekleştirilmediği bir işlemi geri almanın gerekli olacağı yumuşak bir hata meydana gelebilir.

· Geri alma başarılı bir şekilde tamamlanırsa, log'a işlemin bittiğine dair bir kayıt yazılır. Günlük açısından, böyle bir işlem yapılır.

Yumuşak bir başarısızlıktan kurtarma

Yazılım hatasından kurtarma ile ilgili en önemli sorunlardan biri, tek bir mantıksal veritabanı değiştirme işleminin veri sayfası ve birden çok dizin sayfası gibi birden çok fiziksel veritabanı bloğunu değiştirebilmesidir. Veritabanı sayfaları RAM'de arabelleğe alınır ve bağımsız olarak açılır. WAL protokolünün kullanılmasına rağmen, bir yazılım hatasından sonra, veritabanının harici belleğindeki sayfalar kümesi tutarsız olabilir, yani, harici bellek sayfalarından bazıları değişiklikten önceki nesneye ve bazıları - değişiklikten sonra nesneye karşılık gelir. değişiklik. Mantıksal düzeydeki işlemler, nesnenin bu durumuna uygulanamaz.

Tüm nesnelerin sayfa kümeleri tutarlıysa, yani nesnenin değiştirilmeden önceki veya değiştirildikten sonraki durumuna karşılık geliyorsa, bir veritabanının harici belleğinin durumuna fiziksel olarak tutarlı denir.

Günlüğün, veritabanının fiziksel tutarlılık noktalarını işaretlediğini varsayacağız - harici belleğin, ilgili zaman noktasından önce tamamlanan işlemlerin tutarlı sonuçlarını içerdiği ve tamamlanmamış hiçbir işlem sonucunun olmadığı anlar. tamamlanır ve günlük arabelleği harici belleğe gönderilir. Fiziksel tutarlılığın nasıl sağlanabileceğine biraz sonra bakacağız. Bu tür noktalara tpc (fiziksel tutarlılık zamanı) diyelim - fiziksel anlaşma noktaları.

Ardından, yumuşak bir arıza sırasında aşağıdaki işlem durumları mümkündür:

· İşlem başarıyla tamamlandı, yani COMMIT işleminin işlemi onaylandı ve işlemin tüm işlemleri için harici bellekte yürütüldüğüne dair bir onay alındı;

· İşlem başarıyla tamamlandı, ancak bazı işlemlerin harici bellekte yürütüldüğüne dair onay alınmadı;

· İşlem, ROLLBACK komutunu aldı ve yürüttü;

· İşlem tamamlanmadı.

Fiziksel veritabanı tutarlılığı

Veritabanında fiziksel tutarlılık noktaları olduğundan nasıl emin olabilirsiniz, yani tpc zamanında veritabanının durumunu nasıl geri yükleyebilirsiniz? Bunu yapmak için kullanılan iki ana yaklaşım vardır: gölge tabanlı bir yaklaşım ve veritabanı değişikliklerinin sayfa sayfa günlüğe kaydedilmesini kullanan bir yaklaşım.

Bir dosya açıldığında, mantıksal bloklarının numaralarını harici belleğin fiziksel bloklarının adreslerine eşleme tablosu RAM'e okunur. Bir dosyanın herhangi bir bloğu değiştirildiğinde, harici belleğe yeni bir blok tahsis edilir. Bu durumda, geçerli eşleme tablosu (RAM'de) değiştirilir ve gölge tablosu değişmeden kalır. Açık bir dosyayla çalışırken bir hata oluşursa, dosyanın açılmadan önceki durumu otomatik olarak harici belleğe kaydedilir. Dosyayı açıkça geri yüklemek için, gölge eşleme tablosunu RAM'e yeniden okumak yeterlidir.

Gölge mekanizmasının genel fikri, Şek. 11.4.

Pirinç. 11.4.Gölge görüntüleme tablolarını kullanma

Bir veritabanı bağlamında, gölge mekanizması aşağıdaki gibi kullanılır. Kontrol noktaları periyodik olarak gerçekleştirilir. Bunu yapmak için, tüm mantıksal işlemler tamamlanır, içeriği ilgili harici bellek sayfalarının içeriğine karşılık gelmeyen tüm RAM arabellekleri dışarı itilir. Veritabanı dosyalarının eşlenmesi için gölge tablosu, geçerli olanla değiştirilir (daha doğrusu, mevcut eşleme tablosu, gölge olanın yerine yazılır).

Tpc'ye kurtarma anında gerçekleşir: mevcut eşleme tablosu bir gölge tablo ile değiştirilir (kurtarma üzerine, gölge eşleme tablosu basitçe okunur). Tüm kurtarma sorunları çözüldü, ancak bu, harici belleğin çok fazla kullanılması pahasına. Sınırda, veritabanını gerçekten depolamak için ihtiyaç duyduğunuzdan iki kat daha fazla harici belleğe ihtiyacınız olabilir. Gölge mekanizması güvenilir ama çok kaba bir araçtır. Tüm nesneler için ortak bir zaman noktasında tutarlı bir harici bellek durumu sağlanır. Aslında, her biri kendi zaman örneklerine karşılık gelebilen bir dizi tutarlı sayfaya sahip olmak yeterlidir.

Böyle daha zayıf bir gereksinimi karşılamak için, veritabanı değişiklik işlemlerinin mantıksal günlüğünün yanı sıra, sayfa sayfa değişiklikler günlüğe kaydedilir. Geçici bir hatadan kurtarmanın ilk adımı, başarısız mantıksal işlemleri her seferinde bir sayfa geri almaktır. İşlemler açısından mantıksal kayıtlarla bunun yapılmasına benzer şekilde, tek bir mantıksal işlemden son sayfalanan değişiklik kaydı işlemin sonudur.

Bu yaklaşımda sorunu çözmek için iki yöntem vardır. İlk yöntem, mantıksal ve sayfalama işlemlerinin ortak bir günlüğünü tutar. Doğal olarak, birbirinden tamamen farklı şekillerde yorumlanan iki tür kaydın varlığı, derginin yapısını karmaşıklaştırmaktadır. Ek olarak, alaka düzeyi yerel nitelikte olan sayfa sayfa değişikliklerin kayıtları dergiyi önemli ölçüde (ve çok anlamlı olmayan) artırır.

Bu nedenle, ayrı (kısa) bir sayfalı değişiklikler günlüğü tutmak giderek daha popüler hale geliyor. Bu teknik, örneğin, iyi bilinen Informix Online ürününde kullanılmaktadır.

Bir şekilde veritabanının harici belleğini tpc zamanındaki duruma geri yüklemenin mümkün olduğunu varsayalım (bu nasıl yapılabilir - biraz sonra). Sonra:

· T1 işlemi için herhangi bir işlem yapılması gerekmez. TPC'den önce sona erdi ve tüm sonuçları veritabanının harici belleğine yansıtıldı.

· T2 işlemi için, geri kalan işlemleri (yinele) yeniden yürütmeniz gerekir. Gerçekten de, harici bellekte, tpc anından sonra T2 işleminde gerçekleştirilen işlemlerin hiçbir izi tamamen yoktur. Bu nedenle, T2 işlemlerinin doğrudan yeniden yorumlanması doğrudur ve veritabanının mantıksal olarak tutarlı bir durumuna yol açacaktır (T2 işlemi yumuşak hatadan önce başarıyla tamamlandığından, günlük bu işlem tarafından yapılan tüm değişikliklerin bir kaydını içerir).

· TK işlemi için işlemlerin (geri alma) ilk kısmı ters yönde yapılmalıdır. Nitekim veritabanının harici belleğinde, tpc anından sonra gerçekleştirilen TK işlemlerinin sonuçları tamamen yoktur. Öte yandan, harici belleğin tpc'den önce gerçekleştirilen TK işlemlerinin sonuçlarını içermesi garanti edilir. Sonuç olarak, TK işlemlerinin ters yorumlanması doğrudur ve veritabanının tutarlı bir durumuna yol açacaktır (TK işlemi yumuşak bir hata zamanında tamamlanmadığından, kurtarma sırasında yürütmenin tüm sonuçlarını korumak gerekir) .

· TPC'den sonra başlayan ve yumuşak bir arızadan önce sona eren bir T4 işlemi için tam bir tekrar yapmanız gerekir.

· Son olarak, tpc'den sonra başlayan ve yazılım hatası zamanında tamamlanamayan bir T5 işlemi için herhangi bir işlem yapılması gerekmez. Bu işlemin sonuçları, veritabanının harici belleğinde tamamen eksik.

Sert bir çarpışmadan kurtarma

Veritabanı değişiklik günlüğünün, zorlu bir arızadan sonra veritabanının son tutarlı durumunu geri yüklemek için yeterli olmadığı açıktır. Bu durumda, kurtarmanın temeli, veritabanının günlüğü ve yedek kopyasıdır.

Kurtarma, veritabanını arşiv kopyasından geri kopyalayarak başlar. Daha sonra tamamlanan tüm işlemler için tekrar yapılır, yani işlemler doğrudan sırayla tekrarlanır.

Daha doğrusu, aşağıdakiler olur:

· Tüm işlemler log boyunca ileri yönde gerçekleştirilir;

· Arıza anına kadar bitmemiş işlemler için geri alma işlemi gerçekleştirilir.

Aslında, sert bir çökme, RAM arabelleklerinde bir kayıpla sonuçlanmadığından, veritabanını, başarısız işlemlerin bile devam edebileceği bir düzeye geri yüklemek mümkündür. Ancak bu genellikle yapılmaz çünkü sert bir çarpışmadan kurtulmak oldukça uzun bir süreçtir.

Güvenilirlik açısından günlüğe kaydetme için özel gereksinimler olmasına rağmen, prensipte kaybolabilir. O zaman veritabanını geri yüklemenin tek yolu arşiv kopyasına geri dönmektir. Elbette bu durumda, veritabanının son tutarlı durumunu elde edemezsiniz, ancak bu hiç yoktan iyidir.

Kısaca inceleyeceğimiz son konu, veritabanının yedeklerinin alınması ile ilgilidir. En kolay yol, günlük dolduğunda veritabanını arşivlemektir. Sözde "sarı bölge", yeni işlemlerin oluşumunun geçici olarak engellendiği günlüğe girilir. Tüm işlemler tamamlandığında ve dolayısıyla veritabanı tutarlı bir durumda olduğunda, onu arşivleyebilir ve ardından günlüğü yeniden doldurmaya başlayabilirsiniz.

Veritabanını, günlük dolduğundan daha az sıklıkta yedekleyebilirsiniz. Günlük doluysa ve başlatılan tüm işlemler sona erdiyse, günlüğün kendisini arşivleyebilirsiniz. Bu tür bir arşivlenmiş günlük, yalnızca veritabanının arşivlenmiş bir kopyasını yeniden oluşturmak için gerekli olduğundan, arşivlenmiş günlük bilgileri önemli ölçüde sıkıştırılabilir.

Bu yılın 1 Ocak tarihinden itibaren yasa, bankaları müşterilerini yaptıkları her işlem hakkında bilgilendirmek zorunda bıraktı. Aynı zamanda, müşterinin bilgilendirilme şekli mevzuatta yer almamaktadır. Müşterisini önemseyen bankalar en uygun ve hızlı bilgilendirme yöntemi olan SMS'i kullanır. Geri kalanlar kendileri için daha ucuz yöntemler kullanıyor - bankanın web sitesindeki kişisel hesaplarında e-posta veya mesajlarla bildirim.

Bankanız hangi yöntemi seçerse seçsin, uyarıları dikkatli bir şekilde takip etmelisiniz, çünkü söz konusu hileli işlemler olduğunda, kelimenin tam anlamıyla her dakika elinize geçebilir veya sizi çalınan tutarı iade etme şansınızdan mahrum bırakabilir.

Kartınızla sizin tarafınızdan yapılmayan herhangi bir işlemin dolandırıcılık olduğu unutulmamalıdır. Birkaç dolandırıcılık türü vardır:

  • Kartınız çalınır veya kaybolur ve daha sonra izniniz olmadan kullanılır.
  • Veren kuruluştan yeni bir kart (veya eskisinin yerine geçecek bir kart) almadınız ve yapmadığınız işlemlerle ilgili belgeler gelene kadar yanlış ellere geçtiğini bilmiyordunuz.Kişisel bilgileriniz başkaları tarafından kullanılıyor. kart başvurusu yapacak kişi. Amir banka müşteriden bir şikayet almadıkça veya hesap açıldıktan kısa bir süre sonra incelenmedikçe, bu tür dolandırıcılığın fark edilmesi çok zordur. Bu bankanın müşterisi değilseniz, kredi başvurusu yapana kadar birisinin adınıza kart aldığını bilmeyebilirsiniz ve kötü kredi geçmişiniz nedeniyle reddedilmezsiniz.
  • Hesap durum belgesi, sizinkiyle aynı numaraya sahip sahte bir kartın dolaşımda olduğu anlamına gelebilecek, yapmadığınız işlemlere ilişkin verileri içerir.
  • Sahte belgelere sahip bir saldırgan, kart sahibi gibi davranarak, kart sahibinin hesabının kontrolünü ele geçirir ve aynı hesaptaki kartın değiştirilmesini talep eder. Genellikle kartın farklı bir adrese gönderilmesini talep ederler. Bunu genellikle bir hesap durumu sertifikası aldığınızda veya adresinize faturalar gelmediğinde öğrenirsiniz.
  • Kartınız yanınızda, ancak saldırgan kart numarasını kullanarak işlem yapıyor, örneğin posta, telefon veya İnternet üzerinden mal sipariş ediyor

Kendinizi bu durumlardan herhangi biri ile karşı karşıya bulursanız, yapmanız gereken ilk şey banka ile iletişime geçmektir. Yasaya göre, paranın çekilmesinden sonraki ilk gün içinde yasa dışı bir işlemle ilgili şikayet alınırsa, banka karttan kaybolan parayı size tazmin etmelidir.

Kart İş Geliştirme Başkan Yardımcısı Stepan Zaitsev'e göre, müşteri tartışmalı işlemi 24 saat içinde açıklamadıysa, bunu daha sonra yapabilir. Bankanın herhangi bir ofisinde bir şikayet yazabilirsiniz. Daha fazla değerlendirme, banka tarafından belirlenen şekilde gerçekleştirilecektir. Bir müşteriye talebine cevap verme süresi 30 iş günüdür (60'a kadar - yabancı bankaların operasyona katılması durumunda). Banka tüm durumu netleştirmek için müşteriden ek belge ve bilgi talep edebilir.

Bir işlem kavramı, ilişkisel paradigmanın kalbinde yer alır. Bir işlem, bir veya daha fazla DML komutundan ve bir sonraki komut olan ROLLBACK veya COMMIT'den oluşur. SAVEPOINT komutunu bir işlem içinde belirli bir kontrol için kullanmak mümkündür. Sözdizimine bakmadan önce, işlem kavramını göz önünde bulundurmanız gerekir. İlgili bir konu, tutarlı okuma konusudur; bu, Oracle sunucu düzeyinde otomatik olarak yapılır, ancak bazı programcılar bunu SELECT komutlarıyla değiştirebilir.

Oracle'ın işlemsel bütünlük motoru, geri alma bölümlerinin ve bir günlük dosyasının bir kombinasyonunu temel alır, muhtemelen bugüne kadar mevcut olan en iyi ve uluslararası veri işleme standartlarına tam olarak uygundur. Diğer veritabanı satıcıları, standardı kendi farklı yollarıyla uygular. Kısacası, herhangi bir ilişkisel veritabanı ACID testini karşılamalıdır: atomiklik (A - atomiklik), tutarlılık (C - tutarlılık), izolasyon (I - izolasyon) ve dayanıklılık (D - dayanıklılık) garanti edilmelidir.

Atomarlık

Atom ilkesi, bir işlemin tüm bölümlerinin başarılı olması gerektiğini ya da hiçbirinin olmaması gerektiğini belirtir. Örneğin, bir iş analisti, bir çalışanın maaşı değiştiğinde, çalışanın seviyesinin mutlaka değişeceği kuralını onayladıysa, o zaman atomik işleminiz iki bölümden oluşacaktır. Veritabanı, her iki değişikliğin de uygulandığından veya hiçbirinin yapılmadığından emin olmalıdır. Sadece bir değişiklik başarılı olursa, maaşı seviyesiyle uyuşmayan bir çalışanınız olacak: iş açısından veri bozulması. İşlem onaylanmadan önce herhangi bir şey (herhangi bir şey) ters giderse, veritabanı, işlemin başlangıcından bu noktaya kadar yapılan tüm çalışmaların iptal edilmesini sağlamalıdır: bu otomatik olarak çalışmalıdır. Bir işlemin atomitesi küçük bir şey gibi görünse de - işlemler uzun ve çok önemli olabilir. Başka bir örnek düşünün, defterde yarım Ağustos ayı ve yarım Eylül ayı için veri olamaz: iş açısından bir ayı kapatmak, milyonlarca satırı ve binlerce tabloyu işleyebilen ve işleyebilen tek bir atomik işlemdir. birkaç saat boyunca (veya bir şey ters gittiyse iptal edildi). Bir işlemin iptali manuel olabilir (ROLLBACK komutunu vererek), ancak bir hata durumunda otomatik ve geri döndürülemez olmalıdır.

Tutarlılık

Veri tutarlılığı ilkesi, bir sorgunun sonucunun, sorgunun başlangıcındaki veritabanının durumuyla tutarlı olması gerektiğini belirtir. Tablodaki bir sütunun ortalamasını hesaplayan basit bir sorgu sunalım. Tablo büyükse, tablonun tüm satırlarını yinelemek uzun zaman alacaktır. Diğer kullanıcılar şu anda sorgu çalışırken verileri güncelliyorsa sorgu yeni değerler mi almalı yoksa eski değerler mi almalı? Sorgu sonucu eklenen satırları dikkate almalı mı yoksa kaldırılan satırları yoksaymalı mı? Tutarlılık ilkesi, veritabanının, bir sorgunun başlangıcından sonra herhangi bir değişikliğin o sorgu için görünür olmadığından emin olmasını gerektirir; sorgu, sorgunun ne kadar sürdüğüne ve verilerde hangi değişikliklerin yapıldığına bakılmaksızın, sorgunun başlatıldığı andaki sütunun ortalama değerini döndürmelidir. Oracle, istek başarılı olursa sonucun tutarlı olacağını garanti eder. Ancak, veritabanı yöneticisi veritabanını uygun şekilde yapılandırmadıysa, sorgu başarısız olabilir: ünlü “ORA-1555 anlık görüntüsü çok eski” hatası oluşur. Eskiden bu tür hataların çözümü çok zordu ama son sürümlerde yönetici bu durumları kolaylıkla çözebiliyor.

İzolasyon

Yalıtım ilkesi, tamamlanmamış (onaylanmamış bir işlemin) dünyanın geri kalanı için görünmez olması gerektiğini belirtir. İşlem devam ederken, yalnızca bu işlemi gerçekleştiren oturum kışlamayı görür. Diğer tüm oturumlar değişmemiş verileri görmelidir. Nedenmiş? İlk olarak, tüm işlem tam olarak yürütülemeyebilir (atomiklik ve tutarlılık ilkesini hatırlayın) ve bu nedenle hiç kimse geri alınabilecek değişiklikleri görmemelidir. İkincisi, işlemin işleyişi sırasında, veriler (iş açısından) tutarsızdır: maaş güncelleme örneğimiz için, maaşın değiştiği bir süre olacaktır, ancak seviye henüz değildir. İşlemlerin izolasyonu, veritabanının mevcut işlemleri diğer kullanıcılardan gizlemesini gerektirecektir: işlem devam ederken değişikliklerden önce verileri görecekler ve ardından tüm değişiklikleri tutarlı bir veri kümesi olarak hemen görecekler. Oracle, işlem izolasyonunu garanti eder: bir oturumun (değişikliği yapan dışında) onaylanmamış verileri görmesi için hiçbir yol yoktur. Onaylanmamış verilerin (kirli okuma olarak bilinir) okunmasına Oracle tarafından izin verilmez (bazı diğer veritabanları yapsa da).

dayanıklılık

Uzun ömür ilkesi, bir işlem başarıyla tamamlanırsa bu verileri kaybetmenin imkansız olması gerektiğini belirtir. Bir işlemin çalışması sırasında, izolasyon ilkesi, değişiklikleri yapan oturum dışında hiç kimsenin bunları görmemesini gerektirir. Ancak işlem başarıyla tamamlanır tamamlanmaz değişiklikler herkesin kullanımına açık olmalı ve veritabanı bunların kaybolmamasını sağlamalıdır. Oracle, tüm değişiklik vektörlerini, değişiklikler yapılmadan önce günlük dosyalarına yazarak bu gereksinimi karşılar. Bu değişiklik günlüğünü yedeklere uygulayarak, veritabanı durdurulduğunda veya hasar gördüğünde yapılan değişiklikleri her zaman yeniden yapmak mümkündür. Elbette, geçersiz DML sorgularının yürütülmesi veya tabloların bırakılması gibi kullanıcı hataları nedeniyle veriler kaybolabilir. Ancak Oracle ve DBA açısından bu tür olaylar aynı zamanda işlemlerdir: dayanıklılık ilkesine göre geri alınamazlar.

SQL Yürütmeistekler

SQL dilinin tamamı yaklaşık bir düzine komuttan oluşur. Şimdi komutlarla ilgileniyoruz: SELECT, INSERT, UPDATE ve DELETE.

SELECT Komutu Yürütme

SELECT komutu verileri alır. SELECT komutunun yürütülmesi birkaç aşamadan oluşan bir işlemdir: Sorguyu yürüten sunucu işlemi, gerekli veri bloklarının bellekte, önbellek arabelleğinde olup olmadığını kontrol edecektir. Varsa, yürütme devam edebilir, aksi takdirde sunucu işlemi diskteki verileri bulmalı ve önbellek arabelleğine kopyalamalıdır.

Sunucunun veri dosyalarından okunan blokları veritabanı arabellek önbelleğine işlediğini, DBWn'nin blokları veritabanı arabellek önbelleğinden veri dosyalarına yazdığını daima unutmayın.

İsteği yürütmek için gereken verileri içeren bloklar önbellek arabelleğinde olduğunda, herhangi bir ek işlem (sıralama ve toplama gibi) PGA oturumunda devam eder. Yürütme tamamlandığında, sonuç kullanıcı işlemine döndürülür.

Bu, ACID testiyle nasıl ilişkilidir? Tutarlılık için, istek veri bloğunun isteğin başlangıcından bu yana değiştiğini algılarsa, sunucu işlemi bu değişikliğe karşılık gelen geri alma segmentini (geri alma veya geri alma segmenti) bulur, verilerin eski sürümünü bulur ve (için geçerli istek) değişikliği geri alın. Böylece, istek başladıktan sonra meydana gelen değişiklikler görünmeyecektir. Benzer şekilde, izolasyon da taahhüt edilen değişikliklere dayansa da, işlem izolasyonu garanti edilir. Dürüst olmak gerekirse, değişiklikleri geri almak için gereken veriler artık geri alma segmentinde mevcut değilse, bu mekanizma çalışmayacaktır. Bu nedenle, "anlık görüntü çok eski" hatası gelir.

Şekil 8-4, SEÇ sorgu işleme yolunu gösterir

Adım 1, kullanıcı isteğinin kullanıcı sürecinden sunucu işlemine aktarılmasıdır. Sunucu işlemi, gerekli bloklar için önbellek arabelleğini tarar ve arabellekteyse 4. adıma gider. Değilse, 2. adım veri dosyalarındaki blokları bulur ve 3. adım verileri arabelleğe kopyalar. Adım 4, verileri, sorgu sonucunu kullanıcı işlemine döndürmeden önce, ek işlemlerin olabileceği sunucu işlemine iletir.

GÜNCELLEME Komutunu Yürütme

Herhangi bir DML komutu için, veri blokları ve geri alma blokları ile çalışmak ve ayrıca bir değişiklik günlüğü (yinele) oluşturmak gerekir: ACIDS testinin A, C ve I ilkeleri, geri alma verilerinin oluşturulmasını gerektirir; D, yineleme verilerinin oluşturulmasını gerektirir.

Geri alma, yinelemenin tersi değildir! Yinele, bir tablo bloğu, dizin veya geri alma segmenti olup olmadığına bakılmaksızın tüm blok değişikliklerini korur. Yinele - geri al için, segment tablolarla aynı segmenttir ve tüm değişiklikler dayanıklı olmalıdır

Bir DML komutu yürütülürken ilk adım, bir SELECT komutu yürütülürkenkiyle aynıdır: gerekli bloklar önbellek arabelleğinde bulunmalı veya veri dosyalarından arabelleğe kopyalanmalıdır. Tek fark, ek olarak boş (veya süresi dolmuş) bir geri alma bloğunun gerekli olmasıdır. Ardından yürütme, SELECT komutundan daha karmaşık hale gelir.

Başlangıçta, süreçte kullanılacak tüm satırlar ve karşılık gelen dizinler için kilitler belirtilmelidir.

Ardından yineleme verileri oluşturulur: sunucu işlemi, verilere uygulanacak değişiklik vektörünün arabelleğinin günlüklerine yazılır. Hem veri bloğu değişiklikleri hem de geri alma bloğu değişiklikleri için yineleme verileri oluşturulur: bir satırdaki bir sütun güncellenirse, satır kimliği ve yeni değer günlük arabelleğine (tablo bloğuna uygulanacak değişiklik) yazılır. eski sütun değerinin yanı sıra (geri alma bloğu için değişiklik) ... Sütun dizin anahtarının bir parçasıysa, dizin değişikliklerini korumak için geri alma bloğunda yapılacak değişikliklerle birlikte dizindeki değişiklikler de günlük arabelleğine yazılır.

Tüm yineleme verileri oluşturulduktan sonra, veriler önbellek arabelleğinde güncellenir: veri bloğu, değiştirilen sütunla yeni sürüme güncellenir ve eski sürüm geri alma bloğuna yazılır. Bu andan itibaren işlem onaylanana kadar, bu satıra atıfta bulunan diğer oturumlardan gelen tüm istekler geri alma bloğuna yönlendirilecektir. Yalnızca GÜNCELLEME yapan oturum, tablo bloğundaki satırın geçerli sürümünü görecektir. Aynı ilke, tüm bağlantılı dizinler için geçerlidir.

INSERT Komutlarını Yürütmeve SİL

Kavramsal olarak INSERT ve DELETE, UPDATE ile aynı şekilde yönetilir. İlk olarak, arabellekte gerekli bloklar aranır ve eğer orada değillerse, belleğe kopyalanırlar.

Yineleme aynı şekilde oluşturulur: verilere ve geri alma bloklarına uygulanacak tüm değişiklik vektörleri önce günlük arabelleğine yazılır. INSERT komutu için, bir tablo bloğunun (ve muhtemelen dizin bloklarının) değişiklik vektörü, yeni bir satır (ve muhtemelen yeni bir dizin anahtarı) oluşturan baytlardır. Geri alma bloğunun vektörü, yeni satırın satır kimliğidir. DELETE komutu için, geri alma bloğunun vektörü satırın tamamıdır.

INSERT ve UPDATE arasındaki temel fark, geri alınacak veri miktarıdır. Bir satır eklendiğinde, geri alınacak tek veri, geri alma bloğundaki satır kimliği girişi olacaktır, çünkü INSERT komutunu geri almak için Oracle'ın ihtiyaç duyduğu tek bilgi satırın satır kimliğidir ve komut oluşturulabilir.

table_name'den sil burada rowid = rowd_id_of_new_row;

Bu komutu yürütmek değişikliği geri alacaktır.

DELETE komutu için tüm satırın (birkaç kilobayt olabilen) geri alma bloğuna yazılması gerekir ve ardından gerekirse tüm satırı tabloya yeniden ekleyen bir sorgu üretilerek silme işlemi iptal edilebilir.

İşlem başlangıcı ve bitişi

Bir oturum, herhangi bir DML komutunu çalıştırdığı anda bir işlemi başlatır. İşlem, oturum bir ROLLBACK veya COMMIT komutu verene kadar istendiği kadar DML komutu devam eder. Yalnızca onaylanan değişiklikler garanti edilecek ve diğer oturumlar için geçerli olacaktır. Bir işlem içinde işlem başlatılamıyor. SQL standardı, kullanıcıların bir işlem başlatmasına ve ardından ilkini tamamlamadan yeni bir işlem başlatmasına izin vermez. Bu, PL / SQL (3. nesil Oracle dili) kullanılarak yapılabilir, ancak standart SQL değil.

İşlem kontrol komutları COMMIT, ROLLBACK ve SAVEPOINT'dir. İşlemi hemen iptal eden bir COMMIT veya ROLLBACK komutunu açıkça çağırmanın yanı sıra başka durumlar da olabilir.

  • DDL veya DCL Komutunu Yürütme
  • Kullanıcı işleminin tamamlanması (örneğin, kullanıcının SQL * Plus veya SQL Developer programından çıkması)
  • İstemci oturumu "öldü"
  • Sistem sorunları

Kullanıcı bir DDL komutu (CREATE, ALTER veya DROP) veya bir DCL komutu (GRANT veya REVOKE) yürütürse, etkin işlem (varsa) gerçekleştirilecektir. Bunun nedeni, DDL ve DCL komutlarının kendilerinin işlemler olmasıdır. SQL'de iç içe işlemler oluşturmak mümkün olmadığından, kullanıcı daha önce herhangi bir işlem yapmışsa, tüm kullanıcı komutları DDL veya DCL komutuyla birlikte onaylanacaktır.

Bir DML isteği yürüterek bir işleme başlarsanız ve daha sonra çıkmadan önce açıkça COMMIT veya ROLLBACK belirtmeden programı kapatırsanız, işlem iptal edilir - ancak onay veya iptal etmek tamamen programa bağlıdır. Programda nasıl çalıştığınıza bağlı olarak farklı programlar farklı davranabilir. Örneğin, Windows'ta genellikle Dosya - Çıkış menü öğelerini seçerek veya sağ üst köşedeki çarpı işaretine tıklayarak programdan çıkabilirsiniz. Programcı bu tamamlama yöntemlerini farklı şekilde ele alabilir ve ilk durumda COMMIT'i ve ikinci GERİ DÖNME'de belirtir. Her durumda, kontrollü bir çıkış olacaktır.

İstemci oturumu herhangi bir nedenle başarısız olursa, veritabanı işlemi her zaman iptal eder. Bu tür arızalar çeşitli nedenlerden kaynaklanabilir: Kullanıcı süreci, dağıtıcı tarafından "öldürülebilir", ağ sorunları veya kullanıcının makinesinde bir arıza olabilir. Her durumda, COMMIT veya ROLLBACK komutu açıkça belirtilmemiştir ve veritabanının ne olduğuna karar vermesi gerekir. Bu durumda oturum "öldürülür" ve aktif işlem iptal edilir. Ve tam olarak aynı şekilde, sunucu tarafında sorun olması durumunda veritabanı davranır. Veritabanı anormal bir şekilde kapatılmışsa, bir sonraki başlangıçta başlatılan ancak açıkça tamamlanmayan tüm işlemler iptal edilecektir.

Kontrolişlemler: COMMIT, ROLLBACK, SAVEPOINTve GÜNCELLEME İÇİN SEÇ

Oracle, ilk DML komutu çalıştırıldığında bir işlem başlatır. İşlem, ROLLBACK veya COMMIT komutu çağrılıncaya kadar sürer. SAVEPOINT komutu SQL standardının bir parçası değildir ve aslında programcının değişiklikleri kısmen ters sırada geri alması için kolay bir yoldur.

COMMIT komutunu çalıştırmak, birçok kişinin (ve hatta bazı DBA'ların) Oracle mimarisini yanlış anladığı yerdir. COMMIT yaptığınızda, fiziksel olarak olan tek şey LGWR'nin günlük arabelleğini diske yazmasıdır. DBWn kesinlikle hiçbir şey yapmaz. Bu, yüksek veritabanı performansı elde etmek için en önemli Oracle özelliklerinden biridir.

COMMIT komutu yürütüldüğünde DBWn ne yapar? Cevap: kesinlikle hiçbir şey

Bir işlemi kalıcı kılmak için, işlem sırasında yapılan değişiklikleri diske yazmanız yeterlidir: diskte gerçek verilere ihtiyaç yoktur. Değişiklikler, değişiklik loglarının disk üzerinde çok sayıda kopyası şeklinde kaydediliyorsa, o zaman veritabanı zarar görse bile, verilerin yedek kopyasını hataya geri yükleyerek ve değişiklikleri loglardan uygulayarak tüm işlemler tekrarlanabilir. . Şu anda, COMMIT'in yalnızca günlük arabelleğini diske boşalttığını ve işlemi tamamlandı olarak işaretlediğini anlamanız gerekir. Bu nedenle, birkaç saatlik bir süre içinde binlerce dosya üzerinde milyonlarca güncelleme içeren bir işlem, saniyenin çok küçük bir bölümünde sonuçlanabilir. LGWR günlükleri neredeyse gerçek zamanlı olarak yazdığından, neredeyse tüm işlem değişiklikleri zaten diske yazılmıştır. BAŞARILI OLDUĞUNUZDA, LGWR diske hemen bir günlük yazacaktır: oturumunuz kayıt bitene kadar bekleyecektir. Gecikme süresi, genellikle birkaç milisaniye süren günlük arabelleğinden son verileri yazmak için geçen süreye eşit olacaktır. Ardından, oturumunuz çalışmaya devam edebilir ve tutarlılık ilkesi gerektirmediği sürece, güncellenmiş verilere erişirken diğer tüm oturumlar geri alma segmentindeki verilere yeniden yönlendirilmez. Yineleme günlüğüne yazılan değişiklik vektörleri, hem veri bloklarına (tablolar ve dizinler) hem de geri alma bloklarına uygulanan tüm değişikliklerdir.

Yineleme günlüğü tüm değişiklikleri içerir: doğrulanmış ve onaylanmamış işlemler için veri bölümlerine uygulanır ve bölümleri geri alır

En anlaşılmaz olan şey, dosyalarda LGWR tarafından yazılan redo'nun hem onaylanmış hem de onaylanmamış işlemleri içermesidir. Dahası, DBWn herhangi bir zamanda, taahhütlü ve taahhütsüz işlemler için veri dosyalarına değiştirilmiş veri segmentleri blokları veya geri alma segmentleri yazabilir veya yazmayabilir. Yani, diskteki veritabanınız tutarsız: veri dosyaları, onaylanmamış işlemlerden gelen verileri depolayabilir ve bunlarda onaylanmış hiçbir değişiklik olmayabilir. Ancak herhangi bir zamanda, bir sorun olması durumunda, veri dosyalarında atlanan onaylanmış işlemleri tekrarlamak (veri blokları için değişiklikleri kullanarak) ve geri alma segmentlerini geri yüklemek (geri alma bloklarındaki değişiklikleri kullanarak) diskteki günlük dosyasında yeterli bilgi vardır. ) veri dosyalarına yazılan tüm onaylanmamış işlemleri iptal etmek için gereklidir.

Herhangi bir DDL komutu, GRANT veya REVOKE mevcut işlemi onaylayacaktır.

GERİ DÖNME

İşlem devam ederken Oracle, işlem başlayana kadar verilerin bir görüntüsünü saklar. Bu görüntü, işlemle ilgili verilere erişen diğer oturumlar tarafından kullanılır. Ayrıca, bir şeyler ters giderse veya oturum işlemi iptal ederse, bir işlemi otomatik olarak iptal etmek için kullanılır.

Bir işlemi iptal etmek için sözdizimi

GERİ DÖNME;

İşlemin geri alınmasından önceki verilerin durumu değişiklikleri içerir, ancak bu değişiklikleri geri almak için gereken bilgiler mevcuttur. Bu bilgi, izolasyon ilkesini uygulamak için diğer oturumlar tarafından kullanılır. İşlemin GERİ DÖNDÜĞÜ tüm değişiklikleri geri alır, işlem başlamadan önce veri görüntüsünü geri yükler: eklenen tüm satırlar silinir, silinen tüm satırlar geri yüklenir, değerlerin değiştirildiği tüm satırlar orijinal durumlarına geri döner. Diğer seanslar bir şeylerin olduğunu bile bilmeyecekler, asla bir değişiklik görmediler. Ve iptalden sonra işlemi başlatan oturum, verileri işlem başlamadan önceki gibi görecektir.

KAYDETME NOKTASI

Bir kayıt noktası, programcıların bir işlem üzerinde daha sonra işlemi iptal etmenin etkisini kontrol etmek için kullanılabilecek bir bayrak ayarlamasına izin verir. Tüm işlemi iptal edip tamamlamak yerine, belirli bir bayraktan sonra yapılan değişiklikleri geri almak, ancak yapılan değişiklikleri o bayraktan önce tutmak mümkün hale gelir. Şu anda işlemin çalışması devam ediyor: işlem onaylanmadı, tüm işlemi iptal etmek hala mümkün ve değişiklikler diğer oturumlar için görünmüyor.

Komut sözdizimi

KAYDETME NOKTASI kayıt noktası

Bu komut, işlemde daha sonra ROLLBACK komutunda kullanılabilecek bir nokta oluşturur. Aşağıdaki tablo, bir işlemin farklı zaman noktalarında çalışması sırasında farklı oturumlar tarafından görülebilen tablodaki satır sayısını göstermektedir. Kullanılan tabloya TAB denir ve bir sütunu vardır.

Örnek c'de iki işlem tamamlanmıştır: ilki COMMIT komutuyla ve ikincisi ROLLBACK ile tamamlanmıştır. Kayıt noktalarının kullanımının sadece işlemi başlatan oturum için bir işlem içinde etkili olduğu görülebilir: ikinci oturum onaylanmayan hiçbir şey görmez.

SEÇMEİÇİNGÜNCELLEME

İşlemleri yönetmek için son komut, GÜNCELLEME İÇİN SEÇ'tir. Oracle, varsayılan olarak, en yüksek düzeyde paralellik sağlar: veri okumak, yazmayı engellemez, yazma, değiştirmeyi engellemez. Başka bir deyişle, bir oturum, başka bir oturumun değiştiği verileri okumaya çalışıyorsa ve bunun tersi de sorun yoktur. Ancak bazen bu davranışı değiştirmeniz ve oturum tarafından okunan verileri değiştirme olasılığını önlemeniz gerekebilir.

Tipik uygulama davranışı, SELECT komutunu kullanarak verileri getirmek, verileri görüntülemek için kullanıcıya göstermek ve bu verileri değiştirme yeteneğidir. Oracle paralel kullanıcı çalışmasını desteklediğinden, hiçbir şey başka bir kullanıcının aynı verileri almasını engellemez. Her iki seansta da değişiklik yapılmaya çalışılırsa garip durumlar ortaya çıkabilir. Aşağıdaki örnek bu durumu göstermektedir.

İlk kullanıcının gördüğü şey budur (SQL * Plus'ın kullanıldığını varsayarsak)

Bu sonuç kullanıcının biraz kafasını karıştırmaktadır. Bu sorunu çözmek için istek tarafından döndürülen satırları engelleyebilirsiniz.

güncelleme için bölgelerden * seçin;

FOR UPDATE yönergesi, sorgu tarafından döndürülen tabloların kilitlenmesine neden olur. Diğer oturumlar verileri değiştiremez ve böylece sonraki değişiklikler başarılı olur: diğer oturumlar verileri değiştiremez. Yani, bir oturum tutarlı bir veri okumasına sahip olacaktır, ancak bunun bedeli, diğer oturumların kilitli verileri değiştirmeye çalışırlarsa "askıda kalması" olacaktır (diğer oturumlar bu verileri okuyabilir).

FOR UPDATE komutunun neden olduğu satırları kilitleme, oturum bir COMMIT veya ROLLBACK komutu yürütene kadar sürer. Herhangi bir DML komutu çalıştırmamış olsanız bile işlem sonlandır komutu yürütülmelidir.

Sözde "otomatik taahhüt"

İşlem yönetiminin nasıl ele alındığına ilişkin genel bakışı tamamlamak için, sözde "otomatik taahhüt" veya örtük taahhütle ilgili tüm şüpheler giderilmelidir. Oracle'ın otomatik olarak onaylayacağını sık sık duyacaksınız. İlk durum, DDL komutunu çalıştırdığınız önceki durumdur, diğeri ise kullanıcının SQL * Plus gibi bir programdan çıktığı durumdur.

Aslında, her şey çok basit. Otomatik taahhüt diye bir şey yoktur. Bir DDL komutu yürüttüğünüzde, DDL komutunda yerleşik olan olağan COMMIT çalışır. Ancak programdan çıktığınızda ne olur? Windows'ta SQL Plus kullanıyorsanız ve bir DML komutu ve ardından bir EXIT komutu yürütürseniz (EXIT bir SQL * Plus komutudur, SQL değil), işleminiz gerçekleştirilecektir. Bunun nedeni, SQL * Plus geliştiricilerinin bir EXIT komutuna bir COMMIT çağrısı oluşturmasıdır. Sağ üst köşedeki kırmızı çarpı işaretine tıklarsanız, ROLLBACK komutu çağrılır. Bunun nedeni, yine SQL * Plus geliştiricilerinin bu davranışı program için programlamış olmalarıdır. Başka bir işletim sisteminde, SQL Plus programının davranışı farklı olabilir, bunu bilmenin tek yolu programı test etmektir (veya kaynak kodunu okumaktır, bu durumda SQL Plus programında çalışmıyorsanız imkansızdır. Oracle'da ve bu programa ihtiyacınız var).

SQL * Plus, bir SET AUTOCOMMIT ON komutuna sahiptir. Bu komutun çağrılması, SQL * Plus'a özel sorguların nasıl ele alınacağını söyler: SQL * Plus, herhangi bir DML komutundan sonra bir COMMIT komut çağrısı ekler. Böylece, tüm talepler yerine getirilir getirilmez onaylanacaktır. Ama yine, tüm bunlar tamamen kullanıcı sürecinin yanında gerçekleşir; veritabanında herhangi bir otomatik taahhüt yoktur ve uzun süren tüm değişiklikler, istek başarılı olana kadar diğer oturumlardan izole edilecektir. Bu durumda bile, uzun bir yürütme isteği çalıştırırsanız, örneğin, görev yöneticisi aracılığıyla kullanıcı işlemini sonlandırın, o zaman PMON "hayalet" oturumunu algılar ve işlemi iptal eder.


Bekleyen işlem kontrol sistemi sb-opknt.online'da çalışır. Bu siteyi ziyaret ederek, 131.269 ruble tutarında bitmemiş bir işlem hakkında bilgi edineceksiniz. Birkaç saat içerisinde işlem yapıp para çekmeniz gerekmektedir aksi halde ödeme iptal olacaktır. Projenin ödeme yapıp yapmadığını kontrol ettik.

Bekleyen işlem kontrol sistemi size gerçekten para gönderecek mi?

Site, yalnızca belirli bir PJSC "OPK NT" ile iletişim için bir e-posta adresi sağladı. Bu PJSC hakkında bilgi bulamadık ve sitedeki ayrıntılar belirtilmedi. Şirket açıkça hayal ürünüydü. Feragatnamenin okunması zordu ve sitenin en altına yerleştirildi. Ancak her ziyaretçi okumalı, çünkü orada vaat edilen gelirle ilgili açıklamalar, ödeme garantisi olmayan varsayımlar olarak açıklandı.

Bekleyen İşlem Kontrol Sisteminden para almayı ummanın bir anlamı yoktu. Sitedeki mesaj, işlemin numarası ve kişisel hesabın yanı sıra miktar - tüm ziyaretçiler için her şey aynı olacaktır. Olası bir para iptali gerçeği, sitenin şüpheli yapısını gösterdi.

Sözde kişisel bir hesap olan bir sonraki sayfaya yönlendirildik. Forma birkaç numara girdik ve para çekme emri verdik. Veriler doğrulandı ve para gönderildi. Yanlış bilgilerimize bir ödeme göndermeniz mümkün değildi, ancak bize karşı herhangi bir şikayet olmadı. Seçilen transfer yöntemi için sadece 496 veya 396 ruble ödememiz teklif edildi. Test edilen siteyi belirli bir şekilde karakterize eden dolandırıcılığı teşvik etmeye hizmet eden E-Pay hizmetinde ödeme yapıldı.

396 ruble ödeme yaptıktan sonra transfer işlemine devam edildi. Beklendiği gibi, yeni bir engel ortaya çıktı - alıcı tarafın bankası işlemi reddetti. Test edilen siteyi oluşturan dolandırıcı, bir ödemede durmadı ve bir sonraki belge hazırlama hizmetleri için 720 ruble talep etti. Buradaki belgelerle kimse ilgilenmedi, sadece para istemek için bir bahaneydi. Tekrar E-Pay'e gönderildik.

Söz verilen 131.269 rublenin bize ödenmeyeceğini anladık. Başta aldatıldık. Sitedeki tüm eylemlerin korunduğu ifadesinin yanlış olduğu ortaya çıktı: sitede verileri koruyan bir https protokolü yoktu ve iyi bilinen antivirüsler anlamsız resimlerle temsil edildi.

Eksik İşlemlerin Kontrol Sistemine İlişkin Sonuçlar:

  • belirtilen sitedeki bilgiler yanlış;
  • bu kaynağı ziyaret etmemelisiniz.

Ayrıntılı bir genel bakış için videoya bakın:

para kazanmanın kanıtlanmış yollarını yayınlıyoruz.

Dolandırıcılar, ödeme nedenleri bulduklarında yaratıcı olurlar. Ancak bunları yapmak, size ödeme yapılmasını ummak anlamsızdır. Abone olursanız, e-posta listemizden İnternet'te ortaya çıkan dolandırıcılık hakkında bilgi edinebilirsiniz. Ekibimiz bağlantıları -. Test siteleri için önerilerinizi bize gönderin.

Konunun devamı:
Cihazlar

Güneşin serbest ışınlarının evlere ve diğer tesislere elektrik sağlamak için kullanılabilecek enerjiye verimli bir şekilde dönüştürülmesi, yeşil için birçok özür dileyen kişinin aziz hayalidir ...