Sistem veritabanlarını taşıma

Şunlar için geçerlidir: SQL Server

Bu makalede, SQL Server sistem veritabanlarının nasıl taşındığı açıklanır. Sistem veritabanlarını taşımak aşağıdaki durumlarda yararlı olabilir:

  • Arıza kurtarma. Örneğin, veritabanı şüpheli modunda veya donanım hatası nedeniyle kapatıldı.

  • Planlanan taşınma.

  • Planlı disk bakımı için taşınma.

Aşağıdaki yordamlar, veritabanı dosyalarını aynı SQL Server örneği içinde taşımak için geçerlidir. Veritabanını başka bir SQL Server örneğine veya başka bir sunucuya taşımak için yedekleme ve geri yükleme işlemini kullanın.

Bu makaledeki yordamlar, veritabanı dosyalarının mantıksal adını gerektirir. Adı almak için , sys.master_files katalog görünümünde ad sütununu sorgular.

Important

Bir sistem veritabanını taşır ve daha sonra veritabanını yeniden oluşturursanız master , yeniden oluşturma işlemi tüm sistem veritabanlarını varsayılan konumlarına yüklediğinden sistem veritabanını yeniden taşımanız gerekir.

Sistem veritabanlarını taşıma

Sistem veritabanı verilerini veya günlük dosyasını planlı bir yeniden konumlandırma veya zamanlanmış bakım işleminin parçası olarak taşımak için aşağıdaki adımları izleyin. Bu, , modelve msdb sistem veritabanlarını içerirtempdb.

Important

Bu işlem, master ve Resource veritabanları hariç tüm sistem veritabanları için geçerlidir. master veritabanını taşıma adımları için bu makalenin ilerleyen bölümlerine bakın. Veritabanı Resource taşınamaz.

  1. sys.master_files katalog görünümünü gözden geçirerek, taşımak istediğiniz veritabanı dosyalarının mevcut konumunu kaydedin.

  2. SQL Server Database Engine hizmet hesabının dosyaların yeni konumu için tam izinlere sahip olduğunu doğrulayın. Daha fazla bilgi için bkz. Windows hizmet hesaplarını ve izinlerini yapılandırma. Database Engine hizmet hesabı yeni konumundaki dosyaları denetleyemiyorsa, SQL Server örneği başlatılmaz.

  3. Taşınacak her veritabanı dosyası için aşağıdaki deyimi çalıştırın.

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    

    Hizmet yeniden başlatılana kadar veritabanı mevcut konumdaki verileri ve günlük dosyalarını kullanmaya devam eder.

  4. Bakım gerçekleştirmek için SQL Server örneğini durdurun. Daha fazla bilgi için bkz. SQL Server hizmetlerini başlatma, durdurma, duraklatma, sürdürme ve yeniden başlatma.

  5. Veritabanı dosyasını veya dosyalarını yeni konuma kopyalayın. Bu adım sistem veritabanı için tempdb gerekli değildir; bu dosyalar yeni konumda otomatik olarak oluşturulur.

  6. SQL Server örneğini veya sunucuyu yeniden başlatın. Daha fazla bilgi için bkz. SQL Server hizmetlerini başlatma, durdurma, duraklatma, sürdürme ve yeniden başlatma.

  7. Aşağıdaki sorguyu çalıştırarak dosya değişikliğini doğrulayın. Sistem veritabanları yeni fiziksel dosya konumlarını raporlamalıdır.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  8. 5. Adımda veritabanı dosyalarını taşımak yerine kopyaladığınızdan, artık kullanılmayan veritabanı dosyalarını önceki konumlarından güvenle silebilirsiniz.

İzleme: Sistem veritabanını taşıdıktan msdb sonra

msdb Veritabanı taşınır ve Veritabanı Postası yapılandırılırsa aşağıdaki ek adımları tamamlayın.

  1. Aşağıdaki sorguyu çalıştırarak, msdb veritabanı için Service Broker'ın etkin olup olmadığını doğrulayın.

    SELECT is_broker_enabled
    FROM sys.databases
    WHERE name = N'msdb';
    

    Service Broker, msdb için etkin değilse, Veritabanı Postası'in çalışabilmesi için yeniden etkinleştirilmelidir. Daha fazla bilgi için bkz ALTER DATABASE . ... SET ENABLE_BROKER.

    ALTER DATABASE msdb
        SET ENABLE_BROKER
        WITH ROLLBACK IMMEDIATE;
    

    değerinin is_broker_enabled şimdi 1 olduğunu onaylayın.

  2. Bir test postası göndererek Veritabanı Postası çalıştığını doğrulayın.

Hata kurtarma prosedürü

Donanım hatası nedeniyle bir dosyanın taşınması gerekiyorsa, dosyayı yeni bir konuma yeniden dağıtmak için bu adımları izleyin. Bu prosedür, master ve Resource veritabanları dışındaki tüm sistem veritabanları için geçerlidir. Aşağıdaki örneklerde Windows komut satırı istemi ve sqlcmd Yardımcı Programı kullanılır.

Important

Veritabanı başlatılamıyorsa, şüpheli modundaysa veya kurtarılmamış durumdaysa, dosyayı yalnızca sysadmin sabit rolünün üyeleri taşıyabilir.

  1. SQL Server Database Engine hizmet hesabının dosyaların yeni konumu için tam izinlere sahip olduğunu doğrulayın. Daha fazla bilgi için bkz. Windows hizmet hesaplarını ve izinlerini yapılandırma. Database Engine hizmet hesabı yeni konumundaki dosyaları denetleyemiyorsa, SQL Server örneği başlatılmaz.

  2. Başlatıldıysa SQL Server örneğini durdurun.

  3. Komut istemine masteraşağıdaki komutlardan birini girerek SQL Server örneğini yalnızca kurtarma modunda başlatın. 3608 başlangıç parametresinin kullanılması, SQL Server'ın otomatik olarak başlamasını ve master veritabanı dışında herhangi bir veritabanını kurtarmasını engeller. Daha fazla bilgi için bkz . Başlangıç Parametreleri ve TF3608.

    Bu komutlarda belirtilen parametreler büyük/küçük harfe duyarlıdır. Parametreler gösterildiği gibi belirtilmediğinde komutlar başarısız olur.

    Varsayılan (MSSQLSERVER) örneği için aşağıdaki komutu çalıştırın:

    NET START MSSQLSERVER /f /T3608
    

    Adlandırılmış örnek için aşağıdaki komutu çalıştırın:

    NET START MSSQL$instancename /f /T3608
    

    Daha fazla bilgi için bkz. SQL Server hizmetlerini başlatma, durdurma, duraklatma, sürdürme ve yeniden başlatma.

  4. İzleme bayrağı 3608 ve /folan hizmet başlatma işleminden hemen sonra, kullanılabilen tek bağlantıyı talep etmek için sunucuya bir sqlcmd bağlantısı başlatın. Örneğin, sqlcmd'yi varsayılan (MSSQLSERVER) örneğiyle aynı sunucuda yerel olarak yürütürken ve Active Directory tümleştirme kimlik doğrulamasıyla bağlanmak için aşağıdaki komutu çalıştırın:

    sqlcmd
    

    Active Directory tümleştirme kimlik doğrulamasıyla yerel sunucuda adlandırılmış bir örneğe bağlanmak için:

    sqlcmd -S localhost\instancename
    

    sqlcmd söz dizimi hakkında daha fazla bilgi için bkz. sqlcmd yardımcı programı.

    Taşınacak her dosya için sqlcmd komutlarını veya SQL Server Management Studio'yu kullanarak aşağıdaki deyimi çalıştırın. sqlcmd yardımcı programını kullanma hakkında daha fazla bilgi için bkz. sqlcmd - yardımcı programını kullanma. sqlcmd oturumu açıldıktan sonra, her dosyanın taşınması için aşağıdaki deyimi bir kez çalıştırın:

    ALTER DATABASE database_name
        MODIFY FILE (NAME = logical_name, FILENAME = 'new_path\os_file_name');
    GO
    
  5. sqlcmd yardımcı programı veya SQL Server Management Studio'dan çıkın.

  6. SQL Server örneğini durdurun. Örneğin, komut satırı isteminde NET STOP MSSQLSERVER çalıştırın.

  7. Dosyayı veya dosyaları yeni konuma kopyalayın.

  8. SQL Server örneğini yeniden başlatın. Örneğin, komut satırı isteminde NET START MSSQLSERVER çalıştırın.

  9. Aşağıdaki sorguyu çalıştırarak dosya değişikliğini doğrulayın.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'<database_name>');
    
  10. 7. Adımda veritabanı dosyalarını taşımak yerine kopyaladığınızdan, artık kullanılmayan veritabanı dosyalarını önceki konumlarından güvenle silebilirsiniz.

master Veritabanını taşıma

Veritabanını taşımak master için şu adımları izleyin.

  1. SQL Server Database Engine hizmet hesabının dosyaların yeni konumu için tam izinlere sahip olduğunu doğrulayın. Daha fazla bilgi için bkz. Windows hizmet hesaplarını ve izinlerini yapılandırma. Database Engine hizmet hesabı yeni konumundaki dosyaları denetleyemiyorsa, SQL Server örneği başlatılmaz.

  2. Başlatmenüsünden SQL Server Yapılandırma Yöneticisi bulun ve başlatın. Beklenen konum hakkında daha fazla bilgi için bkz. SQL Server Yapılandırma Yöneticisi.

  3. SQL Server Hizmetleri düğümünde, SQL Server örneğine sağ tıklayın (örneğin, SQL Server (MSSQLSERVER)) ve Özellikler'i seçin.

  4. SQL Server (instance_name) Özellikler iletişim kutusunda Başlangıç Parametreleri sekmesini seçin.

  5. Var olan parametreler kutusunda parametresini -d seçin. Başlangıç parametresi belirtin kutusunda, parametresini master dosyasının yeni yoluna değiştirin. Değişikliği kaydetmek için Güncelleştir'i seçin.

  6. Var olan parametreler kutusunda parametresini -l seçin. Başlangıç parametresi belirtin kutusunda, parametresini master dosyasının yeni yolu olarak değiştirin. Değişikliği kaydetmek için Güncelleştir'i seçin.

    Veri dosyasının parametre değeri, -d parametresinden sonra gelmeli ve günlük dosyasının değeri de -l parametresinden sonra gelmelidir. Aşağıdaki örnekte, veri dosyasının varsayılan konumu için parametre değerleri gösterilmektedir master .

    -dC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\master.mdf
    -lC:\Program Files\Microsoft SQL Server\MSSQL<version>.MSSQLSERVER\MSSQL\DATA\mastlog.ldf
    

    master veri dosyası için planlanan yeniden konumlandırma E:\SQLData ise, parametre değerleri aşağıdaki gibi değiştirilir:

    -dE:\SQLData\master.mdf
    -lE:\SQLData\mastlog.ldf
    
  7. Değişiklikleri kalıcı olarak kaydetmek ve SQL Server (instance_name) Özellikler iletişim kutusunu kapatmak için Tamam'ı seçin.

  8. Örnek adına sağ tıklayıp Durdur'u seçerek SQL Server örneğini durdurun.

  9. master.mdf ve mastlog.ldf dosyalarını yeni konuma kopyalayın.

  10. SQL Server örneğini yeniden başlatın.

  11. Aşağıdaki sorguyu master çalıştırarak veritabanı için dosya değişikliğini doğrulayın.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID('master');
    
  12. Bu noktada SQL Server normal şekilde çalıştırılmalıdır. Ancak Microsoft, instance_ID değerinin MSSQL13.MSSQLSERVER gibi olduğu HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\instance_ID\Setup konumundaki kayıt defteri girdisinin de ayarlanmasını önerir. Bu kovanda SQLDataRoot değerini veritabanı dosyalarının yeni konumunun yeni yolu olarak master değiştirin. Kayıt defterinin güncelleştirilememesi, düzeltme eki uygulama ve yükseltmenin başarısız olmasına neden olabilir.

  13. 9. Adımda veritabanı dosyalarını taşımak yerine kopyaladığınızdan, artık kullanılmayan veritabanı dosyalarını önceki konumlarından güvenle silebilirsiniz.

Kaynak veritabanını taşıma

Veritabanının Resource konumu şeklindedir \<drive>:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Binn\. Veritabanı taşınamaz.

İzleme: Tüm sistem veritabanlarını taşıdıktan sonra

Tüm sistem veritabanlarını yeni bir sürücüye veya birime ya da farklı bir sürücü harfine sahip başka bir sunucuya taşıdıysanız aşağıdaki güncelleştirmeleri yapın.

  • SQL Server Agent günlük dosyası yolunu değiştirin. Bu yolu güncelleştirmezseniz SQL Server Agent başlatılamaz.

  • Veritabanının varsayılan konumunu değiştirin. Varsayılan konum olarak belirtilen sürücü harfi ve yol mevcut değilse yeni veritabanı oluşturma işlemi başarısız olabilir.

SQL Server Agent günlük dosyası yolunu değiştirme

Tüm sistem veritabanlarını yeni bir birime taşıdıysanız veya farklı bir sürücü harfiyle başka bir sunucuya geçtiyseniz ve SQL Aracısı hata günlüğü dosyasının SQLAGENT.OUT yolu artık yoksa aşağıdaki güncelleştirmeleri yapın.

  1. SQL Server Management Studio’da, Nesne Gezgini içinde SQL Server Agent öğesini genişletin.

  2. Hata Günlükleri’ne sağ tıklayın ve Yapılandır’ı seçin.

  3. SQL Server Agent Hata Günlüklerini Yapılandır iletişim kutusunda, SQLAGENT.OUT dosyasının yeni konumunu belirtin. Varsayılan konum şeklindedir C:\Program Files\Microsoft SQL Server\MSSQL\<version>.<instance_name>\MSSQL\Log\.

Veritabanı varsayılan konumunu değiştirme

  1. SQL Server Management Studio'da, Nesne Gezgini bölümünden istenen SQL Server örneğine bağlanın. Örneğe sağ tıklayın ve özellikler seçin.

  2. Sunucu Özellikleri iletişim kutusunda Veritabanı Ayarları'nı seçin.

  3. Veritabanı Varsayılan Konumları'nın altında hem veri hem de günlük dosyaları için yeni konuma göz atın.

  4. Değişikliği tamamlamak için SQL Server hizmetini durdurun ve başlatın.

Examples

A. tempdb Veritabanını taşıma

Aşağıdaki örnek, verileri ve günlük dosyalarını planlanan yeniden konumlandırmanın bir parçası olarak yeni bir konuma taşır tempdb .

Tip

tempdb dosyalarınızı en uygun boyut ve konumlandırma açısından gözden geçirmek için bu fırsatı değerlendirin. Daha fazla bilgi için bkz. SQL Server tempdb performansını iyileştirme.

tempdb SQL Server örneği her başlatıldığında yeniden oluşturulur çünkü verileri ve günlük dosyalarını fiziksel olarak taşımanız gerekmez. Dosyalar, hizmet 4. adımda yeniden başlatıldığında yeni konumda oluşturulur. Hizmet yeniden başlatılana kadar mevcut tempdb konumdaki verileri ve günlük dosyalarını kullanmaya devam eder.

  1. Veritabanının mantıksal dosya adlarını tempdb ve disk üzerindeki geçerli konumlarını belirleyin.

    SELECT name,
           physical_name AS CurrentLocation
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    GO
    
  2. SQL Server Database Engine hizmet hesabının dosyaların yeni konumu için tam izinlere sahip olduğunu doğrulayın. Daha fazla bilgi için bkz. Windows hizmet hesaplarını ve izinlerini yapılandırma. Database Engine hizmet hesabı yeni konumundaki dosyaları denetleyemiyorsa, SQL Server örneği başlatılmaz.

  3. Her dosyanın konumunu kullanarak ALTER DATABASEdeğiştirin.

    USE master;
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = tempdev, FILENAME = 'E:\SQLData\tempdb.mdf');
    GO
    
    ALTER DATABASE tempdb
        MODIFY FILE (NAME = templog, FILENAME = 'F:\SQLLog\templog.ldf');
    GO
    

    Hizmet yeniden başlatılana kadar mevcut tempdb konumdaki verileri ve günlük dosyalarını kullanmaya devam eder.

  4. SQL Server örneğini durdurup yeniden başlatın.

  5. Dosya değişikliğini doğrulayın.

    SELECT name,
           physical_name AS CurrentLocation,
           state_desc
    FROM sys.master_files
    WHERE database_id = DB_ID(N'tempdb');
    
  6. Kullanılmayan tempdb dosyaları özgün konumlarından silin.