{"id":31240,"date":"2025-10-07T17:31:33","date_gmt":"2025-10-07T14:31:33","guid":{"rendered":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/"},"modified":"2025-10-07T17:31:33","modified_gmt":"2025-10-07T14:31:33","slug":"sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi","status":"publish","type":"post","link":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/","title":{"rendered":"SQL&#8217;de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi"},"content":{"rendered":"<p><body><\/p>\n<p>Veritaban\u0131 sistemleri, modern uygulamalar\u0131n bel kemi\u011fidir ve veri tutarl\u0131l\u0131\u011f\u0131, eri\u015filebilirli\u011fi ile g\u00fcvenilirli\u011fi kritik \u00f6neme sahiptir. Peki, birden fazla kullan\u0131c\u0131n\u0131n ayn\u0131 anda veri \u00fczerinde i\u015flem yapt\u0131\u011f\u0131 durumlarda veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc nas\u0131l sa\u011fl\u0131yoruz? \u0130\u015fte bu sorunun cevab\u0131, SQL&#8217;deki i\u015flemler (transactions), kilitlenmeler (deadlocks) ve g\u00fcnl\u00fck tabanl\u0131 kurtarma (log-based recovery) mekanizmalar\u0131nda gizlidir. Bu makalede, bu temel kavramlar\u0131 ba\u015ftan sona ele alacak, kar\u015f\u0131la\u015fabilece\u011finiz sorunlar\u0131 ve \u00e7\u00f6z\u00fcm yollar\u0131n\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131yla ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, veritaban\u0131 y\u00f6netimini daha iyi anlaman\u0131za ve sistemlerinizi daha sa\u011flam hale getirmenize yard\u0131mc\u0131 olmakt\u0131r.<\/p>\n<p>SQL veritaban\u0131 sistemlerinde, bir i\u015flem (transaction) tek bir mant\u0131ksal \u00e7al\u0131\u015fma birimi olarak tan\u0131mlan\u0131r. Bu, bir dizi veritaban\u0131 i\u015fleminin (INSERT, UPDATE, DELETE gibi) ya tamamen ba\u015far\u0131yla tamamland\u0131\u011f\u0131 (commit edildi\u011fi) ya da hi\u00e7birinin ger\u00e7ekle\u015fmemi\u015f gibi geri al\u0131nd\u0131\u011f\u0131 (rollback edildi\u011fi) anlam\u0131na gelir. Peki, neden bu kadar \u00f6nemli? \u00c7\u00fcnk\u00fc veri tutarl\u0131l\u0131\u011f\u0131, \u00f6zellikle e\u015fzamanl\u0131 olarak bir\u00e7ok kullan\u0131c\u0131n\u0131n veritaban\u0131na eri\u015fti\u011fi sistemlerde, i\u015flemler olmadan sa\u011flanamaz. Bir banka hesab\u0131ndan di\u011ferine para transferi gibi karma\u015f\u0131k operasyonlar\u0131 d\u00fc\u015f\u00fcn\u00fcn; bu i\u015flem, al\u0131c\u0131n\u0131n hesab\u0131na para eklenmeden \u00f6nce g\u00f6ndericinin hesab\u0131ndan para \u00e7ekilirse, bir felaketle sonu\u00e7lanabilir. \u0130\u015flemler, tam da bu t\u00fcr durumlar\u0131 \u00f6nlemek i\u00e7in tasarlanm\u0131\u015ft\u0131r.<\/p>\n<h3>ACID \u00d6zellikleri: \u0130\u015flemlerin Temel Ta\u015flar\u0131 Nelerdir?<\/h3>\n<p>\u0130\u015flemlerin g\u00fcvenilirli\u011fini ve tutarl\u0131l\u0131\u011f\u0131n\u0131 sa\u011flayan d\u00f6rt ana \u00f6zellik vard\u0131r. Bunlar, k\u0131saca ACID olarak adland\u0131r\u0131l\u0131r:<\/p>\n<ul>\n<li><strong>Atomicity (Atomiklik):<\/strong> Bir i\u015flemdeki t\u00fcm ad\u0131mlar ya hep birlikte ba\u015far\u0131yla tamamlan\u0131r ya da hi\u00e7biri ger\u00e7ekle\u015fmez. Yukar\u0131daki banka transferi \u00f6rne\u011finde, para ya her iki hesaptan da d\u00fczg\u00fcn bir \u015fekilde aktar\u0131l\u0131r ya da aktar\u0131lmaz; yar\u0131da kalan bir durum s\u00f6z konusu olamaz.<\/li>\n<li><strong>Consistency (Tutarl\u0131l\u0131k):<\/strong> Bir i\u015flem ba\u015flad\u0131ktan sonra veritaban\u0131 tutarl\u0131 bir durumdad\u0131r ve i\u015flem bitti\u011finde de yine tutarl\u0131 bir durumdad\u0131r. Bu, \u00f6nceden tan\u0131mlanm\u0131\u015f t\u00fcm kurallar\u0131n (k\u0131s\u0131tlamalar, tetikleyiciler vb.) i\u015flem sonunda ge\u00e7erli olmaya devam etti\u011fi anlam\u0131na gelir.<\/li>\n<li><strong>Isolation (\u0130zolasyon):<\/strong> E\u015fzamanl\u0131 olarak y\u00fcr\u00fct\u00fclen i\u015flemler birbirini etkilemez. Her i\u015flem, di\u011fer i\u015flemler yokmu\u015f gibi ba\u011f\u0131ms\u0131z olarak y\u00fcr\u00fct\u00fcl\u00fcr. Bir i\u015flemin yapt\u0131\u011f\u0131 de\u011fi\u015fiklikler, bu i\u015flem tamamen commit edilene kadar di\u011fer i\u015flemler taraf\u0131ndan g\u00f6r\u00fclemez.<\/li>\n<li><strong>Durability (Kal\u0131c\u0131l\u0131k):<\/strong> Bir i\u015flem ba\u015far\u0131yla commit edildi\u011finde, yapt\u0131\u011f\u0131 de\u011fi\u015fiklikler kal\u0131c\u0131d\u0131r ve sistem \u00e7\u00f6kse bile kaybolmaz. Bu, genellikle veritaban\u0131n\u0131n i\u015flem g\u00fcnl\u00fcklerine (transaction logs) yazma ve diskte kal\u0131c\u0131 hale getirme ile sa\u011flan\u0131r.<\/li>\n<\/ul>\n<p>Bu \u00f6zellikler sayesinde, veritabanlar\u0131m\u0131z g\u00fcvenilir bir \u015fekilde \u00e7al\u0131\u015f\u0131r. \u00d6zellikle \u00e7ok kullan\u0131c\u0131l\u0131 ortamlarda, e\u015fzamanl\u0131l\u0131\u011f\u0131n y\u00f6netilmesi kritik bir konudur. SQL Server, MySQL, PostgreSQL gibi t\u00fcm modern ili\u015fkisel veritabanlar\u0131, bu ACID \u00f6zelliklerini destekler. Bir i\u015flemi manuel olarak ba\u015flatmak i\u00e7in <code>BEGIN TRANSACTION<\/code> komutunu kullan\u0131r\u0131z. \u0130\u015flem ba\u015far\u0131l\u0131 oldu\u011funda <code>COMMIT<\/code> ile de\u011fi\u015fiklikleri kal\u0131c\u0131 hale getiririz. E\u011fer bir hata olu\u015fursa veya i\u015flem geri al\u0131nmak istenirse, <code>ROLLBACK<\/code> komutu ile t\u00fcm de\u011fi\u015fiklikler iptal edilir ve veritaban\u0131 i\u015flemin ba\u015flang\u0131\u00e7taki durumuna d\u00f6ner.<\/p>\n<p>\u015eimdi bir \u00f6rnekle daha netle\u015ftirelim. Diyelim ki bir e-ticaret siteniz var ve m\u00fc\u015fteri \u00fcr\u00fcn sat\u0131n al\u0131yor. Bu s\u00fcre\u00e7te iki temel ad\u0131m vard\u0131r: \u00fcr\u00fcn sto\u011funu azaltmak ve m\u00fc\u015fterinin bakiyesinden paray\u0131 \u00e7ekmek. Bu iki ad\u0131m\u0131n ayn\u0131 anda ba\u015far\u0131l\u0131 olmas\u0131 gerekir. \u0130\u015fte bir SQL \u00f6rne\u011fi:<\/p>\n<pre><code>\nBEGIN TRANSACTION;\nDECLARE @urunID INT = 123;\nDECLARE @musteriID INT = 456;\nDECLARE @miktar DECIMAL(10, 2) = 50.00;\n\n-- 1. \u00dcr\u00fcn sto\u011funu azalt\nUPDATE Urunler\nSET StokAdedi = StokAdedi - 1\nWHERE UrunID = @urunID AND StokAdedi > 0;\n\nIF @@ROWCOUNT = 0\nBEGIN\n    -- Stok yetersizse i\u015flemi geri al\n    ROLLBACK TRANSACTION;\n    PRINT 'Stok Yetersiz! \u0130\u015flem Geri Al\u0131nd\u0131.';\n    RETURN;\nEND\n\n-- 2. M\u00fc\u015fteri bakiyesinden paray\u0131 \u00e7ek\nUPDATE MusteriBakiyeleri\nSET Bakiye = Bakiye - @miktar\nWHERE MusteriID = @musteriID AND Bakiye >= @miktar;\n\nIF @@ROWCOUNT = 0\nBEGIN\n    -- Bakiye yetersizse i\u015flemi geri al\n    ROLLBACK TRANSACTION;\n    PRINT 'Bakiye Yetersiz! \u0130\u015flem Geri Al\u0131nd\u0131.';\n    RETURN;\nEND\n\n-- Her \u015fey yolundaysa i\u015flemi kal\u0131c\u0131 hale getir\nCOMMIT TRANSACTION;\nPRINT 'Sat\u0131\u015f \u0130\u015flemi Ba\u015far\u0131l\u0131!';\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu \u00f6rnekte, stok veya bakiye yetersizse t\u00fcm i\u015flem geri al\u0131n\u0131r, b\u00f6ylece veritaban\u0131nda tutars\u0131z bir durum olu\u015fmas\u0131 engellenir. \u0130\u015flemlerin bu g\u00fcc\u00fc, uygulamalar\u0131m\u0131z\u0131n g\u00fcvenle \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar. Ancak, e\u015fzamanl\u0131l\u0131\u011f\u0131n y\u00f6netilmesi konusunda i\u015fler bazen kar\u0131\u015fabilir ve kilitlenmeler gibi sorunlara yol a\u00e7abilir.<\/p>\n<h2>SQL'de Kilitlenmeler (Deadlocks) Nas\u0131l Ortaya \u00c7\u0131kar ve Nas\u0131l Tespit Edilir?<\/h2>\n<p>E\u015fzamanl\u0131 i\u015flemlerin veritaban\u0131 kaynaklar\u0131na ayn\u0131 anda eri\u015fmeye \u00e7al\u0131\u015fmas\u0131 durumunda kilitlenmeler (deadlocks) meydana gelebilir. Bir kilitlenme, iki veya daha fazla i\u015flemin birbirlerinin sahip oldu\u011fu kaynaklar\u0131 bekledi\u011fi ve sonsuz bir d\u00f6ng\u00fcye girdi\u011fi bir durumu ifade eder. Bu durum, hi\u00e7bir i\u015flemin ilerleyemedi\u011fi ve veritaban\u0131 sisteminin t\u0131kanmas\u0131na neden olabilece\u011fi anlam\u0131na gelir. Genellikle modern veritaban\u0131 sistemleri, kilitlenmeleri otomatik olarak alg\u0131lar ve bunlardan birini \"kurban\" se\u00e7erek sonland\u0131r\u0131r (rollback yapar), b\u00f6ylece di\u011fer i\u015flemlerin devam etmesini sa\u011flar. Ancak, bir i\u015flemin geri al\u0131nmas\u0131, uygulama taraf\u0131nda hataya ve tekrar deneme ihtiyac\u0131na neden olur, bu da kullan\u0131c\u0131 deneyimini olumsuz etkileyebilir.<\/p>\n<h3>Bir Kilitlenme Senaryosu Nas\u0131l Geli\u015fir?<\/h3>\n<p>En basit kilitlenme senaryosu, iki i\u015flem (Transaction A ve Transaction B) ve iki kaynak (Resource 1 ve Resource 2) aras\u0131nda ya\u015fan\u0131r. Ad\u0131m ad\u0131m inceleyelim:<\/p>\n<ol>\n<li><strong>Transaction A:<\/strong> Resource 1 \u00fczerinde bir kilit (lock) talep eder ve ba\u015far\u0131l\u0131 olur.<\/li>\n<li><strong>Transaction B:<\/strong> Resource 2 \u00fczerinde bir kilit talep eder ve ba\u015far\u0131l\u0131 olur.<\/li>\n<li><strong>Transaction A:<\/strong> \u015eimdi Resource 2 \u00fczerinde bir kilit talep eder. Ancak Resource 2, Transaction B taraf\u0131ndan kilitlenmi\u015f durumdad\u0131r. Transaction A, Transaction B'nin Resource 2 kilidini serbest b\u0131rakmas\u0131n\u0131 bekler.<\/li>\n<li><strong>Transaction B:<\/strong> \u015eimdi Resource 1 \u00fczerinde bir kilit talep eder. Ancak Resource 1, Transaction A taraf\u0131ndan kilitlenmi\u015f durumdad\u0131r. Transaction B, Transaction A'n\u0131n Resource 1 kilidini serbest b\u0131rakmas\u0131n\u0131 bekler.<\/li>\n<\/ol>\n<p>\u0130\u015fte bu noktada kilitlenme olu\u015fmu\u015ftur. Transaction A, Transaction B'nin bitmesini beklerken, Transaction B de Transaction A'n\u0131n bitmesini beklemektedir. Her iki i\u015flem de di\u011ferinin serbest b\u0131rakmas\u0131n\u0131 bekledi\u011fi i\u00e7in sonsuza kadar bu durumda kalacakt\u0131r. Veritaban\u0131 y\u00f6netim sistemi (DBMS) bu durumu alg\u0131lar ve genellikle daha az maliyetli olan bir i\u015flemi \"deadlock victim\" olarak se\u00e7er ve onu geri al\u0131r. Bu, di\u011fer i\u015flemin ilerlemesine olanak tan\u0131r.<\/p>\n<p><strong>Ger\u00e7ek D\u00fcnya Vaka Analizi: Online Bankac\u0131l\u0131k<\/strong><\/p>\n<p>Bir online bankac\u0131l\u0131k sisteminde, iki farkl\u0131 kullan\u0131c\u0131n\u0131n ayn\u0131 anda birbirine para transferi yapmaya \u00e7al\u0131\u015ft\u0131\u011f\u0131n\u0131 d\u00fc\u015f\u00fcnelim:<\/p>\n<ul>\n<li><strong>Kullan\u0131c\u0131 1 (\u0130\u015flem A):<\/strong> Kendi hesab\u0131ndan (Hesap X) Kullan\u0131c\u0131 2'nin hesab\u0131na (Hesap Y) para g\u00f6ndermek istiyor.<\/li>\n<li><strong>Kullan\u0131c\u0131 2 (\u0130\u015flem B):<\/strong> Kendi hesab\u0131ndan (Hesap Y) Kullan\u0131c\u0131 1'in hesab\u0131na (Hesap X) para g\u00f6ndermek istiyor.<\/li>\n<\/ul>\n<p>Olas\u0131 kilitlenme ad\u0131mlar\u0131:<\/p>\n<ol>\n<li>\u0130\u015flem A, Hesap X'i g\u00fcncellerken kilitler.<\/li>\n<li>\u0130\u015flem B, Hesap Y'yi g\u00fcncellerken kilitler.<\/li>\n<li>\u0130\u015flem A, Hesap Y'yi g\u00fcncellemek ister, ancak Hesap Y, \u0130\u015flem B taraf\u0131ndan kilitlidir. \u0130\u015flem A beklemeye ba\u015flar.<\/li>\n<li>\u0130\u015flem B, Hesap X'i g\u00fcncellemek ister, ancak Hesap X, \u0130\u015flem A taraf\u0131ndan kilitlidir. \u0130\u015flem B beklemeye ba\u015flar.<\/li>\n<\/ol>\n<p>Bu senaryo, tipik bir kilitlenme durumunu g\u00f6sterir. Her iki i\u015flem de birbirlerinin sahip oldu\u011fu kayna\u011f\u0131 bekledi\u011fi i\u00e7in ilerleyemezler. Veritaban\u0131 sistemi birini geri alarak bu d\u00f6ng\u00fcy\u00fc k\u0131rar. Bu durum, kullan\u0131c\u0131lardan birinin i\u015fleminin ba\u015far\u0131s\u0131z oldu\u011fu anlam\u0131na gelir ve tekrar denemesi gerekir.<\/p>\n<h3>Kilitlenmeleri Nas\u0131l Tespit Ederiz?<\/h3>\n<p>Kilitlenmelerin tespiti ve analizi, performans\u0131 ve kullan\u0131c\u0131 deneyimini iyile\u015ftirmek i\u00e7in hayati \u00f6neme sahiptir. Veritaban\u0131 sistemleri genellikle kilitlenmeleri alg\u0131lad\u0131\u011f\u0131nda kendi hata g\u00fcnl\u00fcklerine (error logs) bilgi yazar. SQL Server gibi sistemlerde, <code>sp_who2<\/code>, <code>sys.dm_tran_locks<\/code> veya <code>sys.dm_os_waiting_tasks<\/code> gibi dinamik y\u00f6netim g\u00f6r\u00fcn\u00fcmleri (DMV'ler) kullanarak mevcut kilitleri ve bekleyen g\u00f6revleri inceleyebiliriz. Ayr\u0131ca, SQL Server Profiler veya Extended Events gibi ara\u00e7lar, kilitlenme olaylar\u0131n\u0131 ger\u00e7ek zamanl\u0131 olarak izlemek ve detayl\u0131 kilitlenme grafikleri olu\u015fturmak i\u00e7in kullan\u0131labilir.<\/p>\n<p>\u00d6rne\u011fin, mevcut kilitlenmeleri ve bekleyen kaynaklar\u0131 g\u00f6rmek i\u00e7in a\u015fa\u011f\u0131daki gibi sorgular kullanabiliriz:<\/p>\n<pre><code>\n-- Mevcut kilitleri g\u00f6sterir\nSELECT\n    request_session_id,\n    resource_type,\n    resource_database_id,\n    resource_associated_entity_id,\n    request_mode,\n    request_status,\n    request_owner_type,\n    resource_description\nFROM\n    sys.dm_tran_locks\nWHERE\n    request_status = 'WAIT';\n\n-- Hangi SPID'lerin hangi kilitlerde bekledi\u011fini g\u00f6sterir (SQL Server \u00f6rne\u011fi)\nSELECT\n    t1.resource_type,\n    t1.resource_database_id,\n    t1.resource_associated_entity_id,\n    t1.request_mode,\n    t1.request_session_id,\n    t2.blocking_session_id,\n    t2.wait_type,\n    t2.wait_duration_ms\nFROM\n    sys.dm_tran_locks as t1\nINNER JOIN sys.dm_os_waiting_tasks as t2\n    ON t1.request_session_id = t2.session_id;\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu sorgular, hangi oturumlar\u0131n hangi kaynaklar\u0131 kilitledi\u011fini ve hangi oturumlar\u0131n kilitli kaynaklar \u00fczerinde bekledi\u011fini anlamam\u0131za yard\u0131mc\u0131 olur. Kilitlenme sorunlar\u0131n\u0131 gidermenin ilk ad\u0131m\u0131, bu sorunlar\u0131n nerede ve neden ortaya \u00e7\u0131kt\u0131\u011f\u0131n\u0131 do\u011fru bir \u015fekilde te\u015fhis etmektir. Bir sonraki b\u00f6l\u00fcmde, kilitlenmeleri \u00f6nlemek veya etkilerini azaltmak i\u00e7in uygulayabilece\u011fimiz stratejileri ke\u015ffedece\u011fiz.<\/p>\n<h2>Kilitlenmelerle Ba\u015fa \u00c7\u0131kma Stratejileri: Performans ve G\u00fcvenilirlik \u0130\u00e7in Ne Yapmal\u0131y\u0131z?<\/h2>\n<p>Kilitlenmelerin veritaban\u0131 performans\u0131 ve uygulama g\u00fcvenilirli\u011fi \u00fczerindeki olumsuz etkilerini en aza indirmek i\u00e7in \u00e7e\u015fitli stratejiler mevcuttur. Bu stratejiler, hem veritaban\u0131 tasar\u0131m\u0131 hem de uygulama kodlamas\u0131 a\u015famas\u0131nda dikkate al\u0131nmal\u0131d\u0131r. Amac\u0131m\u0131z, kilitlenmeleri tamamen ortadan kald\u0131rmak m\u00fcmk\u00fcn olmasa bile, olu\u015fma s\u0131kl\u0131\u011f\u0131n\u0131 ve etkisini minimize etmektir.<\/p>\n<h3>Kilitlenmeleri \u00d6nleme ve Azaltma Y\u00f6ntemleri Nelerdir?<\/h3>\n<ol>\n<li><strong>Kaynaklara Her Zaman Ayn\u0131 S\u0131rayla Eri\u015fin:<\/strong> Bu, kilitlenmeleri \u00f6nlemenin en etkili yollar\u0131ndan biridir. E\u011fer t\u00fcm i\u015flemler, birden fazla kaynak \u00fczerinde kilit talep ederken her zaman ayn\u0131 s\u0131ray\u0131 takip ederse, d\u00f6ng\u00fcsel bir bekleme durumu olu\u015fma olas\u0131l\u0131\u011f\u0131 \u00f6nemli \u00f6l\u00e7\u00fcde azal\u0131r. \u00d6rne\u011fin, e\u011fer i\u015flemler her zaman \u00f6nce 'Hesaplar' tablosunu, sonra 'Hareketler' tablosunu kilitlerse, bir i\u015flem 'Hareketler' tablosunu kilitli tutarken 'Hesaplar' tablosunu bekleyemez.<\/li>\n<li><strong>\u0130\u015flemleri M\u00fcmk\u00fcn Oldu\u011funca K\u0131sa ve Etkili Tutun:<\/strong> Uzun s\u00fcreli i\u015flemler, kaynaklar\u0131 daha uzun s\u00fcre kilitli tutarak kilitlenme olas\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. \u0130\u015flemleri atomik tutmaya \u00f6zen g\u00f6sterin; yani sadece ger\u00e7ekten bir i\u015flem biriminin par\u00e7as\u0131 olan ad\u0131mlar\u0131 dahil edin. Gereksiz sorgular\u0131 veya kullan\u0131c\u0131dan uzun s\u00fcre beklenen girdileri i\u015flem i\u00e7ine dahil etmekten ka\u00e7\u0131n\u0131n.<\/li>\n<li><strong>\u0130ndeksleri Do\u011fru Kullan\u0131n:<\/strong> \u0130yi tasarlanm\u0131\u015f indeksler, sorgular\u0131n daha h\u0131zl\u0131 \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flar ve bu da kilitlerin daha k\u0131sa s\u00fcre tutulmas\u0131na yard\u0131mc\u0131 olur. Bir sorgu, veritaban\u0131nda \u00e7ok fazla veri taramak zorunda kald\u0131\u011f\u0131nda, daha geni\u015f bir alan\u0131 kilitler ve bu kilitleri daha uzun s\u00fcre tutar. Uygun indeksler, sadece ilgili verilere odaklan\u0131lmas\u0131n\u0131 sa\u011flayarak kilit kapsam\u0131n\u0131 daralt\u0131r.<\/li>\n<li><strong>\u0130zolasyon Seviyelerini Anlay\u0131n ve Ak\u0131ll\u0131ca Kullan\u0131n:<\/strong> Veritaban\u0131 izolasyon seviyeleri (READ COMMITTED, REPEATABLE READ, SERIALIZABLE gibi), i\u015flemlerin birbirlerinin de\u011fi\u015fikliklerini ne \u00f6l\u00e7\u00fcde g\u00f6rebilece\u011fini belirler. Daha y\u00fcksek izolasyon seviyeleri (\u00f6rn. SERIALIZABLE), daha fazla veri tutarl\u0131l\u0131\u011f\u0131 sa\u011flarken, e\u015fzamanl\u0131l\u0131\u011f\u0131 azalt\u0131r ve kilitlenme olas\u0131l\u0131\u011f\u0131n\u0131 art\u0131r\u0131r. Uygulaman\u0131z\u0131n gereksinimlerine g\u00f6re en d\u00fc\u015f\u00fck uygun izolasyon seviyesini kullanmak, kilitlenme riskini azaltabilir. Genellikle varsay\u0131lan <code>READ COMMITTED<\/code> \u00e7o\u011fu durum i\u00e7in iyi bir dengedir.<\/li>\n<li><strong>Kaynak Taleplerini Azalt\u0131n:<\/strong> Tek bir i\u015flemde \u00e7ok fazla kayna\u011f\u0131 kilitlemek yerine, i\u015f y\u00fck\u00fcn\u00fc daha k\u00fc\u00e7\u00fck, ba\u011f\u0131ms\u0131z i\u015flemlere b\u00f6lmeyi d\u00fc\u015f\u00fcn\u00fcn. \u00d6rne\u011fin, bir toplu g\u00fcncelleme i\u015flemi, t\u00fcm tabloyu kilitlemek yerine, daha k\u00fc\u00e7\u00fck veri k\u00fcmeleri \u00fczerinde \u00e7al\u0131\u015facak \u015fekilde par\u00e7alara ayr\u0131labilir.<\/li>\n<\/ol>\n<p><strong>Uzman \u0130pucu:<\/strong> Bir\u00e7ok veritaban\u0131, <code>WITH (NOLOCK)<\/code> veya <code>READ UNCOMMITTED<\/code> izolasyon seviyesi gibi se\u00e7enekler sunar. Bunlar, okuma i\u015flemlerinin kilitleri atlamas\u0131n\u0131 ve kilitlenme riskini azaltmas\u0131n\u0131 sa\u011flayabilir. Ancak, bu se\u00e7enekler \"kirli okumalara\" (uncommitted data reading) yol a\u00e7abilece\u011finden, yaln\u0131zca veri tutarl\u0131l\u0131\u011f\u0131n\u0131n en kritik olmad\u0131\u011f\u0131 durumlarda dikkatli kullan\u0131lmal\u0131d\u0131r.<\/p>\n<h3>Uygulama Katman\u0131nda Yeniden Deneme (Retry Logic) Mant\u0131\u011f\u0131 Nas\u0131l Uygulan\u0131r?<\/h3>\n<p>Kilitlenmeler tamamen \u00f6nlenemese de, meydana geldiklerinde uygulama taraf\u0131nda bunu ele alman\u0131n yollar\u0131 vard\u0131r. En yayg\u0131n stratejilerden biri, kilitlenme hatas\u0131 alan i\u015flemleri otomatik olarak yeniden denemektir. Veritaban\u0131, bir i\u015flemi kilitlenme kurban\u0131 se\u00e7ip geri ald\u0131\u011f\u0131nda, uygulamaya genellikle belirli bir hata kodu (\u00f6rne\u011fin, SQL Server'da 1205) d\u00f6nd\u00fcr\u00fcr. Uygulama bu hata kodunu yakalad\u0131\u011f\u0131nda, k\u0131sa bir bekleme s\u00fcresinden sonra i\u015flemi tekrar denemeli, ancak belirli bir say\u0131da deneme ba\u015far\u0131s\u0131z olursa kullan\u0131c\u0131ya hata mesaj\u0131 vermelidir.<\/p>\n<p>Bu yeniden deneme mant\u0131\u011f\u0131, \u00f6zellikle yo\u011fun sistemlerde kullan\u0131c\u0131 deneyimini \u00f6nemli \u00f6l\u00e7\u00fcde iyile\u015ftirir \u00e7\u00fcnk\u00fc kullan\u0131c\u0131, k\u00fc\u00e7\u00fck, ge\u00e7ici bir kilitlenme nedeniyle i\u015fleminin hemen ba\u015far\u0131s\u0131z oldu\u011funu g\u00f6rmez. Yeniden denemeler aras\u0131nda hafif bir rastgele gecikme (exponential backoff) eklemek, ayn\u0131 anda tekrar kilitlenme ya\u015fama olas\u0131l\u0131\u011f\u0131n\u0131 azaltabilir.<\/p>\n<pre><code>\n\/\/ C# \u00f6rne\u011fi (pseudocode)\npublic void TransferPara(int kaynakHesapId, int hedefHesapId, decimal miktar)\n{\n    int denemeSayisi = 0;\n    int maxDeneme = 5;\n    bool basarili = false;\n\n    while (denemeSayisi < maxDeneme &#038;&#038; !basarili)\n    {\n        try\n        {\n            using (var connection = new SqlConnection(connectionString))\n            {\n                connection.Open();\n                using (var transaction = connection.BeginTransaction())\n                {\n                    \/\/ SQL Komutlar\u0131: Kaynak hesaptan d\u00fc\u015f, hedef hesaba ekle\n                    \/\/ \u00d6rne\u011fin:\n                    \/\/ new SqlCommand(\"UPDATE Hesaplar SET Bakiye = Bakiye - @miktar WHERE HesapID = @kaynakHesapId\", connection, transaction).ExecuteNonQuery();\n                    \/\/ new SqlCommand(\"UPDATE Hesaplar SET Bakiye = Bakiye + @miktar WHERE HesapID = @hedefHesapId\", connection, transaction).ExecuteNonQuery();\n\n                    transaction.Commit();\n                    basarili = true;\n                    Console.WriteLine(\"\u0130\u015flem ba\u015far\u0131yla tamamland\u0131.\");\n                }\n            }\n        }\n        catch (SqlException ex)\n        {\n            \/\/ Kilitlenme hatas\u0131 (SQL Server'da 1205)\n            if (ex.Number == 1205)\n            {\n                denemeSayisi++;\n                Console.WriteLine($\"Kilitlenme tespit edildi, yeniden deniyor... ({denemeSayisi}\/{maxDeneme})\");\n                \/\/ Rastgele bir s\u00fcre bekle (exponential backoff)\n                Thread.Sleep(TimeSpan.FromMilliseconds(50 * Math.Pow(2, denemeSayisi)));\n            }\n            else\n            {\n                Console.WriteLine($\"Bir hata olu\u015ftu: {ex.Message}\");\n                throw; \/\/ Di\u011fer hatalar\u0131 yeniden f\u0131rlat\n            }\n        }\n    }\n\n    if (!basarili)\n    {\n        Console.WriteLine(\"\u0130\u015flem defalarca ba\u015far\u0131s\u0131z oldu, l\u00fctfen daha sonra tekrar deneyin.\");\n    }\n}\n<\/pre>\n<p><\/code><\/p>\n<p>Bu uygulama taraf\u0131 yakla\u015f\u0131m\u0131, veritaban\u0131 katman\u0131ndaki kilitlenmeleri tamamen engellemese de, kullan\u0131c\u0131lar\u0131n bu durumdan en az etkilenmesini sa\u011flayarak sistemin genel kullan\u0131labilirli\u011fini ve performans\u0131n\u0131 art\u0131r\u0131r. Sonu\u00e7 olarak, kilitlenmelerle ba\u015fa \u00e7\u0131kmak, hem dikkatli veritaban\u0131 tasar\u0131m\u0131 hem de dayan\u0131kl\u0131 uygulama mimarisi gerektiren \u00e7ok y\u00f6nl\u00fc bir \u00e7abad\u0131r.<\/p>\n<h2>G\u00fcnl\u00fck Tabanl\u0131 Kurtarma (Log-Based Recovery) Nedir ve Veri B\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc Nas\u0131l Sa\u011flar?<\/h2>\n<p>Veritaban\u0131 sistemlerinin temel hedeflerinden biri, herhangi bir felaket (sistem \u00e7\u00f6kmesi, elektrik kesintisi, donan\u0131m ar\u0131zas\u0131 vb.) durumunda bile veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc ve kal\u0131c\u0131l\u0131\u011f\u0131n\u0131 garanti etmektir. \u0130\u015fte bu noktada g\u00fcnl\u00fck tabanl\u0131 kurtarma (log-based recovery) mekanizmalar\u0131 devreye girer. Bu sistemler, veritaban\u0131nda yap\u0131lan her de\u011fi\u015fikli\u011fi (insert, update, delete) detayl\u0131 bir \u015fekilde bir i\u015flem g\u00fcnl\u00fc\u011f\u00fcne (transaction log) kaydeder. Bu kay\u0131tlar, veritaban\u0131 \u00e7\u00f6kse bile, sistemin son tutarl\u0131 durumuna geri d\u00f6nebilmesini sa\u011flar.<\/p>\n<h3>Write-Ahead Logging (WAL) Prensibi Nedir?<\/h3>\n<p>G\u00fcnl\u00fck tabanl\u0131 kurtarman\u0131n merkezinde, Write-Ahead Logging (WAL) prensibi yatar. WAL, herhangi bir veritaban\u0131 sayfas\u0131ndaki bir de\u011fi\u015fiklik diskteki ana veri dosyas\u0131na yaz\u0131lmadan \u00f6nce, bu de\u011fi\u015fikli\u011fin a\u00e7\u0131klamas\u0131n\u0131 i\u00e7eren g\u00fcnl\u00fck kayd\u0131n\u0131n (log record) diske yaz\u0131lmas\u0131n\u0131 zorunlu k\u0131lar. Bu prensip, veritaban\u0131 kurtarman\u0131n en \u00f6nemli garantisidir. E\u011fer sistem bir anda \u00e7\u00f6kerse ve baz\u0131 de\u011fi\u015fiklikler hen\u00fcz ana veri dosyas\u0131na yaz\u0131lmam\u0131\u015fsa, g\u00fcnl\u00fck dosyas\u0131 sayesinde bu de\u011fi\u015fiklikler yeniden uygulanabilir (REDO) veya k\u0131smen yap\u0131lm\u0131\u015f i\u015flemler geri al\u0131nabilir (UNDO).<\/p>\n<p>Her bir g\u00fcnl\u00fck kayd\u0131 tipik olarak a\u015fa\u011f\u0131daki bilgileri i\u00e7erir:<\/p>\n<ul>\n<li>\u0130\u015flem Kimli\u011fi (Transaction ID): Hangi i\u015flemin bu de\u011fi\u015fikli\u011fi yapt\u0131\u011f\u0131n\u0131 belirtir.<\/li>\n<li>De\u011fi\u015fiklik Tipi: INSERT, UPDATE, DELETE gibi.<\/li>\n<li>De\u011fi\u015ftirilen Veri Sayfas\u0131: Hangi veri sayfas\u0131n\u0131n etkilendi\u011fini belirtir.<\/li>\n<li>Eski De\u011fer (Old Value): De\u011fi\u015fiklik \u00f6ncesindeki verinin de\u011feri.<\/li>\n<li>Yeni De\u011fer (New Value): De\u011fi\u015fiklik sonras\u0131 verinin de\u011feri.<\/li>\n<li>\u0130\u015flem Sonras\u0131 Durumu (LSN - Log Sequence Number): G\u00fcnl\u00fck dosyas\u0131ndaki kayd\u0131n benzersiz s\u0131ras\u0131.<\/li>\n<\/ul>\n<p>Bu detayl\u0131 kay\u0131tlar sayesinde, veritaban\u0131 motoru herhangi bir anda veritaban\u0131n\u0131n hangi durumda oldu\u011funu tam olarak bilebilir ve gerekti\u011finde tutarl\u0131 bir duruma geri d\u00f6nebilir.<\/p>\n<h3>Checkpoints ve Kurtarma S\u00fcreci: REDO ve UNDO \u0130\u015flemleri<\/h3>\n<p>G\u00fcnl\u00fck dosyalar\u0131 s\u00fcrekli b\u00fcy\u00fcd\u00fc\u011f\u00fc i\u00e7in, veritaban\u0131 motoru belirli aral\u0131klarla \"checkpoint\" ad\u0131 verilen bir i\u015flem yapar. Bir checkpoint, o ana kadar bellekteki t\u00fcm kirli sayfalar\u0131 (yani diskteki versiyonundan farkl\u0131 olan sayfalar\u0131) diske yaz\u0131lmaya zorlar ve bu durumu g\u00fcnl\u00fck dosyas\u0131nda i\u015faretler. Checkpointler, kurtarma s\u00fcresini \u00f6nemli \u00f6l\u00e7\u00fcde k\u0131salt\u0131r \u00e7\u00fcnk\u00fc sistem \u00e7\u00f6kt\u00fc\u011f\u00fcnde, kurtarma i\u015flemi son checkpoint'ten ba\u015flamak zorunda kal\u0131r, g\u00fcnl\u00fck dosyas\u0131n\u0131n ba\u015f\u0131ndan de\u011fil. Bu, uzun s\u00fcreli bir kurtarma i\u015flemi yerine daha h\u0131zl\u0131 bir geri d\u00f6n\u00fc\u015f sa\u011flar.<\/p>\n<p>Bir sistem \u00e7\u00f6kmesi sonras\u0131 veritaban\u0131 ba\u015flat\u0131ld\u0131\u011f\u0131nda, kurtarma s\u00fcreci genellikle \u00fc\u00e7 a\u015famadan olu\u015fur:<\/p>\n<ol>\n<li><strong>Analysis (Analiz):<\/strong> Veritaban\u0131, g\u00fcnl\u00fck dosyas\u0131n\u0131 en son checkpoint'ten itibaren tarar ve hangi i\u015flemlerin ba\u015flad\u0131\u011f\u0131n\u0131, hangilerinin commit edildi\u011fini ve hangilerinin hala aktif oldu\u011funu belirler. Bu a\u015famada, hangi i\u015flemlerin REDO edilmesi, hangilerinin UNDO edilmesi gerekti\u011fi listelenir.<\/li>\n<li><strong>REDO (Yeniden Uygulama):<\/strong> Checkpoint'ten sonra commit edilmi\u015f ancak hen\u00fcz veri dosyalar\u0131na yaz\u0131lmam\u0131\u015f t\u00fcm de\u011fi\u015fiklikler, g\u00fcnl\u00fck dosyas\u0131ndaki bilgiler kullan\u0131larak veritaban\u0131na yeniden uygulan\u0131r. Bu, kal\u0131c\u0131l\u0131k (durability) \u00f6zelli\u011finin sa\u011flanmas\u0131 i\u00e7in hayati \u00f6nem ta\u015f\u0131r.<\/li>\n<li><strong>UNDO (Geri Alma):<\/strong> \u00c7\u00f6kme an\u0131nda hala aktif olan veya commit edilmemi\u015f t\u00fcm i\u015flemler, g\u00fcnl\u00fck dosyas\u0131ndaki \"eski de\u011ferler\" kullan\u0131larak geri al\u0131n\u0131r. Bu, atomiklik (atomicity) ve tutarl\u0131l\u0131k (consistency) \u00f6zelliklerinin sa\u011flanmas\u0131na yard\u0131mc\u0131 olur.<\/li>\n<\/ol>\n<p>Bu s\u00fcre\u00e7, veritaban\u0131n\u0131n \u00e7\u00f6kme \u00f6ncesindeki tutarl\u0131 durumuna geri d\u00f6nmesini ve hi\u00e7bir onaylanm\u0131\u015f verinin kaybolmamas\u0131n\u0131 sa\u011flar. G\u00fcnl\u00fck tabanl\u0131 kurtarma, modern veritaban\u0131 sistemlerinin neden bu kadar g\u00fcvenilir oldu\u011funun temel nedenidir. Bu mekanizma olmasayd\u0131, her sistem \u00e7\u00f6kmesi potansiyel bir veri felaketi anlam\u0131na gelirdi. Bu g\u00fcnl\u00fck dosyalar\u0131 ayn\u0131 zamanda yedekleme ve felaket kurtarma stratejilerinde de merkezi bir rol oynar.<\/p>\n<h2>Veritaban\u0131 Kurtarma Modelleri: \u0130htiya\u00e7lar\u0131n\u0131za En Uygun Se\u00e7im Nas\u0131l Yap\u0131l\u0131r?<\/h2>\n<p>Veritaban\u0131 kurtarma modelleri, veritaban\u0131n\u0131z\u0131n yedeklenmesi ve bir felaket durumunda kurtar\u0131lmas\u0131 i\u00e7in nas\u0131l davranaca\u011f\u0131n\u0131 belirler. \u00d6zellikle SQL Server gibi sistemlerde, farkl\u0131 kurtarma modelleri, veri kayb\u0131 tolerans\u0131 ve yedekleme esnekli\u011fi a\u00e7\u0131s\u0131ndan farkl\u0131 se\u00e7enekler sunar. Do\u011fru kurtarma modelini se\u00e7mek, i\u015fletmenizin veri b\u00fct\u00fcnl\u00fc\u011f\u00fc gereksinimleri ve kurtarma zaman\u0131 hedefleri (RTO - Recovery Time Objective, RPO - Recovery Point Objective) ile do\u011frudan ili\u015fkilidir.<\/p>\n<h3>FULL, SIMPLE ve BULK_LOGGED Kurtarma Modelleri Aras\u0131ndaki Farklar<\/h3>\n<p>SQL Server \u00f6zelinde \u00fc\u00e7 ana kurtarma modeli bulunur:<\/p>\n<ol>\n<li><strong>FULL Recovery Model (Tam Kurtarma Modeli):<\/strong>\n<ul>\n<li><strong>Ne yapar:<\/strong> T\u00fcm i\u015flem g\u00fcnl\u00fcklerini eksiksiz olarak kaydeder. Bu modelde, veri de\u011fi\u015fiklikleri ve i\u015flem g\u00fcnl\u00fckleri birbirine ba\u011f\u0131ml\u0131d\u0131r.<\/li>\n<li><strong>Avantajlar\u0131:<\/strong> Herhangi bir noktaya (point-in-time) kurtarma yapma olana\u011f\u0131 sunar. Bu, belirli bir zamana kadar veri kayb\u0131n\u0131 en aza indirmek i\u00e7in en esnek se\u00e7enektir. Felaket durumunda, son yedekten ve ard\u0131ndan gelen t\u00fcm i\u015flem g\u00fcnl\u00fc\u011f\u00fc yedeklerinden faydalanarak veritaban\u0131n\u0131z\u0131 \u00e7\u00f6kme an\u0131na kadar kurtarabilirsiniz.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> \u0130\u015flem g\u00fcnl\u00fc\u011f\u00fc dosyalar\u0131 zamanla b\u00fcy\u00fcyebilir ve d\u00fczenli olarak i\u015flem g\u00fcnl\u00fc\u011f\u00fc yedeklerinin al\u0131nmas\u0131n\u0131 ve k\u00fc\u00e7\u00fclt\u00fclmesini gerektirir. Bu, daha fazla y\u00f6netim y\u00fck\u00fc ve depolama alan\u0131 gerektirir.<\/li>\n<li><strong>Kimler i\u00e7in:<\/strong> Veri kayb\u0131na tolerans\u0131n s\u0131f\u0131ra yak\u0131n oldu\u011fu, kritik i\u015f uygulamalar\u0131 (bankac\u0131l\u0131k, e-ticaret, finans sistemleri) i\u00e7in idealdir.<\/li>\n<\/ul>\n<\/li>\n<li><strong>SIMPLE Recovery Model (Basit Kurtarma Modeli):<\/strong>\n<ul>\n<li><strong>Ne yapar:<\/strong> \u0130\u015flem g\u00fcnl\u00fc\u011f\u00fc, bir checkpoint ger\u00e7ekle\u015fti\u011finde otomatik olarak k\u00fc\u00e7\u00fcl\u00fcr (truncate edilir). Yaln\u0131zca en son checkpoint'e kadar olan bilgileri tutar.<\/li>\n<li><strong>Avantajlar\u0131:<\/strong> \u0130\u015flem g\u00fcnl\u00fc\u011f\u00fc y\u00f6netimi gereksizdir, otomatik olarak k\u00fc\u00e7\u00fclt\u00fcld\u00fc\u011f\u00fc i\u00e7in depolama alan\u0131 konusunda daha az endi\u015fe duyulur. Daha az y\u00f6netim y\u00fck\u00fc vard\u0131r.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> Sadece en son tam veya diferansiyel yede\u011fe kadar kurtarma yap\u0131labilir. Veritaban\u0131n\u0131n \u00e7\u00f6kmesi durumunda, son yedekten bu yana yap\u0131lan t\u00fcm de\u011fi\u015fiklikler kaybolur. Nokta kurtarma (point-in-time recovery) m\u00fcmk\u00fcn de\u011fildir.<\/li>\n<li><strong>Kimler i\u00e7in:<\/strong> Test ve geli\u015ftirme veritabanlar\u0131 veya veri kayb\u0131n\u0131n kabul edilebilir oldu\u011fu, daha az kritik uygulamalar i\u00e7in uygundur.<\/li>\n<\/ul>\n<\/li>\n<li><strong>BULK_LOGGED Recovery Model (Toplu Kay\u0131t Kurtarma Modeli):<\/strong>\n<ul>\n<li><strong>Ne yapar:<\/strong> FULL modeline benzer, ancak baz\u0131 b\u00fcy\u00fck veri i\u015flemleri (\u00f6rne\u011fin, <code>BULK INSERT<\/code>, <code>SELECT INTO<\/code>, indeks yeniden olu\u015fturma) i\u00e7in g\u00fcnl\u00fck kayd\u0131n\u0131 minimuma indirir (minimally logged).<\/li>\n<li><strong>Avantajlar\u0131:<\/strong> FULL modelinin bir\u00e7ok avantaj\u0131n\u0131 sunarken, belirli toplu i\u015flemler s\u0131ras\u0131nda disk G\/\u00c7 y\u00fck\u00fcn\u00fc ve i\u015flem g\u00fcnl\u00fc\u011f\u00fc boyutunu azalt\u0131r. Daha h\u0131zl\u0131 toplu veri y\u00fcklemeleri sa\u011flar.<\/li>\n<li><strong>Dezavantajlar\u0131:<\/strong> Toplu i\u015flemler s\u0131ras\u0131nda olu\u015facak bir \u00e7\u00f6kmede, nokta kurtarma (point-in-time recovery) toplu i\u015flemin tamamlanmas\u0131ndan \u00f6nceki son i\u015flem g\u00fcnl\u00fc\u011f\u00fc yede\u011fine kadar m\u00fcmk\u00fcnd\u00fcr. Toplu i\u015flemin yap\u0131ld\u0131\u011f\u0131 s\u00fcrece nokta kurtarma imkan\u0131 k\u0131smen kaybedilir.<\/li>\n<li><strong>Kimler i\u00e7in:<\/strong> B\u00fcy\u00fck veri y\u00fcklemeleri veya indeks bak\u0131m\u0131 yap\u0131lan ancak yine de veri kayb\u0131n\u0131 en aza indirmek isteyen sistemler i\u00e7in bir ara \u00e7\u00f6z\u00fcm sunar.<\/li>\n<\/ul>\n<\/li>\n<\/ol>\n<p><strong>Uzman \u0130pucu:<\/strong> Kurtarma modeli se\u00e7imi, uygulaman\u0131z\u0131n RPO (Recovery Point Objective - ne kadar veri kayb\u0131na dayanabilece\u011finiz) ve RTO (Recovery Time Objective - veritaban\u0131n\u0131 ne kadar s\u00fcrede \u00e7al\u0131\u015f\u0131r hale getirebilece\u011finiz) hedeflerine g\u00f6re yap\u0131lmal\u0131d\u0131r. Kritik i\u015f y\u00fckleri i\u00e7in genellikle FULL kurtarma modeli tercih edilir.<\/p>\n<h3>Yedekleme Stratejileri ve Felaket Kurtarma Senaryolar\u0131<\/h3>\n<p>Kurtarma modelleriyle birlikte, etkili bir yedekleme stratejisi de olu\u015fturman\u0131z gerekir:<\/p>\n<ul>\n<li><strong>Tam (Full) Yedeklemeler:<\/strong> Veritaban\u0131n\u0131n tamam\u0131n\u0131n bir kopyas\u0131d\u0131r. T\u00fcm veriyi ve g\u00fcnl\u00fck dosyas\u0131n\u0131n bir k\u0131sm\u0131n\u0131 i\u00e7erir.<\/li>\n<li><strong>Diferansiyel (Differential) Yedeklemeler:<\/strong> Son tam yedeklemeden bu yana de\u011fi\u015fen t\u00fcm verileri i\u00e7erir. Daha k\u00fc\u00e7\u00fck boyutludur ve daha h\u0131zl\u0131 al\u0131n\u0131r. Kurtarma i\u00e7in en son tam yede\u011fe ve en son diferansiyel yede\u011fe ihtiya\u00e7 duyar.<\/li>\n<li><strong>\u0130\u015flem G\u00fcnl\u00fc\u011f\u00fc (Transaction Log) Yedeklemeleri:<\/strong> Yaln\u0131zca FULL veya BULK_LOGGED kurtarma modelinde m\u00fcmk\u00fcnd\u00fcr. Son i\u015flem g\u00fcnl\u00fc\u011f\u00fc yede\u011finden bu yana olu\u015fan t\u00fcm g\u00fcnl\u00fck kay\u0131tlar\u0131n\u0131 i\u00e7erir. Nokta kurtarma i\u00e7in vazge\u00e7ilmezdir.<\/li>\n<\/ul>\n<p>Bir felaket kurtarma senaryosunda, veritaban\u0131n\u0131 yeniden kurmak i\u00e7in \u00f6nce en son tam yedekten, ard\u0131ndan varsa en son diferansiyel yedekten ve son olarak da \u00e7\u00f6kme an\u0131na kadar olan t\u00fcm ard\u0131\u015f\u0131k i\u015flem g\u00fcnl\u00fc\u011f\u00fc yedeklerinden faydalan\u0131l\u0131r. \u0130\u015fte bir <code>RESTORE DATABASE<\/code> komutu \u00f6rne\u011fi:<\/p>\n<pre><code>\n-- Tam yede\u011fi geri y\u00fckle (NO_RECOVERY ile, \u00e7\u00fcnk\u00fc daha fazla g\u00fcnl\u00fck uygulanacak)\nRESTORE DATABASE YourDatabaseName\nFROM DISK = 'C:\\Backup\\YourDatabaseName_Full.bak'\nWITH NORECOVERY, REPLACE;\n\n-- Diferansiyel yede\u011fi geri y\u00fckle (e\u011fer varsa, yine NO_RECOVERY ile)\n-- RESTORE DATABASE YourDatabaseName\n-- FROM DISK = 'C:\\Backup\\YourDatabaseName_Diff.bak'\n-- WITH NORECOVERY;\n\n-- \u0130\u015flem g\u00fcnl\u00fc\u011f\u00fc yedeklerini s\u0131rayla uygula\nRESTORE LOG YourDatabaseName\nFROM DISK = 'C:\\Backup\\YourDatabaseName_Log1.trn'\nWITH NORECOVERY;\n\nRESTORE LOG YourDatabaseName\nFROM DISK = 'C:\\Backup\\YourDatabaseName_Log2.trn'\nWITH NORECOVERY;\n\n-- Son i\u015flem g\u00fcnl\u00fc\u011f\u00fc yede\u011fini ve kurtarma i\u015flemini tamamla\n-- (Burada TO_DATE veya STOPAT se\u00e7enekleri ile nokta kurtarma yap\u0131labilir)\nRESTORE LOG YourDatabaseName\nFROM DISK = 'C:\\Backup\\YourDatabaseName_Log_Last.trn'\nWITH RECOVERY; -- Bu, veritaban\u0131n\u0131 online hale getirir\n\n<\/pre>\n<p><\/code><\/p>\n<p>Bu ad\u0131mlar, veritaban\u0131n\u0131z\u0131 felaketten kurtarman\u0131n temelini olu\u015fturur. D\u00fczenli test yedeklemeleri ve kurtarma senaryolar\u0131, bu s\u00fcrecin sorunsuz \u00e7al\u0131\u015fmas\u0131n\u0131 sa\u011flamak i\u00e7in kritik \u00f6neme sahiptir. Veritaban\u0131 y\u00f6neticilerinin en \u00f6nemli sorumluluklar\u0131ndan biri, uygun kurtarma modelini se\u00e7mek ve belirlenen RPO\/RTO hedeflerini kar\u015f\u0131layacak sa\u011flam bir yedekleme ve kurtarma stratejisi uygulamakt\u0131r.<\/p>\n<h2>Sonu\u00e7 ve S\u0131k\u00e7a Sorulan Sorular<\/h2>\n<p>Bu makalede, SQL veritaban\u0131 d\u00fcnyas\u0131n\u0131n temel direklerinden olan i\u015flemler, kilitlenmeler ve g\u00fcnl\u00fck tabanl\u0131 kurtarma mekanizmalar\u0131n\u0131 detayl\u0131 bir \u015fekilde inceledik. G\u00f6rd\u00fc\u011f\u00fcm\u00fcz gibi, veritaban\u0131 i\u015flemleri, ACID \u00f6zellikleriyle veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fcn ve tutarl\u0131l\u0131\u011f\u0131n\u0131n garant\u00f6r\u00fcd\u00fcr. Kilitlenmeler ise e\u015fzamanl\u0131l\u0131\u011f\u0131n ka\u00e7\u0131n\u0131lmaz bir yan etkisi olup, do\u011fru stratejilerle y\u00f6netilmesi gereken performans engelleridir. Son olarak, g\u00fcnl\u00fck tabanl\u0131 kurtarma ve farkl\u0131 kurtarma modelleri sayesinde, en k\u00f6t\u00fc senaryolarda bile veritaban\u0131 sistemlerimizin veriyi koruyabildi\u011fini ve i\u015fletmelerin h\u0131zl\u0131ca toparlanabildi\u011fini \u00f6\u011frendik. T\u00fcm bu kavramlar, sa\u011flam, g\u00fcvenilir ve y\u00fcksek performansl\u0131 veritaban\u0131 uygulamalar\u0131 geli\u015ftirmek ve y\u00f6netmek i\u00e7in temel bilgilerdir.<\/p>\n<p>Veritaban\u0131 y\u00f6neticileri ve geli\u015ftiriciler olarak, bu mekanizmalar\u0131n derinlemesine anla\u015f\u0131lmas\u0131, sadece sorunlar\u0131 \u00e7\u00f6zmekle kalmaz, ayn\u0131 zamanda gelecekteki olas\u0131 sorunlar\u0131 \u00f6nceden tahmin etme ve daha dayan\u0131kl\u0131 sistemler tasarlama yetene\u011fimizi de art\u0131r\u0131r. Unutmay\u0131n, iyi bir veritaban\u0131 y\u00f6netimi, projenin ba\u015far\u0131s\u0131 i\u00e7in vazge\u00e7ilmezdir.<\/p>\n<h3>S\u0131k\u00e7a Sorulan Sorular<\/h3>\n<dl>\n<dt>SQL'de en yayg\u0131n kilitlenme t\u00fcr\u00fc nedir?<\/dt>\n<dd>En yayg\u0131n kilitlenme t\u00fcr\u00fc, iki veya daha fazla i\u015flemin, birbirlerinin tuttu\u011fu kaynaklar\u0131 kar\u015f\u0131l\u0131kl\u0131 olarak bekledi\u011fi \"d\u00f6ng\u00fcsel bekleme\" (circular wait) kilitlenmeleridir. Genellikle UPDATE veya DELETE i\u015flemleri s\u0131ras\u0131nda tablolar veya sat\u0131rlar \u00fczerinde tutulan kilitler nedeniyle olu\u015furlar.<\/dd>\n<dt>READ COMMITTED izolasyon seviyesi kilitlenmeleri \u00f6nler mi?<\/dt>\n<dd><code>READ COMMITTED<\/code> izolasyon seviyesi, okunmam\u0131\u015f verilerin okunmas\u0131n\u0131 engeller ve di\u011fer i\u015flemlerin commit edilmemi\u015f de\u011fi\u015fikliklerini g\u00f6rmemeyi sa\u011flar. Ancak, \u00f6zellikle yazma kilitleriyle ilgili olan kilitlenmeleri do\u011frudan \u00f6nlemez. Kilitlenmeleri azaltmak i\u00e7in di\u011fer stratejiler (i\u015flem s\u00fcrelerini k\u0131saltma, kaynaklara s\u0131ral\u0131 eri\u015fim vb.) gereklidir.<\/dd>\n<dt>Veritaban\u0131 \u00e7\u00f6kt\u00fc\u011f\u00fcnde FULL kurtarma modeli ne kadar veri kayb\u0131na izin verir?<\/dt>\n<dd>FULL kurtarma modeli, d\u00fczg\u00fcn bir yedekleme stratejisi (tam yedeklemeler ve d\u00fczenli i\u015flem g\u00fcnl\u00fc\u011f\u00fc yedeklemeleri) uyguland\u0131\u011f\u0131nda, \u00e7\u00f6kme an\u0131na kadar olan t\u00fcm verilerin kurtar\u0131lmas\u0131na olanak tan\u0131r. Teorik olarak, do\u011fru bir \u015fekilde uyguland\u0131\u011f\u0131nda veri kayb\u0131 s\u0131f\u0131ra yak\u0131nd\u0131r (yaln\u0131zca son g\u00fcnl\u00fck yede\u011fi ile \u00e7\u00f6kme an\u0131 aras\u0131ndaki \u00e7ok k\u00fc\u00e7\u00fck bir zaman dilimi etkilenebilir, ancak genellikle bu da kurtar\u0131labilir).<\/dd>\n<dt>Transaction log dosyas\u0131 neden s\u00fcrekli b\u00fcy\u00fcyor ve ne yapmal\u0131y\u0131m?<\/dt>\n<dd>Transaction log dosyas\u0131, FULL veya BULK_LOGGED kurtarma modelindeyseniz ve d\u00fczenli i\u015flem g\u00fcnl\u00fc\u011f\u00fc yedeklemeleri alm\u0131yorsan\u0131z b\u00fcy\u00fcr. G\u00fcnl\u00fck yedekleri, g\u00fcnl\u00fck dosyas\u0131ndaki etkin olmayan (art\u0131k kurtarma i\u00e7in gerekli olmayan) k\u0131s\u0131mlar\u0131n kesilmesini (truncate edilmesini) sa\u011flar. \u00c7\u00f6z\u00fcm, d\u00fczenli ve s\u0131k aral\u0131klarla (i\u015f y\u00fck\u00fcn\u00fcze g\u00f6re de\u011fi\u015fmekle birlikte genellikle her 15-30 dakikada bir) i\u015flem g\u00fcnl\u00fc\u011f\u00fc yedeklemeleri almakt\u0131r. E\u011fer hala b\u00fcy\u00fcyorsa, uzun s\u00fcreli a\u00e7\u0131k i\u015flemler veya yedekleme zincirinde bir sorun olabilir.<\/dd>\n<dt>Uygulama katman\u0131nda kilitlenme hatas\u0131n\u0131 nas\u0131l yakalamal\u0131y\u0131m?<\/dt>\n<dd>\u00c7o\u011fu veritaban\u0131 API'si (\u00f6rn. .NET'te SqlConnection, Java'da JDBC), veritaban\u0131ndan d\u00f6nen hatalar\u0131 yakalamak i\u00e7in \u00f6zel istisnalar veya hata kodlar\u0131 sunar. SQL Server i\u00e7in, <code>SqlException<\/code> s\u0131n\u0131f\u0131n\u0131n <code>Number<\/code> \u00f6zelli\u011fini kontrol ederek kilitlenme hata kodu olan 1205'i yakalayabilirsiniz. Di\u011fer veritabanlar\u0131 i\u00e7in ilgili d\u00f6k\u00fcmanlar\u0131 inceleyerek kendi spesifik kilitlenme hata kodlar\u0131n\u0131 bulman\u0131z gerekir. Hata yakaland\u0131\u011f\u0131nda, i\u015flemi geri al\u0131p (rollback) uygun bir gecikmeyle yeniden deneme mekanizmas\u0131 uygulamak en iyi yakla\u015f\u0131md\u0131r.<\/dd>\n<\/dl>\n<h3>Mobil Uyumlu HTML i\u00e7in \u00d6rnek Media Query<\/h3>\n<p>Modern web sitelerinin mobil cihazlarda da d\u00fczg\u00fcn g\u00f6r\u00fcnmesi hayati \u00f6neme sahiptir. A\u015fa\u011f\u0131daki CSS kodu \u00f6rne\u011fi, bir sayfan\u0131n d\u00fczeninin farkl\u0131 ekran boyutlar\u0131na nas\u0131l uyarlanabilece\u011fini g\u00f6stermektedir. Bu makalenin i\u00e7eri\u011fi de bu prensiplere uygun olarak tasarlanm\u0131\u015ft\u0131r.<\/p>\n<pre><code>\n<style>\n  \/* T\u00fcm resimlerin geni\u015fli\u011fini kapsay\u0131c\u0131lar\u0131na g\u00f6re ayarla *\/\n  img {\n    max-width: 100%;\n    height: auto;\n    display: block; \/* Resimlerin alt bo\u015flu\u011funu kald\u0131rmak i\u00e7in *\/\n    margin: 0 auto; \/* Ortalamak i\u00e7in *\/\n  }\n\n  \/* Genel kapsay\u0131c\u0131 ayarlar\u0131 *\/\n  .container {\n    width: 95%; \/* K\u00fc\u00e7\u00fck ekranlarda %95 geni\u015flik *\/\n    margin: 0 auto;\n    padding: 15px;\n    box-sizing: border-box; \/* Padding'in geni\u015fli\u011fe dahil olmas\u0131n\u0131 sa\u011flar *\/\n  }\n\n  \/* Tablet ve daha b\u00fcy\u00fck ekranlar i\u00e7in (768px ve \u00fczeri) *\/\n  @media (min-width: 768px) {\n    .container {\n      width: 80%; \/* Daha b\u00fcy\u00fck ekranlarda %80 geni\u015flik *\/\n    }\n    \/* \u0130ki s\u00fctunlu d\u00fczen \u00f6rne\u011fi *\/\n    .main-layout {\n      display: flex;\n      flex-wrap: wrap; \/* Gerekirse alt sat\u0131ra ge\u00e7i\u015f *\/\n      gap: 20px; \/* S\u00fctunlar aras\u0131 bo\u015fluk *\/\n    }\n    .main-content {\n      flex: 3; \/* Ana i\u00e7erik 3 birim geni\u015flik kaplar *\/\n      min-width: 60%; \/* Minimum geni\u015flik *\/\n    }\n    .sidebar {\n      flex: 1; \/* Yan panel 1 birim geni\u015flik kaplar *\/\n      min-width: 250px; \/* Minimum geni\u015flik *\/\n      background-color: #f9f9f9;\n      padding: 15px;\n      border-radius: 8px;\n    }\n  }\n\n  \/* B\u00fcy\u00fck masa\u00fcst\u00fc ekranlar i\u00e7in (1024px ve \u00fczeri) *\/\n  @media (min-width: 1024px) {\n    .container {\n      width: 70%; \/* En b\u00fcy\u00fck ekranlarda %70 geni\u015flik *\/\n    }\n  }\n\n  \/* Kod bloklar\u0131 i\u00e7in yatay kayd\u0131rma *\/\n  pre {\n    overflow-x: auto;\n    background-color: #eee;\n    padding: 10px;\n    border-radius: 5px;\n  }\n<\/style>\n<\/pre>\n<p><\/code><br \/>\n<\/body><\/p>\n","protected":false},"excerpt":{"rendered":"Veritaban\u0131 sistemleri, modern uygulamalar\u0131n bel kemi\u011fidir ve veri tutarl\u0131l\u0131\u011f\u0131, eri\u015filebilirli\u011fi ile g\u00fcvenilirli\u011fi kritik \u00f6neme sahiptir. Peki, birden fazla&hellip;","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"csco_page_header_type":"","csco_page_load_nextpost":"","csco_page_subscribe_form":"","csco_page_contact_form":"","footnotes":""},"categories":[1505],"tags":[],"class_list":{"0":"post-31240","1":"post","2":"type-post","3":"status-publish","4":"format-standard","6":"category-sql-2","7":"cs-entry","8":"cs-video-wrap"},"yoast_head":"<!-- This site is optimized with the Yoast SEO Premium plugin v20.5 (Yoast SEO v25.3.1) - https:\/\/yoast.com\/wordpress\/plugins\/seo\/ -->\n<title>SQL&#039;de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi<\/title>\n<meta name=\"description\" content=\"Veritaban\u0131 sistemleri, modern uygulamalar\u0131n bel kemi\u011fidir ve veri tutarl\u0131l\u0131\u011f\u0131, eri\u015filebilirli\u011fi ile g\u00fcvenilirli\u011fi kritik \u00f6neme sahiptir. Peki, birden fazla kullan\u0131c\u0131n\u0131n ayn\u0131 anda veri \u00fczerinde i\u015flem yapt\u0131\u011f\u0131 durumlarda veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc nas\u0131l sa\u011fl\u0131yoruz? \u0130\u015fte bu sorunun cevab\u0131, SQL&#039;deki i\u015flemler (transactions), kilitlenmeler (deadlocks) ve g\u00fcnl\u00fck tabanl\u0131 kurtarma (log-based recovery) mekanizmalar\u0131nda gizlidir. Bu makalede, bu temel kavramlar\u0131 ba\u015ftan sona ele alacak, kar\u015f\u0131la\u015fabilece\u011finiz sorunlar\u0131 ve \u00e7\u00f6z\u00fcm yollar\u0131n\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131yla ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, veritaban\u0131 y\u00f6netimini daha iyi anlaman\u0131za ve sistemlerinizi daha sa\u011flam hale getirmenize yard\u0131mc\u0131 olmakt\u0131r.\" \/>\n<meta name=\"robots\" content=\"index, follow, max-snippet:-1, max-image-preview:large, max-video-preview:-1\" \/>\n<link rel=\"canonical\" href=\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/\" \/>\n<meta property=\"og:locale\" content=\"tr_TR\" \/>\n<meta property=\"og:type\" content=\"article\" \/>\n<meta property=\"og:title\" content=\"SQL&#039;de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi\" \/>\n<meta property=\"og:description\" content=\"Veritaban\u0131 sistemleri, modern uygulamalar\u0131n bel kemi\u011fidir ve veri tutarl\u0131l\u0131\u011f\u0131, eri\u015filebilirli\u011fi ile g\u00fcvenilirli\u011fi kritik \u00f6neme sahiptir. Peki, birden fazla kullan\u0131c\u0131n\u0131n ayn\u0131 anda veri \u00fczerinde i\u015flem yapt\u0131\u011f\u0131 durumlarda veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc nas\u0131l sa\u011fl\u0131yoruz? \u0130\u015fte bu sorunun cevab\u0131, SQL&#039;deki i\u015flemler (transactions), kilitlenmeler (deadlocks) ve g\u00fcnl\u00fck tabanl\u0131 kurtarma (log-based recovery) mekanizmalar\u0131nda gizlidir. Bu makalede, bu temel kavramlar\u0131 ba\u015ftan sona ele alacak, kar\u015f\u0131la\u015fabilece\u011finiz sorunlar\u0131 ve \u00e7\u00f6z\u00fcm yollar\u0131n\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131yla ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, veritaban\u0131 y\u00f6netimini daha iyi anlaman\u0131za ve sistemlerinizi daha sa\u011flam hale getirmenize yard\u0131mc\u0131 olmakt\u0131r.\" \/>\n<meta property=\"og:url\" content=\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/\" \/>\n<meta property=\"og:site_name\" content=\"Kodlar\u0131n Gizemli D\u00fcnyas\u0131\" \/>\n<meta property=\"article:published_time\" content=\"2025-10-07T14:31:33+00:00\" \/>\n<meta name=\"author\" content=\"Fatih Soysal\" \/>\n<meta name=\"twitter:card\" content=\"summary_large_image\" \/>\n<meta name=\"twitter:label1\" content=\"Yazan:\" \/>\n\t<meta name=\"twitter:data1\" content=\"Fatih Soysal\" \/>\n\t<meta name=\"twitter:label2\" content=\"Tahmini okuma s\u00fcresi\" \/>\n\t<meta name=\"twitter:data2\" content=\"24 dakika\" \/>\n<script type=\"application\/ld+json\" class=\"yoast-schema-graph\">{\"@context\":\"https:\/\/schema.org\",\"@graph\":[{\"@type\":\"Article\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/#article\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/\"},\"author\":{\"name\":\"Fatih Soysal\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"headline\":\"SQL&#8217;de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi\",\"datePublished\":\"2025-10-07T14:31:33+00:00\",\"mainEntityOfPage\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/\"},\"wordCount\":4307,\"commentCount\":0,\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"articleSection\":[\"SQL\"],\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"CommentAction\",\"name\":\"Comment\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/#respond\"]}],\"copyrightYear\":\"2025\",\"copyrightHolder\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#organization\"}},{\"@type\":\"WebPage\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/\",\"name\":\"SQL'de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi\",\"isPartOf\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\"},\"datePublished\":\"2025-10-07T14:31:33+00:00\",\"description\":\"Veritaban\u0131 sistemleri, modern uygulamalar\u0131n bel kemi\u011fidir ve veri tutarl\u0131l\u0131\u011f\u0131, eri\u015filebilirli\u011fi ile g\u00fcvenilirli\u011fi kritik \u00f6neme sahiptir. Peki, birden fazla kullan\u0131c\u0131n\u0131n ayn\u0131 anda veri \u00fczerinde i\u015flem yapt\u0131\u011f\u0131 durumlarda veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc nas\u0131l sa\u011fl\u0131yoruz? \u0130\u015fte bu sorunun cevab\u0131, SQL'deki i\u015flemler (transactions), kilitlenmeler (deadlocks) ve g\u00fcnl\u00fck tabanl\u0131 kurtarma (log-based recovery) mekanizmalar\u0131nda gizlidir. Bu makalede, bu temel kavramlar\u0131 ba\u015ftan sona ele alacak, kar\u015f\u0131la\u015fabilece\u011finiz sorunlar\u0131 ve \u00e7\u00f6z\u00fcm yollar\u0131n\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131yla ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, veritaban\u0131 y\u00f6netimini daha iyi anlaman\u0131za ve sistemlerinizi daha sa\u011flam hale getirmenize yard\u0131mc\u0131 olmakt\u0131r.\",\"breadcrumb\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/#breadcrumb\"},\"inLanguage\":\"tr\",\"potentialAction\":[{\"@type\":\"ReadAction\",\"target\":[\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/\"]}]},{\"@type\":\"BreadcrumbList\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/#breadcrumb\",\"itemListElement\":[{\"@type\":\"ListItem\",\"position\":1,\"name\":\"Anasayfa\",\"item\":\"https:\/\/fatihsoysal.com\/blog\/\"},{\"@type\":\"ListItem\",\"position\":2,\"name\":\"SQL&#8217;de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi\"}]},{\"@type\":\"WebSite\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#website\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/\",\"name\":\"Fatihsoysal.com\",\"description\":\"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim\",\"publisher\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\"},\"potentialAction\":[{\"@type\":\"SearchAction\",\"target\":{\"@type\":\"EntryPoint\",\"urlTemplate\":\"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}\"},\"query-input\":{\"@type\":\"PropertyValueSpecification\",\"valueRequired\":true,\"valueName\":\"search_term_string\"}}],\"inLanguage\":\"tr\"},{\"@type\":[\"Person\",\"Organization\"],\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1\",\"name\":\"Fatih Soysal\",\"image\":{\"@type\":\"ImageObject\",\"inLanguage\":\"tr\",\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"contentUrl\":\"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png\",\"width\":512,\"height\":512,\"caption\":\"Fatih Soysal\"},\"logo\":{\"@id\":\"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/\"},\"description\":\"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.\",\"url\":\"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/\"}]}<\/script>\n<!-- \/ Yoast SEO Premium plugin. -->","yoast_head_json":{"title":"SQL'de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi","description":"Veritaban\u0131 sistemleri, modern uygulamalar\u0131n bel kemi\u011fidir ve veri tutarl\u0131l\u0131\u011f\u0131, eri\u015filebilirli\u011fi ile g\u00fcvenilirli\u011fi kritik \u00f6neme sahiptir. Peki, birden fazla kullan\u0131c\u0131n\u0131n ayn\u0131 anda veri \u00fczerinde i\u015flem yapt\u0131\u011f\u0131 durumlarda veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc nas\u0131l sa\u011fl\u0131yoruz? \u0130\u015fte bu sorunun cevab\u0131, SQL'deki i\u015flemler (transactions), kilitlenmeler (deadlocks) ve g\u00fcnl\u00fck tabanl\u0131 kurtarma (log-based recovery) mekanizmalar\u0131nda gizlidir. Bu makalede, bu temel kavramlar\u0131 ba\u015ftan sona ele alacak, kar\u015f\u0131la\u015fabilece\u011finiz sorunlar\u0131 ve \u00e7\u00f6z\u00fcm yollar\u0131n\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131yla ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, veritaban\u0131 y\u00f6netimini daha iyi anlaman\u0131za ve sistemlerinizi daha sa\u011flam hale getirmenize yard\u0131mc\u0131 olmakt\u0131r.","robots":{"index":"index","follow":"follow","max-snippet":"max-snippet:-1","max-image-preview":"max-image-preview:large","max-video-preview":"max-video-preview:-1"},"canonical":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/","og_locale":"tr_TR","og_type":"article","og_title":"SQL'de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi","og_description":"Veritaban\u0131 sistemleri, modern uygulamalar\u0131n bel kemi\u011fidir ve veri tutarl\u0131l\u0131\u011f\u0131, eri\u015filebilirli\u011fi ile g\u00fcvenilirli\u011fi kritik \u00f6neme sahiptir. Peki, birden fazla kullan\u0131c\u0131n\u0131n ayn\u0131 anda veri \u00fczerinde i\u015flem yapt\u0131\u011f\u0131 durumlarda veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc nas\u0131l sa\u011fl\u0131yoruz? \u0130\u015fte bu sorunun cevab\u0131, SQL'deki i\u015flemler (transactions), kilitlenmeler (deadlocks) ve g\u00fcnl\u00fck tabanl\u0131 kurtarma (log-based recovery) mekanizmalar\u0131nda gizlidir. Bu makalede, bu temel kavramlar\u0131 ba\u015ftan sona ele alacak, kar\u015f\u0131la\u015fabilece\u011finiz sorunlar\u0131 ve \u00e7\u00f6z\u00fcm yollar\u0131n\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131yla ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, veritaban\u0131 y\u00f6netimini daha iyi anlaman\u0131za ve sistemlerinizi daha sa\u011flam hale getirmenize yard\u0131mc\u0131 olmakt\u0131r.","og_url":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/","og_site_name":"Kodlar\u0131n Gizemli D\u00fcnyas\u0131","article_published_time":"2025-10-07T14:31:33+00:00","author":"Fatih Soysal","twitter_card":"summary_large_image","twitter_misc":{"Yazan:":"Fatih Soysal","Tahmini okuma s\u00fcresi":"24 dakika"},"schema":{"@context":"https:\/\/schema.org","@graph":[{"@type":"Article","@id":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/#article","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/"},"author":{"name":"Fatih Soysal","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"headline":"SQL&#8217;de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi","datePublished":"2025-10-07T14:31:33+00:00","mainEntityOfPage":{"@id":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/"},"wordCount":4307,"commentCount":0,"publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"articleSection":["SQL"],"inLanguage":"tr","potentialAction":[{"@type":"CommentAction","name":"Comment","target":["https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/#respond"]}],"copyrightYear":"2025","copyrightHolder":{"@id":"https:\/\/fatihsoysal.com\/blog\/#organization"}},{"@type":"WebPage","@id":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/","url":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/","name":"SQL'de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi","isPartOf":{"@id":"https:\/\/fatihsoysal.com\/blog\/#website"},"datePublished":"2025-10-07T14:31:33+00:00","description":"Veritaban\u0131 sistemleri, modern uygulamalar\u0131n bel kemi\u011fidir ve veri tutarl\u0131l\u0131\u011f\u0131, eri\u015filebilirli\u011fi ile g\u00fcvenilirli\u011fi kritik \u00f6neme sahiptir. Peki, birden fazla kullan\u0131c\u0131n\u0131n ayn\u0131 anda veri \u00fczerinde i\u015flem yapt\u0131\u011f\u0131 durumlarda veri b\u00fct\u00fcnl\u00fc\u011f\u00fcn\u00fc nas\u0131l sa\u011fl\u0131yoruz? \u0130\u015fte bu sorunun cevab\u0131, SQL'deki i\u015flemler (transactions), kilitlenmeler (deadlocks) ve g\u00fcnl\u00fck tabanl\u0131 kurtarma (log-based recovery) mekanizmalar\u0131nda gizlidir. Bu makalede, bu temel kavramlar\u0131 ba\u015ftan sona ele alacak, kar\u015f\u0131la\u015fabilece\u011finiz sorunlar\u0131 ve \u00e7\u00f6z\u00fcm yollar\u0131n\u0131 ger\u00e7ek d\u00fcnya senaryolar\u0131yla ad\u0131m ad\u0131m inceleyece\u011fiz. Amac\u0131m\u0131z, veritaban\u0131 y\u00f6netimini daha iyi anlaman\u0131za ve sistemlerinizi daha sa\u011flam hale getirmenize yard\u0131mc\u0131 olmakt\u0131r.","breadcrumb":{"@id":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/#breadcrumb"},"inLanguage":"tr","potentialAction":[{"@type":"ReadAction","target":["https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/"]}]},{"@type":"BreadcrumbList","@id":"https:\/\/fatihsoysal.com\/blog\/sqlde-islemler-kilitlenmeler-ve-gunluk-tabanli-kurtarma-yonetimi\/#breadcrumb","itemListElement":[{"@type":"ListItem","position":1,"name":"Anasayfa","item":"https:\/\/fatihsoysal.com\/blog\/"},{"@type":"ListItem","position":2,"name":"SQL&#8217;de \u0130\u015flemler, Kilitlenmeler ve G\u00fcnl\u00fck Tabanl\u0131 Kurtarma Y\u00f6netimi"}]},{"@type":"WebSite","@id":"https:\/\/fatihsoysal.com\/blog\/#website","url":"https:\/\/fatihsoysal.com\/blog\/","name":"Fatihsoysal.com","description":"Blog - Yaz\u0131l\u0131m D\u00fcnyas\u0131 Tecr\u00fcbelerim","publisher":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1"},"potentialAction":[{"@type":"SearchAction","target":{"@type":"EntryPoint","urlTemplate":"https:\/\/fatihsoysal.com\/blog\/?s={search_term_string}"},"query-input":{"@type":"PropertyValueSpecification","valueRequired":true,"valueName":"search_term_string"}}],"inLanguage":"tr"},{"@type":["Person","Organization"],"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/002a254750921dcfd568a99e48240dd1","name":"Fatih Soysal","image":{"@type":"ImageObject","inLanguage":"tr","@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/","url":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","contentUrl":"https:\/\/fatihsoysal.com\/blog\/wp-content\/uploads\/2024\/04\/cropped-replicate-prediction-3kgg1hgjn5rgp0cf0p5tr0jw7w-1.png","width":512,"height":512,"caption":"Fatih Soysal"},"logo":{"@id":"https:\/\/fatihsoysal.com\/blog\/#\/schema\/person\/image\/"},"description":"Kullan\u0131m ve kodlama m\u00fckemmeliyetini odak alan uygulamalar olu\u015fturma deneyimine sahip, profesyonel olarak 15+ y\u0131l \u00fczeri deneyime sahip bir yaz\u0131l\u0131m m\u00fchendisi.","url":"https:\/\/fatihsoysal.com\/blog\/author\/fatihsoysal\/"}]}},"yoast_meta":{"yoast_wpseo_title":"","yoast_wpseo_metadesc":"","yoast_wpseo_canonical":""},"amp_enabled":true,"_links":{"self":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31240","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/comments?post=31240"}],"version-history":[{"count":0,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/posts\/31240\/revisions"}],"wp:attachment":[{"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/media?parent=31240"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/categories?post=31240"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/fatihsoysal.com\/blog\/wp-json\/wp\/v2\/tags?post=31240"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}