SQL Server In-Place Upgrade Sonrası System Database Dosya Yolları Nasıl Düzenlenir

Bu makalede In-Place Upgrade yaptıktan sonra karşılaşılan bir soruna değinmiş olacağız. SQL Server’da in-place upgrade yaptığınızda (örneğin SQL Server 2017’den 2019’a geçerken), system database’lerin (master, model, msdb, tempdb) dosya yolları (MDF, LDF) genellikle önceki SQL Server sürümünün kurulu olduğu dizinde kalır (örneğin C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA).

System Databaselerine kısaca değinmek gerekirse:

SQL Server’da yer alan sistem veritabanları, tüm sistem ve veritabanlarına ilişkin hayati bilgileri barındırır. SQL Engine başlatıldığında, bu veritabanlarından gerekli bilgileri okur. Bilgilerde herhangi bir tutarsızlık ya da değişiklik yoksa, sistem sorunsuz şekilde başlar ve hizmet vermeye başlar.

Aşağıdaki resimde in-place upgrade sonucu geçiş yapılan sql server sürümü:

Aşağıdaki resim upgrade yapıldıktan sonra system database’lerin path’leri görülmektedir. Resim dikkat edilirse upgrade yaptığımız sql server sürümü 2019 olmasına rağmen dosya numarası MSSQL14.TEST olarak görülmektedir.

Bu durumun sakıncası nedir?

  1. Yeni SQL Server sürümünüz örneğin MSSQL15.TEST altında yüklüyken, system database dosyaları hala MSSQL14 klasöründe olabilir. Bu da dosya yolları karışıklığına neden olur.
  2. Eski SQL sürümüne ait klasörleri temizlemek istediğinizde system database dosyaları nedeniyle silemezsiniz.
  3. Yeni SQL Server örneğinizin güvenlik, disk erişim izinleri veya performans ayarları yeni dizinde olabilirken veritabanı dosyalarının eski yolda kalması tutarsızlık yaratabilir.

System database dosyalarını yeni SQL Server sürüm dizinine taşımak (örneğin MSSQL15 altına)

Aşağıdaki örnek, system database dosyalarını doğru ve güvenli şekilde yeni dizine taşımamız için aşağıdaki adımların uygulanması gerekmektedir.

SQL Server Configuration Manager ekranında SQL Server Services bölümünde ilgili servisimiz stop edilir.

Dosyalar manuel olarak eski disk uzantısından yeni disk uzantısına taşınır. Bu adımlardan önce MSSQL15.INSTANCENAME altında verileri taşıyacağımız aynı isimde klasör yoksa oluşturulur. Sql server servis hesabı bu klasör üzerinde okuma-yazma yetkisi veya full control yetkisi verilmektedir.

Örneğin:
• C:\Program Files\Microsoft SQL Server\MSSQL14.MSSQLSERVER\MSSQL\DATA\master.mdf
taşınır:
• C:\Program Files\Microsoft SQL Server\MSSQL15.MSSQLSERVER\MSSQL\DATA\master.mdf

Aynı şekilde .ldf dosyaları da taşınır. Aynı işlem Log klasöründeki değerlerinde kopyalanıp yeni dizine atılması gerekmektedir.

SQL Server Configuration Manager bölümünde servisler bölümünde ilgili instance properties ekranında Startup Parameters bölümünde başlatma parametrelerinin güncellenmesi gerekmektedir.

Burada aşağıdaki parametreleri güncelleyin:
• -d master.mdf dosyasının yeni yolu
• -l mastlog.ldf dosyasının yeni yolu
• -e errorlog dosyasının yolu (opsiyonel ama genellikle aynı klasörde olur)

Yeni dosya yollarının Parameters kısmından güncellenmesini sağlıyoruz.

  • -eC:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\Log\ERRORLOG
  • -lC:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\mastlog.ldf
  • -dC:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\master.mdf

Yukarıdaki güncelleşmeden sonra sql server servisi yeniden başlatılır. Başlatmada herhangi bir sorunla karşılaşırsanız sql servisinin dosyalarda yetkisi olup olmadığı ve belirtilen pathlerin doğruluğu kontrol edilmelidir.

Eğer parametreler doğruysa ve dosyalar yeni dizinde varsa, SQL Server sorunsuz başlar.

SSMS üzerinden master veritabanı properties Files bölümünde master veritabanı path’lerinin yolunun değiştiğini görmekteyiz.

Master veritabanı hariç diğer sistem veritabanlarının model, msdb, tempdb için taşınma aşağıdaki yöntemlerle yapılmaktadır.

Model DB dosya yolu değiştirmek için aşağıdaki komut kullanılmaktadır.

ALTER DATABASE model
MODIFY FILE (NAME = modeldev, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\model.mdf');

ALTER DATABASE model
MODIFY FILE (NAME = modellog, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\modellog.ldf');

Değişiklik başarılı ama etkin olması için SQL Server servisini yeniden başlatmanız gerekiyor. Bunun için ilgili sql servisi kapatıp yeni uzantı altına model veritabanını taşıyorum manuel bir şekilde. Sql server database engine yapısının çalışması için şart olan bir yapı.

Sql servisini tekrardan başlattıktan sonra model veritabanının Files bölümünde yeni path altında konumlandığını görebiliriz.

Aynı işlemleri Msdb sistem veritabanı dosya yolunu değiştirelim. Msdb veritabanının olmaması sql server’ın açılmasına mani değildir.

ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBData, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\MSDBData.mdf');

ALTER DATABASE msdb
MODIFY FILE (NAME = MSDBLog, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\MSDBLog.ldf');

Son olarak yapacağımız işlem Tempdb veritabanının dosya uzantısını değiştirmek olacak. Yukarıdaki işlemlerin aynısı yapılmaktadır. Dikkat edilmesi gereken Tüm logical name ifadelerin belirtilmesi gerekmektedir.

Aşağıdaki komutla tempdb veritabanının Logical Name ve Path’lerini öğrenebiliriz. Bu Logical Name ifadelerini modify komutunun içerisine yazıyoruz.

select name,physical_name,*from sys.master_files where database_id=DB_ID('tempdb')

Aşağıdaki komutlarla tempdb veritabanı yolları değiştirilir.

ALTER DATABASE tempdb
MODIFY FILE (NAME = tempdev, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\tempdb.mdf');

ALTER DATABASE tempdb
MODIFY FILE (NAME = templog, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\templog.ldf');
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp2, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\tempdb_mssql_2.ndf');
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp3, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\tempdb_mssql_3.ndf');
ALTER DATABASE tempdb
MODIFY FILE (NAME = temp4, FILENAME = 'C:\Program Files\Microsoft SQL Server\MSSQL15.TEST\MSSQL\DATA\tempdb_mssql_4.ndf');

Yukarıdaki değişikliği yaptıktan sonra sql servisi tekrardan restart edilir ve tempdb klasörlerimiz yeni belirlemiş olduğumuz dizin altına alınır. Normalde tempdb ayrı bir disk üzerinde koşması gerekmektedir. Tempdb hakkında detaylı bilgi almak için sayfanın arama kısmına tempdb yazılması yeterlidir.

Yukarıdaki system databaselerin path’lerini değiştirdikten sonra son olarak bakılmasa gereken yerler SQL Server’da Engine > Properties > Advanced sekmesinde yer alan “Dump Directory” ve “Data Path” kısımlarıdır.

Dump Directory: Bu dizin, SQL Server’da ciddi bir hata veya çökme (crash) meydana geldiğinde hata ayıklama (debugging) için oluşturulan dump dosyalarının kaydedildiği yerdir.

Data Path: Bu ayar, SQL Server’ın yeni bir veritabanı oluşturduğunda varsayılan olarak MDF ve LDF dosyalarını nereye kaydedeceğini belirtir.

Yukarıdaki resimde dikkat ederseniz dump directory kısmı manuel olarak değiştirilirken Data Path kısmı Registry Editor üzerinden gerçekleşmektedir. Aşağıdaki uzantıdan değişiklik yapmak istediğimiz instance’a girilir. Resimdeki işaretli olan yer güncel path adresi olarak değiştirilmektedir.

Computer\HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL15.TEST\Setup

İlgili bölüm seçildikten sonra güncelleme işlemi yapılmaktadır. OK butonuna basılıp işlem tamamlanır.

Registery üzerinde bulunan tüm eski pathlerin kaldırıp değiştirilmesi gerekmektedir. Aşağıdaki uzantıya gelindikten sonra F3 tuşuna basılıp genel arama yapılmaktadır. Yada sağ tıklanıp Find denilmesi gerekmektedir.

Find Next dedikten sonra belirlemiş olduğumuz eski instance ismi bulunmaktadır. Aşağıdaki dizinlerde bulunan ifadelerin kaldırılmasına veya düzeltilmesine gerek yoktur. Aynı ifadeler 150 dizini altında da oluşmaktadır.

Aşağıdaki resimde dikkat edersek aynı yapı 150 klasörü içerisinde de bulunmaktadır.

Registry üzerinden birden fazla ayarlama yapabiliriz. Aşağıdaki kısımda default backup yolumuz görülmektedir.

Bu ifadeyi değiştirdikten sonra SSMS arayüzünden ifadenin değiştiğini gözlemleyebiliriz.

Şunu belirtmek gerekirse master veritabanı hariç diğer tüm system database path değişim komutlarının aynı anda çalıştırılıp sql servisinin restart edilmesi gerekmektedir.

Başka bir makalede görüşmek dileğiyle..

“Onlar her türlü boş söz ve faydasız işlerden yüz çevirirler.” Mü’minûn / 3. Ayet

Author: Yunus YÜCEL

Bir yanıt yazın

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