Transaction Yönetimi ve Kilitler: BEGIN TRAN, COMMIT, ROLLBACK ve İzolasyon Seviyeleri
Transaction yönetimi, veritabanı yönetiminde çok önemli bir rol oynar. Bu makalede, Transaction yönetimi, BEGIN TRAN, COMMIT, ROLLBACK komutları ve İzolasyon Seviyeleri hakkında detaylı bilgi edineceksiniz.
Transaction Nedir?
Transaction, bir veritabanında birden fazla işlemi tek bir birim olarak gruplayan bir mekanizmadır. Transaction’lar, ya tamamıyla başarılı olur ya da tamamıyla başarısız olur. Bu, veritabanının tutarlılığını korur.
BEGIN TRAN, COMMIT ve ROLLBACK
Transaction’ları yönetmek için kullanılan temel komutlar şunlardır:
- BEGIN TRAN: Transaction’ı başlatır.
- COMMIT: Transaction’ı kalıcı hale getirir ve tüm işlemler veritabanına kaydedilir.
- ROLLBACK: Transaction’ı iptal eder ve tüm işlemler geri alınır.
-- Transaction başlatma
BEGIN TRAN
-- İşlemler
UPDATE Employees SET Salary = Salary * 1.10 WHERE Department = 'Sales';
-- Transaction'ı kalıcı hale getirme
COMMIT
-- Transaction'ı iptal etme
-- ROLLBACK
Code language: SQL (Structured Query Language) (sql)
İzolasyon Seviyeleri
İzolasyon seviyeleri, Transaction’ların birbirleriyle nasıl etkileşimde bulunacağını ve birbirlerinden nasıl izole olacağını belirler. SQL Server’da dört ana izolasyon seviyesi vardır:
- Read Uncommitted: En düşük izolasyon seviyesi. Bir Transaction, diğer Transaction’ların henüz commit edilmemiş verilerini okuyabilir.
- Read Committed: Bir Transaction, sadece diğer Transaction’ların commit edilmiş verilerini okuyabilir.
- Repeatable Read: Bir Transaction, aynı veriyi birden fazla kez okuduğunda aynı değeri alır. Ancak, diğer Transaction’lar tarafından eklenen yeni veriler görünmez.
- Serializable: En yüksek izolasyon seviyesi. Bir Transaction, diğer Transaction’ların verilerini okumasını veya güncellenmesini engeller.
-- Izolasyon seviyesini ayarlama
SET TRANSACTION ISOLATION LEVEL READ COMMITTED;
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Kilitler
Transaction’lar, veritabanındaki verilere erişim sırasında kilitler kullanır. Kilitler, bir Transaction’ın verilere erişimini diğer Transaction’lardan engellemek için kullanılır.
SQL Server’da iki ana kilit tipi vardır:
- Shared Lock (S Lock): Veriyi okuyan Transaction’lar tarafından kullanılır. Diğer Transaction’lar da veriyi okuyabilir, ancak güncelleme yapamazlar.
- Exclusive Lock (X Lock): Veriyi güncelleyen Transaction’lar tarafından kullanılır. Diğer Transaction’lar hem okuma hem de güncelleme yapamazlar.
-- Kilitleri gösterme
SELECT request_session_id, resource_type, request_mode, request_status
FROM sys.dm_tran_locks;
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Performans
Transaction’ların performansı, Transaction’ların boyutu, izolasyon seviyesi ve kilitler kullanılarak etkileyebilir. İyi bir Transaction yönetimi, veritabanının performansını artırır ve tutarlılığını korur.
Transaction Yönetimi ve Güvenlik
Transaction’lar, veritabanının güvenliğini korur. Bir Transaction, veritabanındaki verilerin tutarlılığını sağlar. Ayrıca, Transaction’lar, veritabanındaki verilerin doğru ve güvenilir bir şekilde güncellenmesini sağlar.
Transaction Yönetimi ve Hata Yönetimi
Transaction’lar, hata yönetimi için de kullanılır. Bir Transaction, bir hata durumunda otomatik olarak iptal edilebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Hata yönetimi
BEGIN TRY
BEGIN TRAN
-- İşlemler
COMMIT
END TRY
BEGIN CATCH
ROLLBACK
-- Hata işleme
END CATCH
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Günlük Kayıtları
Transaction’lar, veritabanındaki değişiklikleri izlemek için günlük kayıtları kullanır. Günlük kayıtları, Transaction’ların ne zaman başladığını, ne zaman bittiğini ve ne tür işlemler gerçekleştirdiğini kaydeder.
-- Günlük kayıtlarını gösterme
SELECT transaction_id, begin_time, end_time, transaction_type
FROM sys.dm_tran_session_transactions;
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Geri Yükleme
Transaction’lar, veritabanındaki verileri geri yüklemek için de kullanılır. Bir Transaction, veritabanındaki verileri geri yüklemek için otomatik olarak geri alınabilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri geri yükleme
RESTORE DATABASE MyDatabase
FROM DISK = 'C:\Backups\MyDatabase.bak'
WITH REPLACE, NOREWIND, NOUNLOAD, STATS = 10;
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Yedekleme
Transaction’lar, veritabanındaki verileri yedeklemek için de kullanılır. Bir Transaction, veritabanındaki verileri yedeklemek için otomatik olarak yedeklenebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri yedekleme
BACKUP DATABASE MyDatabase
TO DISK = 'C:\Backups\MyDatabase.bak'
WITH INIT, NAME = 'MyDatabase-Full Database Backup';
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Taşıma
Transaction’lar, veritabanındaki verileri taşımak için de kullanılır. Bir Transaction, veritabanındaki verileri taşımak için otomatik olarak taşınabilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri taşıma
INSERT INTO NewDatabase.dbo.Employees (EmployeeID, FirstName, LastName, Salary)
SELECT EmployeeID, FirstName, LastName, Salary
FROM OldDatabase.dbo.Employees;
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Analizi
Transaction’lar, veritabanındaki verileri analiz etmek için de kullanılır. Bir Transaction, veritabanındaki verileri analiz etmek için otomatik olarak analiz edilebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri analizi
SELECT Department, AVG(Salary) AS AverageSalary
FROM Employees
GROUP BY Department;
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Güvenliği
Transaction’lar, veritabanındaki verileri güvenli hale getirmek için de kullanılır. Bir Transaction, veritabanındaki verileri güvenli hale getirmek için otomatik olarak güvenli hale getirilebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri güvenliği
ALTER TABLE Employees
ADD CONSTRAINT chk_Salary CHECK (Salary > 0);
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Performansı
Transaction’lar, veritabanındaki verileri performanslı hale getirmek için de kullanılır. Bir Transaction, veritabanındaki verileri performanslı hale getirmek için otomatik olarak performanslı hale getirilebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri performansı
CREATE INDEX idx_EmployeeID ON Employees (EmployeeID);
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Tutarlılığı
Transaction’lar, veritabanındaki verileri tutarlı hale getirmek için de kullanılır. Bir Transaction, veritabanındaki verileri tutarlı hale getirmek için otomatik olarak tutarlı hale getirilebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri tutarlılığı
BEGIN TRAN
UPDATE Employees SET Salary = Salary * 1.10 WHERE Department = 'Sales';
COMMIT
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Güvenliği
Transaction’lar, veritabanındaki verileri güvenli hale getirmek için de kullanılır. Bir Transaction, veritabanındaki verileri güvenli hale getirmek için otomatik olarak güvenli hale getirilebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri güvenliği
ALTER TABLE Employees
ADD CONSTRAINT chk_Salary CHECK (Salary > 0);
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Performansı
Transaction’lar, veritabanındaki verileri performanslı hale getirmek için de kullanılır. Bir Transaction, veritabanındaki verileri performanslı hale getirmek için otomatik olarak performanslı hale getirilebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri performansı
CREATE INDEX idx_EmployeeID ON Employees (EmployeeID);
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Tutarlılığı
Transaction’lar, veritabanındaki verileri tutarlı hale getirmek için de kullanılır. Bir Transaction, veritabanındaki verileri tutarlı hale getirmek için otomatik olarak tutarlı hale getirilebilir. Bu, veritabanındaki verilerin tutarlılığını korur.
-- Veri tutarlılığı
BEGIN TRAN
UPDATE Employees SET Salary = Salary * 1.10 WHERE Department = 'Sales';
COMMIT
Code language: SQL (Structured Query Language) (sql)
Transaction Yönetimi ve Veri Güvenliği





