2008 ile yapılan yedeklemeler için SQL Server 2012 geriye dönük uyumluluk


14

SQL Server 2008 ile birkaç istemcim var ve burada sunucumda da var. İstemciler arasında ve ofisimde veritabanlarını göndermek için yedekleme dosyaları kullanıyorum.

SQL Server 2012'den bir yedekleme oluşturduğunuzda, bunu 2008 örneğine geri yüklemenin bir yolu olmadığını okudum. Uyumluluk seviyesinin bu problemle ilgileneceğini varsaydım, ama etmiyor. Bu nedenle, nasıl yükseltileceği konusunda kayıp yaşıyorum. Tüm müşterilerimi bir kerede yükseltmek dışında, bu imkansız, bunu yapmak için temiz bir yol düşünemiyorum.

Bir istemciye bir veritabanı göndermek yanı sıra bir istemciden bir veritabanı almak zorunda. Bu, SQL Server'daki ilk sürüm yükseltmem, bu yüzden bu sorun için yeniyim. Nasıl ilerleyeceğiniz hakkında bir fikriniz var mı?


4
Sunucunuzda aynı anda farklı örnek adlarıyla bir SQL Server 2008 ve bir SQL Server 2012 örneğiniz olabilir. Belki de bu, farklı sürümlerdeki istemcilerle olan sorunlarınızı çözer mi?
Mikael Eriksson

SO hakkında benzer soru: stackoverflow.com/q/1744808/95710
DForck42

Yanıtlar:


16

Burada iki şey var: dosyanın sürüm numarası ve uyumluluk seviyesi. Daha yeni bir ana sürüme (2008'den 2008R2'ye veya 2008R2'den 2012'ye) bir veritabanı eklediğinizde, veritabanı sürümü kalıcı olarak değiştirilir ve bu veritabanını daha eski bir sürüme ekleyemezsiniz.

Uyumluluk düzeyi, eski SQL Server'ın eski sürümlerinde kullanılan eski okulu kullanımdan kaldırılmış T-SQL'i ayrıştırmak içindir. Verilerin diskte depolanma şeklini değiştirmez.

Veritabanını SQL Server'ın eski bir sürümünde birine vermek için, verileri dışa aktarmanız ve başka bir veritabanına aktarmanız gerekir. Red Gate'in Veri Karşılaştırması gibi araçlar bunun için yararlıdır.


Evet, daha önce aynı problemi yaşadım. Tüm veritabanını ve sonra tüm verileri komut dosyasını bitirdi. Red Gate'in SQL Karşılaştırması ve Veri Karşılaştırması o gün kurtarmaya geldi.
DForck42

@ DForck42: Benim durumumda, DB veri ile komut dosyası için çok büyüktü, bu yüzden şemayı komut dosyası, sonra ile veri hareket sona erdi bcp.
ivan_pozdeev

@ivan_pozdeev, SQL Server 2012 BCP kullanarak dışa aktardığınızı ve SQL Server 2008R2 BCP kullanarak içe aktardığınızı mı söylüyorsunuz? Dosya formatlarının uyumlu olduğunu bilmek harika, teşekkürler.
Chris

2
@Chris msdn.microsoft.com/tr-tr/library/ms162802.aspx "SQL Server 2014'te bcp yardımcı programı, SQL Server 2000, SQL Server 2005, SQL Server 2008, SQL Server 2008 R2 ve SQL Server 2012. "
ivan_pozdeev

Teşekkürler @ivan_posdeev, bu bir vahiy oldu. Başkalarına yardımcı olması durumunda aşağıdaki adımlarımı belgeledim .
Chris

6

Uyumluluk düzeyi ayarı, belirli yeni özelliklerin nasıl işlenmesi gerektiğini belirlemek için SQL Server tarafından kullanılır. Bu şekilde bir DB, uygulamada sorun yaşamadan SQL'in daha yeni bir sürümüne geçirilebilir. Uyumluluk seviyesi ileri geri değiştirilebilir.

Ne yazık ki, yedek dosyalar geriye dönük olarak uyumlu değildir. Bir yöntem, verilerinizi geçerli DB'nizden eski sürüm örneğinize taşımak için içe / dışa aktarmayı kullanmak olabilir.


3

SQL geçişleri için, ücretsiz ve açık kaynaklı SQL Veritabanı Geçiş Sihirbazı'nı kullanın.

Ben çift ~ 10 milyon kayıtları ile bir 5GB veritabanı vardı ve Komut Dosyası Oluştur ile yolu denedim ve daha sonra sqlcmd.exe ile koştu. Her şeyden önce, oluşturulan komut dosyası her zaman doğru çalışmadı. İkincisi, sqlcmd.exe kullanılabilir bellek hakkında şikayet, büyük dosyalar üzerinde de başarısız olabilir. osql.exe çalışır, ancak sadece yaş alır (ve aynı komut satırı bağımsız değişkenlerine sahiptir).

Sonra SQL Server'ı SQL Azure veritabanlarına geçirmek için harika bir araçla karşılaştım. Bu, örneğin bir SQL 2012 veritabanını 2008 R2'ye geçirmek istiyorsanız, SQL Server'dan SQL Server'a da çalışır. Toplu kopya kullanan bcp.exe dosyasını kullanır. Bir GUI ve komut satırı (Toplu) sürümü mevcut ve açık kaynak. Bkz. Http://sqlazuremw.codeplex.com/ . Benim durumumda, operasyon 16 dakika sürdü.

Gelişmiş bir ekranda, hedefinizin SQL Azure değil, SQL Server olduğunu seçebilirsiniz.


2

BCP'nin SQL Server'ın önceki bir sürümüne veri almak ve RDS'den veri çekmek için bazı araçlardan daha etkili olduğunu gördüm. (Teşekkürler @ivan_posdeev.)

İlk önce SQL Server Management Studio, Görevler, Komut dosyaları oluştur'daki veritabanına sağ tıklayarak şemayı oluşturuyorum. Gelişmiş nesnelerdeki tüm nesneleri işaretleyin, ihtiyacınız olan her şeyin komut dosyasında olduğundan emin olun (istatistikler, dizinler vb.), Hedef veritabanınız farklı bir ada sahipse "veritabanını KULLAN" seçeneğinin işaretini kaldırın, uyumluluğu hedef veritabanı sürümünüzle ayarlayın ve şemanızı oluşturan dosya. Hedefinize bir veritabanı oluşturun ve (kullanarak üzerinde bu dosyayı çalıştırmak osql, sqlcmdveya GUI).

Verileri taşımak için , kaynak veritabanında aşağıdaki sorguyu iki kez çalıştırın , önce verileri ayıklamak için toplu iş dosyasını oluşturmak üzere ikinci sütunu yorumlayın, ardından hedefinizde çalışacak içe aktarma toplu iş dosyasını oluşturmak için ilk sütunu yorumlayın. (Kaynak ve hedef sunucularınızı, örnek adlarını, çıktı ve girdi dosya dizinlerini, kullanıcı adlarını ve parolaları eklemeniz gerekir. Entegre güvenliği kullanmak için ve seçeneklerini sadece ile değiştirin .)-U-P-T

Bu, Unicode'u destekler, eğer ihtiyacınız yoksa -N, her iki ifadedeki anahtarı olarak değiştirin -n.

SELECT 
   'bcp SOURCEDATABASE.' + s.Name + '.' + t.NAME  + ' out d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S SOURCESERVER\INSTANCE -UUSER -PPASSWORD'
--    'bcp DESTINATIONDATASE.' + s.Name + '.' + t.NAME  + ' in d:\dbdump\' + s.Name + '.' + t.NAME  + '.dat -N -S DESTINATIONSERVER\INSTANCE -UUSER -PPASSWORD -E -h TABLOCK -b 1000 -e d:\dbdump\' + s.Name + '.' + t.NAME  + '.ERRORS.dat'
FROM 
    sys.tables t
INNER JOIN      
    sys.indexes i ON t.OBJECT_ID = i.object_id
LEFT OUTER JOIN 
    sys.schemas s ON t.schema_id = s.schema_id
ORDER BY 
    s.Name, t.NAME

Schema.tablename.ERRORS.dat adlı kontrol dosyalarını çalıştırdıktan sonra - başarısız olan satırları içerecek, eğer yapılmadıysa boş olacaktır.

Burada BCP için MSDN referansı, burada BCP seçeneklerinden daha kolay yürüyün .

Bunu komut dosyaları ve denediğim araçlardan çok daha üstün buldum. Ayrıca RDS veritabanlarında da çalışır (yedeklemeye izin vermez). Oluşturulan veri dosyaları SQL komut dosyalarının boyutunun% 30'u kadardır, bunları çalıştırmak zamanın bir kısmını alır ve çok daha güvenilirdir. (SQL Server tarafından komut dosyası verileri için oluşturulan komut dosyaları her zaman tetiklenir, bazen tahmin edilebilir bazen değil, oluşturulan SQL 2008R2 ile uyumlu değildi (örn. Kullanıldı nvarchar(0), genellikle fark edilebilir bir nedenden ötürü tamamlanmadı vb.) BCP ayrıca herhangi bir kısıtlama ihlali de çoğaltır referans referans bütünlüğü gibi).

Sitemizi kullandığınızda şunları okuyup anladığınızı kabul etmiş olursunuz: Çerez Politikası ve Gizlilik Politikası.
Licensed under cc by-sa 3.0 with attribution required.