Orijinal makale:
- https://www.mssqltips.com/sqlservertip/2810/how-to-migrate-a-sql-server-database-to-a-lower-version/
- https://accdox.com/h1d08

Sorun
Daha yüksek bir SQL Server sürümünden yedeklenmiş veritabanlarınız var ve herhangi bir nedenle yedeği daha eski bir sürüme geri yüklemeniz gerekiyor. Kısa bir süre önce böyle bir senaryoyla karşılaştım: SQL Server 2019 veritabanını SQL Server 2008R2'ye geri yüklemek. Veritabanı yedek dosyalarını geri yüklemeye çalışırken şu hata mesajı alınıyor:
- Msg 1813, Seviye 16, Durum 2, Satır 1
Yeni 'DatabaseName' veritabanı açılamadı. CREATE DATABASE komutu iptal edildi.
Msg 948, Seviye 20, Durum 1, Satır 1
'DatabaseName' veritabanı, sürüm 655 olduğu için açılamaz. Bu sunucu, sürüm 611 ve önceki sürümleri destekler. Sürüm düşürme yolu desteklenmemektedir.
veya benzer bir hata.
Bu hata mesajı, SQL Server'ın geri yükleme sırasında veritabanının sürümünü kontrol etmesi ve daha yeni bir SQL Server sürümündeki veritabanını daha eski bir SQL Server sürümüne geri yüklemenize izin vermemesi nedeniyle oluşturulur. Aynı durum atach komutu için de geçerlidir.
Bu yazıda, veritabanını daha yüksek bir SQL Server sürümünden daha düşük bir SQL Server sürümüne düşürmek için bir yaklaşımı ele alacağız. Bu çözüm test edilmiştir ve küçük boyutlu veritabanlarında çalışmaktadır.
Çözüm
Hata mesajında belirtilen sorun, SQL Server veritabanı dosyalarının (*.mdf, *.ndf ve *.ldf) ve arşivlerinin geriye dönük uyumlu olmaması nedeniyle ortaya çıkmaktadır. Bu nedenle, daha yüksek bir SQL Server sürümünde oluşturulan bir veritabanını daha düşük bir SQL Server sürümüne geri yükleyemiyoruz veya ekleyemiyoruz. Ancak, veritabanını daha yüksek bir SQL Server sürümünden daha düşük bir SQL Server sürümüne düşürmemize yardımcı olabilecek birkaç seçenek vardır.
Bu seçenekler şunlardır:
- SQL Server Management Studio'daki komut dosyası oluşturma sihirbazını kullanın
- SQL Server Integration Services'ı kullanın
- Özel komut dosyaları ve BCP oluşturun
Bu yazıda, SQL Server Management Studio'daki komut dosyası oluşturma sihirbazını kullanacağız.
İşte izlememiz gereken temel adımlar:
- SSMS'deki komut dosyası oluşturma sihirbazını kullanarak, daha yüksek sürümdeki SQL Server'dan veritabanı şemasını ve verileri içeren bir komut dosyası oluşturun.
- Daha düşük sürümdeki SQL Server’a bağlanın ve önceki adımda oluşturulan SQL komut dosyalarını çalıştırın.
Bir sonraki bölümde, SQL Server 2012 veritabanını SQL Server 2008 R2 veritabanına düşürme adımlarını açıklayacağım.
Not: Tanıtım amacıyla, SQL Server 2012 (örneğin SRV02\SQLSERVER2012) üzerinde barındırılan TEST_DB veritabanını SQL Server 2008 R2 (örneğin SRV01\SQLSERVER2008) sürümüne düşüreceğiz.
Orijinal makaleden görselleri inceleyebilirsiniz.
SSMS
komut dosyası oluşturma sihirbazını kullanarak SQL Server veritabanını düşürme adımlarıAdım 1
SSMS'deki komut dosyası oluşturma sihirbazı'nı kullanarak SQL Server 2012 (SRV02\SQLSERVER2012) üzerindeki TEST_DB veritabanının şemasının komut dosyasını oluşturalım.
Nesne Gezgini'nde SRV02\SQLSERVER2012 ile bağlantı kurun, TEST_DB veritabanına sağ tıklayın, Görevler'i genişletin ve "Komut Dosyaları Oluştur...".
Bu, Generate and Publish Scripts sihirbazını başlatır. Introduction ekranını atlamak için Next'e basın ve Choose Objects ekranına geçin. Bu ekrandan şunu seçin: "Script entire database and all database objects" ve yine Next düğmesine basarak "Set Scripting Options"
ekranına geçin.Bu ekrandan komut dosyası dosyasını kaydetmek istediğiniz konumu belirtin ve ardından Advanced düğmesine tıklayın.
Advanced Scripting Options iletişim penceresinde şunu seçin:
- Script for Server Version seçeneğini SQL Server 2008 R2 (veya istediğiniz sürüm) olarak ayarlayın
- Types of data to script seçeneğini Schema and Data olarak ayarlayın - bu seçenek çok önemlidir, çünkü tablo verilerini oluşturan budur
- "Table/View Options" altında, Script Triggers, Script Indexes ve Script Primary Keys seçeneklerini True olarak ayarlayın
Hazır olduğunuzda, Advanced Scripting Options iletişim kutusunu kapatmak ve "Set Scripting Options" sayfasına geri dönmek için OK'e tıklayın. Artık Summary sihirbazına geçmek için Next'e tıklayabilirsiniz.
Summary sayfasında seçimlerinizi gözden geçirdikten sonra, Next düğmesine tıklayarak komut dosyalarını oluşturun.
Komut dosyaları başarıyla oluşturulduktan sonra, Finish düğmesini seçerek komut dosyalarını oluşturma ve yayınlama sihirbazını kapatın: Generate and Publish Scripts.
Adım 2
SQL Server 2008 R2 (SRV01\SQLSERVER2008) ile bağlanın ve ardından Adım 1'de oluşturulan SQL komut dosyalarını çalıştırarak eski sürümdeki TEST_DB veritabanının şemasını ve verilerini oluşturun.
Nesne Gezgini'de SRV01\SQLServer2008 (SQL Sunucusunun eski sürümü) ile bağlantı kurun, ardından SQL Server Management Studio'da Adım 1'de oluşturduğumuz komut dosyasını şuradan seçin: Dosya/Aç/Dosya ... menüsünden dosyayı seçin ve
Komut dosyası yüklendikten sonra, TEST_DB veritabanının verileri ve kayıt dosyaları için doğru konumu belirtmek üzere mutlaka değişiklikler yapın. Hazır olduğunuzda, komut dosyasını çalıştırarak SRV01\SQLServer2008 örneğinde TEST_DB veritabanını oluşturun.
İşlem başarıyla tamamlandığında, Object Explorer'da Database klasörünü /refresh/ komutuyla yenileyin; böylece TEST_DB veritabanının başarıyla düşürüldüğünü görebilirsiniz.
Notlar
Bu yaklaşımı kullanırken bilmeniz gereken birkaç nokta vardır.
- Bu çözüm, veritabanı nesnelerini oluşturmaya yönelik komut dosyalarının yanı sıra tablolardaki veriler için INSERT deyimlerini de içeren tek bir SQL dosyası oluşturur.
- Büyük veritabanları için, hem şemayı hem de verileri yazarsanız SQL dosyası çok büyük hale gelebilir ve bir düzenleyicide yüklenmesi zor olabilir. Ayrıca, dosya çok büyükse, düzenleyiciden bellekle ilgili bir hata mesajı alabilirsiniz.
- Büyük veritabanları için, yaklaşık 1 GB veya daha büyükse, bu yaklaşım işe yaramazsa, veritabanını taşımak için SSIS'yi kullanmayı veya her bir tablo için nesne komut dosyaları ve veri için BCP'yi içeren özelleştirilmiş komut dosyaları oluşturmayı düşünmelisiniz. Bu komut dosyası oluşturma sihirbazını kullanarak veriler hariç şemayı oluşturabilir ve verileri dışa ve içe aktarmak için SSIS veya BCP'yi kullanabilirsiniz.
- Bu yaklaşım, SQL Server 2005'ten SQL Server 2019'a kadar geçerlidir. Bazı komut dosyası seçenekleri daha yeni sürümlerde biraz farklı olabilir, ancak süreç aynı kalır.
- Komut dosyasını çalıştırmadan önce, veritabanı dosyalarının yolu, veritabanı seçenekleri vb. gibi her şeyin doğru göründüğünden emin olmak için komut dosyasını gözden geçirmelisiniz.
- Ayrıca, daha eski sürümde bulunmayan yeni bir işlev kullanıyorsanız, SQL Server nesneleri oluşturamayacaktır ve oluşturulan komut dosyalarını gözden geçirip kodu buna göre güncellemeniz gerekecektir.
- Çok basit bir veritabanı için bu yaklaşım oldukça kolay bir şekilde işe yarayacaktır, ancak daha karmaşık bir veritabanı için komut dosyasında bazı değişiklikler yapmak üzere biraz zaman ayırmanız gerekebilir.
Sonraki adımlar
- Sorunları önlemek için, SQL Server ve veritabanını daha yüksek bir SQL Server sürümüne yükseltmeden önce her zaman veritabanının tam bir yedeğini aldığınızdan emin olun. Ayrıca, uygulamayı kullanıcılara sunmadan önce kapsamlı bir şekilde test etmeyi unutmayın.
- Gerekli süre ve depolama alanı çok fazla olabileceğinden, bu geriye dönme seçeneğini yükseltmeden geri dönmek için son çare olarak değerlendirin.
- Çok büyük bir veritabanı söz konusuysa, veri ihtiyaçlarını karşılayacak yeterli depolama alanınız olduğundan emin olun.
- Uygulamanızı üretime almadan önce satır ve nesne sayılarını kontrol etmeyi ve uygulamanızı test etmeyi unutmayın.
Add Comment