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.
- 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.
- Read-heavy sistemde:
- Çok az yazma varsa: birkaç MB seviyesinde kalır.
- 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
