Azure veritabanlarımız için olmazsa olmaz bacpac özelliğini kendi deneyimlerimden yola çıkarak on-premise MS SQL Server için downgrade gibi farklı işler için de kullanabileceğimizi göstermek istedim. İşlemlere başlamadan önce konuyla ilgili hem püf noktalar hem de bilgiler vermeye çalışacağım.
İlk görselimizde compatibility_level’ı 2017 ile gelen 140 olarak görmekteyiz. Downgrade işlemi için bu kafanızı karıştırabilir. Bunu 2014 compatibility_level olan 120 olarak değiştirmeniz, veritabanınızı 2014 bir SQL Server’a taşıyabileceğiniz anlamına gelmiyor.
İlk sorguda görebileceğiniz gibi veritabanımızın bir de Internal Database Version olarak tutulan 904 versiyonunda olduğunu görüyoruz. Bu da bize veritabanımızın SQL Server 2019 üzerinde olduğu bilgisini veriyor.
Resim – 1
Bu bizim ne işimize mi yarayacak?
İşte tam bu yüzden mevcut versiyondan daha düşük versiyonlu bir SQL Server’a Restore işlemi gerçekleştiremezsiniz. Yani Internal Database Version 904 (SQL Server 2019) ve üzeri bir SQL Server gerektiğini bu bilgiden anlayabiliyoruz.
Neden veritabanımızı Backup-Restore ile downgrade edemeyeceğimizi anladığımıza göre alternatif olarak Export Data-Tier Application özelliği ile nasıl bu işlemi yapabileceğimiz kısımına geçebiliriz.
Dikkat etmemiz gerekenler;
- Extract ile Export kelimelerine çok dikkat etmeniz gerekiyor. Extract işlemi sizlere Schema bazlı bir .dacpac uzantılı dosya verir. Bizim yapacağımız işlem ise Export işlemidir. Burada Data ve Schemayı birlikte alırız. Uzantısı ise .bacpac olur.
- İşlemi SQL Server 2014 ve üzerinde rahat bir şekilde yapabileceğinizi söyleyebilirim. Daha eski versiyonlar ile ilgili data tipinlerine bağlı farklı sorunlar yaşayabilme ihtimaliniz var.
- Bu işlem sizlerin tablolarda tutulan verilerinizi taşısa bile index gibi objelerin verilerini taşımaz. Indexlerin scriptlerini verileri yazdıktan sonra enable etmeye başka bir tabir ile Rebuild etmek ister. Bu da Import aşamasında down time süresinin uzun olma ihtimalini doğuruyor. Planlamanızı buna göre yapmanızda fayda var.
Püf noktalar;
- Püf noktaları uygulamadan önce Full Backup almanızda fayda var.
- Export öncesinde veritabanı altında tanımladığınız kullanıcıları kaldırılmanız hata oranını azaltacaktır.
- Çok fazla Stored Procedure, Function, View kullanıyorsanız ve içerisinde diğer veritabanlarımıza eriştiğimiz Cross-Database Queryler Import aşamasında hata verecektir.
- xp_cmdshell, sp_start_job tarzında işlemleri barındıran komutlar Import aşamasında hata verecektir.
- ve 4. madde için aşağıda anlatacağım basit yöntemi kullanarak daa problemsiz bir şekilde atlatabilirsiniz.
Burada asıl amacımız pratik bir şekilde datayı taşımak. O yüzden Generate Script özelliği ile Stored Procedure vb. objelerimizin CREATE scriptlerini aldıktan sonra Export işleminine başlamadan önce veritabanı üzerinden bu objelerimizi kaldırırsak bunlara bağlı problemler yaşamayız. Import işlemlerimiz başarılı olarak bittikten sonra ise bu oluşturduğumuz CREATE script dosyasını çalıştırarak yeni veritabanımız üzerinde bu objelerimizi tekrardan hızlıca oluşturabiliriz.
Şimdi Export işlemlerimize başlayalım. Ben bu işlemi herkesin erişebileceği AdventureWorks2017 OLPT sürümü üzerinde gerçekleştireceğim. Resim – 1 ‘de gördüğünüz gibi bu veritabanımızı SQL Server 2019 versiyonundaki bir sunucudan 782 (SQL Server 2014) versiyonlu bir sunucuya taşıyacağım.
İlk işlem olarak veritabanı üzerinden Tasks > Export Data-tier Application işlemine giriyoruz.
Resim – 2
Burada .bacpac uzantılı dosyamızı çıkartmak için bir disk alanı belirtmemiz isteniyor.
Resim – 3
Advanced sekmesine göz atmak isterseniz. Burada varsayılan olarak Select All seçeneği seçili geliyor ve şema bazlı Export etmek istemediğimiz bir işlem varsa buradan eleme yapıyoruz.
Resim – 4
Son olarak özet ekranımızda bütün ayarlarımızı görebiliyoruz.
Resim – 5
Veritabanımızı basit bir şekilde Export ettik. Genelde bu aşamada pek bir problem yaşamayacaksınız. Asıl olayların gelişeceği kısım Import tarafında başlıyor. 😊
Resim – 6
Çıkardığımız .bacpac file 17MB, veritabanımızın büyüklüğü 336MB olduğunu ayrıca belirtmek isterim. Makalenin üst kısımında belirtmiş olduğum sebeplerden dolayı gerçekten çok efektif boyutlarda tutabiliyor.
Şimdi MS SQL Server 2014 kurulu olan diğer sunucumuza giderek. Databases > Import Data-tier Application seçeneğimizi seçiyoruz.
Resim – 7
Export ettiğimiz .bacpac dosyamızı gösteriyoruz.
Resim – 8
Bizlerden yeni oluşturacağı veritabanı için .mdf ve .ldf dosyalarını nerede tutmamız gerektiğini ve veritabanımızı hangi isimle oluşturmak istediğimizi soruyor.
Resim – 9
Import etmeden önce son bilgilerimizi de kontrol ettikten sonra Finish’e basarak aktarımın tamamlanmasını bekliyoruz.
Resim – 10
Tabi ki her şeyi toz pembe anlatacak değiliz 😊
Resim – 11
FULLTEXT INDEX özelliği veritabanında aktif olmadığı için hata verdi. Açıkçası hataların benim için çok açıklayıcı olduğunu söyleyebilirim. Burada yapılacak işlem, mevcut veritabanında bu özelliğe ait kaç tablo varsa sistem tablolarından tespitlerini yapıp kaldırmak ve tekrardan öncelikle Export sonrasında Import yapmaya çalışarak süreci tekrarlamaktan ibaret
Süreci tekrarladığımda gördüğünüz gibi Datalar ve indexler oluşturuldu. Hemen sonrasında indexleri Enable ederek süreci sonlandırıyor.
Resim – 12
Yeni veritabanımızı da kontrol ettiğimizde 782 (SQL Server 2014) üzerinde 120 (SQL Server 2014) uyumluluk modunda çalıştığını görebiliyoruz.
Resim – 13
Makalemin sonuna gelirken buradaki işlemleri yaparken yedeklerinizi almayı, yedeklerinizin çalıştığından emin olmayı ve bu işlemleri yaparken sorumluluğun tamamen sizlere ait olduğunu hatırlatmak isterim.
Bu konuyla ilgili sorularınızı alt kısımda bulunan yorumlar alanını kullanarak sorabilirsiniz.
Referanslar
TAGs: SQL Server, Database, bacpac, dacpac, compatibility level, internal database version, downgrade, export data-tier application, azure