Database with its label being replaced, representing renaming a SQL Server database

SQL Server’da Veritabanı Adını Güvenle Değiştirmek ve Sonrasında Erişim Sorunları

ALTER DATABASE MODIFY NAME ile SQL Server veritabanı adını değiştirmek, Msg 5030 ve 4064 hatalarını çözmek, dosya adlarını değiştirmek ve hâlâ eski adı gösteren her yeri bulmak.

Mart 31, 2023

Bir veritabanının adını değiştirmek tek satırlık bir komuttur. Ama ad, veritabanının dışında pek çok yerde yaşar: uygulama bağlantı dizelerinde, login’lerin varsayılan veritabanında, Agent job’larında, linked server sorgularında, üç parçalı adla yazılmış view ve procedure’lerde. Komut çalıştıktan sonra “veritabanına erişemiyorum” şikâyetleri genellikle bu yerlerden gelir.

Bu yazıda bir veritabanını güvenle yeniden adlandırmayı, sık karşılaşılan hataları ve ad değişikliğinden sonra kontrol edilmesi gerekenleri anlatıyoruz.

SQL Server Danışmanlığı

Veritabanı adı ya da yapısı mı değişiyor?

Aryasoft, değişikliğin etkileyeceği tüm bağımlılıkları önceden çıkarır ve geçişi kesintisiz planlar.

Destek Alın

Yeniden Adlandırma Komutu

sp_renamedb kullanımdan kaldırılmıştır; güncel yöntem ALTER DATABASE ... MODIFY NAME‘dir. Ad değişikliği veritabanına özel erişim gerektirir; açık bağlantılar varsa önce onları sonlandırmanız gerekir:

USE master;

-- Açık bağlantıları kapatıp özel erişim al (açık transaction'lar geri alınır)
ALTER DATABASE SatisDB SET SINGLE_USER WITH ROLLBACK IMMEDIATE;

ALTER DATABASE SatisDB MODIFY NAME = SatisDB_Arsiv;

ALTER DATABASE SatisDB_Arsiv SET MULTI_USER;

Özel erişim alınamazsa şu hatayı görürsünüz:

▤ Messages

Msg 5030, Level 16, State 2 The database could not be exclusively locked to perform the operation.

Uyarı

WITH ROLLBACK IMMEDIATE, veritabanındaki tüm açık transaction’ları geri alır ve kullanıcıların bağlantısını keser. Üretim veritabanında bu adımı bakım penceresinde, uygulama ekipleriyle koordineli şekilde yapın. SINGLE_USER modunda tek bağlantıyı başka bir oturumun (örneğin bir uygulama ya da Agent job’ı) sizden önce almaması için komutları aynı oturumda, ardışık çalıştırın.

Dosya Adları Değişmez

Veritabanının adı değişse de mantıksal dosya adları (SatisDB_Data) ve diskteki fiziksel dosyalar (SatisDB.mdf) eski adlarıyla kalır. Tutarlılık için bunları da değiştirebilirsiniz:

-- Mantıksal adlar (çevrimiçiyken yapılabilir)
ALTER DATABASE SatisDB_Arsiv MODIFY FILE (NAME = N'SatisDB_Data', NEWNAME = N'SatisDB_Arsiv_Data');
ALTER DATABASE SatisDB_Arsiv MODIFY FILE (NAME = N'SatisDB_Log',  NEWNAME = N'SatisDB_Arsiv_Log');

-- Fiziksel dosyalar: önce yeni yolları tanımlayın, sonra çevrimdışı yapıp dosyaları yeniden adlandırın
ALTER DATABASE SatisDB_Arsiv MODIFY FILE (NAME = N'SatisDB_Arsiv_Data', FILENAME = N'E:\Data\SatisDB_Arsiv.mdf');
ALTER DATABASE SatisDB_Arsiv MODIFY FILE (NAME = N'SatisDB_Arsiv_Log',  FILENAME = N'L:\Log\SatisDB_Arsiv_log.ldf');
ALTER DATABASE SatisDB_Arsiv SET OFFLINE WITH ROLLBACK IMMEDIATE;
-- Windows'ta dosyaları yeni adlarına göre yeniden adlandırın, ardından:
ALTER DATABASE SatisDB_Arsiv SET ONLINE;

Dosyaları yeniden adlandırırken SQL Server servis hesabının yeni dosyalar üzerindeki izinlerinin korunduğundan emin olun.

Ad Değişikliğinden Sonra “Erişemiyorum” Sorunları

Login’in varsayılan veritabanı

Varsayılan veritabanı eski ad olan login’ler bağlanmaya çalıştığında oturum açma başarısız olur:

▤ Messages

Cannot open user default database. Login failed. Login failed for user ‘UygulamaKullanicisi’. (Microsoft SQL Server, Error: 4064)

-- Varsayılan veritabanı artık var olmayan login'ler
SELECT name, default_database_name
FROM sys.server_principals
WHERE default_database_name IS NOT NULL
  AND DB_ID(default_database_name) IS NULL;

ALTER LOGIN UygulamaKullanicisi WITH DEFAULT_DATABASE = SatisDB_Arsiv;

Kontrol edilmesi gereken diğer yerler

  • Uygulama bağlantı dizeleri: Initial Catalog ya da Database değerleri.
  • Agent job’ları: Job adımlarının çalıştığı veritabanı ve komutların içindeki adlar.
  • Üç parçalı adlar: Başka veritabanlarındaki view, procedure ve synonym’lerde SatisDB.dbo.Tablo biçimindeki başvurular. Bunları bulmak için bağımlılık rehberimizdeki sorguları kullanın.
  • Linked server sorguları: Diğer sunuculardan bu veritabanına dört parçalı adla yapılan başvurular.
  • Yedek ve bakım job’ları: Veritabanı adını sabit olarak içeren script’ler ve dosya adları.
  • SSIS, SSRS ve ETL bağlantıları.

Not

Always On Availability Group’a ya da database mirroring’e dahil bir veritabanının adı doğrudan değiştirilemez. Önce veritabanını gruptan çıkarın, adını değiştirin ve yeniden ekleyin; secondary replikalarda veritabanının yeniden başlatılması (seeding ya da restore) gerekir. Replikasyon, log shipping ve CDC kullanan veritabanlarında da ad değişikliği bu özelliklerin yeniden yapılandırılmasını gerektirir.

Daha Az Kesintili Bir Yol: Synonym ya da Geçiş Dönemi

Adın değişmesi gereken ama bağımlılıkların hepsini bir anda güncelleyemeyeceğiniz durumlarda, eski ada başvuran kodu kademeli olarak güncelleyin. Diğer veritabanlarındaki başvurular için synonym kullanmak, gelecekteki bir ad değişikliğinde tek bir yerde güncelleme yapmanızı sağlar.

Kontrol Listesi

  • Değişiklik bakım penceresinde ve uygulama ekipleriyle koordineli.
  • ALTER DATABASE … MODIFY NAME kullanıldı; sp_renamedb değil.
  • Login varsayılan veritabanları güncellendi.
  • Bağlantı dizeleri, Agent job’ları, üç ve dört parçalı adlar kontrol edildi.
  • AG, mirroring, replikasyon ve log shipping için ayrı plan yapıldı.
  • Gerekiyorsa mantıksal ve fiziksel dosya adları da güncellendi.
ALTER DATABASE eskiad MODIFY NAME = yeniad komutuyla. Açık bağlantılar varsa önce SET SINGLE_USER WITH ROLLBACK IMMEDIATE ile özel erişim alınır.
Veritabanında açık bağlantılar olduğu için özel kilit alınamadığında. Bağlantıları kapatmak ya da SINGLE_USER moduna geçmek gerekir.
Login’in varsayılan veritabanı eski ad olarak kalmışsa 4064 hatası alınır. ALTER LOGIN … WITH DEFAULT_DATABASE ile düzeltilir.
Hayır. Mantıksal adlar MODIFY FILE … NEWNAME ile, fiziksel dosyalar ise veritabanı çevrimdışıyken yeniden adlandırılıp MODIFY FILE … FILENAME ile güncellenir.

SQL Server Danışmanlığı

Ad değişikliğini bağımlılıklarıyla birlikte planlayın

Aryasoft’un kıdemli DBA ekibi değişikliğin etkileyeceği uygulamaları, job’ları, login’leri ve kodları önceden çıkarır; geçişi kesintisiz ve geri alınabilir şekilde planlar.

4.7/5