MSSQL Server Büyük Veritabanlarını Log Dosyası Olmadan Attach Etmek

Bu makalede MSSQL Server Büyük Veritabanlarını Log Dosyası Olmadan Attach Etmek konusuna detaylı bir şeklide değinmiş olacağız. Büyük veritabanlarını test ortamına taşırken .ldf uzantılı log dosyalarını taşıma gereği duyamayız. Ya da detach edilmiş veritabanının log dosyası kaybolmuşta olabilir. Burada karşımıza ATTACH_REBUILD_LOG ile log dosyası olmadan .mdf dosyamızı attach işlemi yapabileceğiz. Bu yapı bize sql server’ın default pathlerinde yeni bir .ldf uzantılı bir yapı oluşturacaktır. Ya da aşağıdaki gibi kendinizde bir yol belirtebilirsiniz.

Veritabanı üzerine sağ tıklanır. Task>Attach denilir. Gelen ekranda Databases to attach kısmında Add denilerek mevcut olan .mdf dosyamız seçilmektedir. Mdf dosyamızın hangi path altında olmasını istiyorsak ilgili path altına taşınmaktadır. Bu işlem manuel bir şekilde yapılır. Attach edileceği zaman sadece mdf dosyası görülmektedir.

Aşağıdaki resimde dikkat edilirse mevcut klasörler altında bulunan mdf ve ldf dosyamızın mdf dosyamızı seçmekle geldiğini görmekteyiz.

Yukarıda details kısmında bulunan ldf dosyamızı belirtilen dizin altında silelim.

TEST1 database details kısmında mdf ve ldf dosyamızın Current File Path kısmını görmekteyiz. Message kısmında ise ldf’in olmadığını yeni bir tane kurulacağını sql server beyan ediyor. TEST1 veritabanını ilk oluştururken ldf dosyasını hangi path altında oluşturmuşsak default olarak Current File Path kısmında o gözükmektedir. Yukarıdaki işlemi onaylamak istediğimizde hata mesajı ile karşılaşırız. Resimde belirtilen log dosyasının seçilip remove edilmesi gerekmektedir. Yukarıdaki resimde ne kadarda başlangıçta veritabanı oluştururken ki ldf yolunu gösterse bile instance altında bulunan default log dosya uzantısında ldf dosyası oluşmaktadır.

Mdf dosyamızı attach işlemi için seçtikten sonra default olarak log dosyası gelir. Veritabanı oluşturulurken log dosyası nerede oluşturulmuşsa o dizin altında aramaktadır. Aşağıdaki resimde pathler farklı olabilir anlamamız açısından yazıyorum. Mdf dosyasını seçtikten sonra ldf dosyası otomatik gelmektedir. Ldf dosyası remove edildikten sonra OK butonuna tıklanınca otomatik olarak default uzantı altında bir log dosyası oluşmaktadır.

Log dosyasının istediğimiz path’den büyümesi için 3 noktaya tıkladığımızda hata mesajıyla karşılaşmış   oluruz. Bunun için yukarıdaki resimde görüldüğü gibi remove işlemine tabi tutulur.

Not: Eğer log dosyasının belirtilen dizin altında çalışmasını istiyorsak ldf dosyasının önceden taşınması gerekmektedir.

Çünkü belirtilen ldf dosyasını başlangıçta veritabanı ldf dosyasının oluştuğu dizin altında okumaya çalışır.

Mdf dosyamızı attach ederken log dosyamız ilgili dizin altında bulunmazsa message bölümünde aşağıdaki mesajla karşılaşılmaktadır. Log dosyasını bulamadığını boş bir ldf dosyası oluşturduğunu söylemektedir. Yeni oluşturulan ldf dosyamızın disk yolunu değiştirmeye çalıştığımızda yukarıdaki hata mesajının aynısını almış oluruz.

Başka bir işlem yapmayıp yukarıdaki işlemin scriptini alıyorum. Aşağıdaki tüm scriptlerde aynı sonucu almaktayız.

USE [master]
GO
CREATE DATABASE [TEST1] ON 
( FILENAME = N'D:\VERI\TEST1.mdf' ),
( FILENAME = N'E:\LOG\TEST1_log.ldf' )
 FOR ATTACH
GO

Veritabanı oluşturulurken log dosyasının başlangıçta oluşturulan dizin altında bulamadığı. Mdf dosyası dizininin altında oluşturduğunu görmüş oluyoruz. Yukarıdaki komutta ldf uzantılı dosyanın çıkarılması gerekmektedir. Hata mesajı almamıza sebebiyet vermektedir. Farklı bir örnek olduğu içi disk uzantı yolu farklıdır. Sonuç olarak aynı hata alınmaktadır.

Aşağıdaki aynı işlemi yapan iki sorgu doğru sonucu vermektedir..

USE [master]
GO
CREATE DATABASE [TEST1] ON 
( FILENAME = N'D:\VERI\TEST1.mdf' )
 FOR ATTACH
GO
---------------------
USE [master]
GO
CREATE DATABASE [TEST1] ON ( FILENAME = N'D:\VERI\TEST1.mdf' ) FOR ATTACH_REBUILD_LOG
GO

Yukarıdaki işlemler sonucu dönen sonuç kümesi:

Bu makalede log dosyası olmadan sql server’a mdf dosyasını attach etmeyi görmüş olduk. Başka bir makalede görüşmek dileğiyle.

“İman edip de iyi davranışlarda bulunanlara gelince, onlar için çok merhametli olan Allah, (gönüllerde) bir sevgi yaratacaktır.” Meryem-96

Author: Yunus YÜCEL

Bir yanıt yazın

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