SQL Server’da Database Mirroring Üzerinde Database Snapshot Oluşturma

Bu makalede Database Mirroring yapılmış Mirror sunucusunda Restoring modunda olan ve okunamayan veritabanını Database Snapshot işlemi ile okuma işlemi yapmış olacağız.

Kendi sistemimde Database Mirroring yapmış olduğum bir database’im var. Bu database ikinci sunucuda restoring modda olduğu için veritabanı okunmaz mirror veritabanında  okuma işlemini yapabilmek için ikinci sunucuda database snapshot işlemi yaparak okuma  işlemlerimizi yapabiliriz. Mirror sunucusunda snapshot yapılarak rapor çekilebilir. İlk başta principal ve mirror veritabanımızı görelim.

Principal veritabanımız

Mirror veritabanımız, öncelikle Mirror olan veritabanımızın senkron olması gelmektedir.

Mirror veritabanımız Restoring mod da olduğu için  her hangi bir işlem yapılamaz.

Mirror database üzerinde okuma işlemi yapacağım için Snapshot Database işlemi yapıyorum. İlgili A veritabanı altında hangi data file ismi varsa o ismi aşağıdaki name kısmına yazmamız gerekiyor. Principal veritabanı altında ilgili data file ismine aşağıdaki resimde görülmektedir. Çünkü principal veritabanı altında bulunan data file mirror veritabanındada bulunmaktadır. Kaç tane Data File varsa Snapshot oluşturacağımız zaman tanımlanması gerekmektedir.

Mirror sunucusunda aşağıdaki komut çalıştırılır.

CREATE DATABASE A_SNAPSHOT ON
( NAME = A, FILENAME = 'C:\veritabanı\A.ss' )
AS SNAPSHOT OF A;
GO

Yukarıdaki kod bloğunu mirror veritabanımın olduğu sunucuda çalıştırdığımda Database Snapshot’ın oluştuğunu görmüş oldum. Mirroring teknolojisinde çok kullanılan bir yöntemdir.

Şimdi Snapshot oluşturduğumuz veritabanına select çekelim bakalım verilerimiz gelecek mi?

Evet resimde görüldüğü gibi  Mirror veritabanımız restoring modda ama Database Snapshot aldığımız için verilerimizi okuyabiliyoruz. Bu yapı ile principal veritabanı üzerinde yükü azaltabiliriz. Şunu da belirtmek gerekir ki Principal veritabanında yeni bir tablo veya insert yapıldığında mirror sunucusundaki  database snapshot’a yansımaz. Güncel veri için tekrar database snapshot alınması lazım mirror database üzerinde.

Microsoft’un sayfasında alınmış kodu çalıştırdığımızda Snapshot olan databaseler görülmektedir.

SELECT  DB_NAME(sd.source_database_id) AS [SourceDatabase],
        sd.name AS [Snapshot],
        mf.name AS [Filename],
        size_on_disk_bytes/1024 AS [size_on_disk (KB)],
        mf2.size/128 AS [MaximumSize (MB)]
FROM sys.master_files mf
JOIN sys.databases sd
    ON mf.database_id = sd.database_id
JOIN sys.master_files mf2
    ON sd.source_database_id = mf2.database_id
    AND mf.file_id = mf2.file_id
CROSS APPLY sys.dm_io_virtual_file_stats(sd.database_id, mf.file_id)
WHERE mf.is_sparse = 1
AND mf2.is_sparse = 0
ORDER BY 1;

Bir internal database snapshot oluşturulduğunda ne olur. Çünkü principal veritabanı mirror veritabanına yansıyacağı için mirror sunucusunda sparce file yapısının şişmesine sebep olabilir.

  1. 10GB’lık bir veritabanında:
    • Snapshot oluşturulduğunda: ~40KB (metadata)
    • 1GB veri değişirse: ~1GB boyutuna ulaşır.
    • 5GB veri değişirse: ~5GB boyutuna ulaşır.
  2. Read-heavy sistemde:
    • Çok az yazma varsa: birkaç MB seviyesinde kalır.
  3. Write-heavy sistemde:
    • Yoğun yazma varsa: orijinal DB boyutuna yaklaşabilir.

Oluşturulan snapshot’un boyutunu görmek için aşağıdaki komut kullanılmaktadır.

-- Snapshot dosya boyutlarını görüntüleme
SELECT 
    name AS 'Snapshot Name',
    physical_name AS 'File Path',
    size/128.0 AS 'Current Size (MB)',
    growth/128.0 AS 'Growth Increment (MB)'
FROM 
    sys.master_files
WHERE 
    DB_NAME(database_id) LIKE '%Snapshot%';

Bu makalede Database mirroring üzerinde mirror sunucusunda verilerin okunması için snaphot işlemi yapıldı. Başka makalede görüşmek dileğiyle..

“Öyle ise emrolunduğun gibi dosdoğru ol.” Hud-112

Author: Yunus YÜCEL

Bir yanıt yazın

E-posta adresiniz yayınlanmayacak. Gerekli alanlar * ile işaretlenmişlerdir