SQL Server 2008'den 2005'e düşürme


32

SQL 2008 kullanılarak oluşturulan veritabanı dosyaları 2005 ile uyumlu değildir.


Sunucu girişlerini de dışa aktarmayı unutmayın.
StanleyJohns

Bunun nedeni 2008'de gelişiyor olmanız, ancak üretim sunucularınızın hala 2005 olması mı? Sağladığınız herhangi bir çözüm, kaçınılmaz olanı geciktirecek ve aynı zamanda hayatınızı perişan hale getirecektir, çünkü muhtemelen bu düşüşleri düzenli olarak yapmanız gerekecektir.
datagod

Yanıtlar:


16

3. parti araç gerekmez. SQL Server 2008 Management Studio, "Script veri tabanı" sihirbazına "Script veri" seçeneği ekledikleri için veritabanını aşağı dönüştürmemiz için çok güçlü bir araç verdi.

SQL2008 SSMS'de DB'ye sağ tıklayın ve Görevler'e ve ardından "Komut Dosyaları Oluştur" seçeneğine gidin.

Sihirbazı yürütün, tablo / görünüm seçeneklerinin altındaki "Komut Dosyası Verileri" için "Doğru" yu seçtiğinizden emin olun. Tüm nesneleri seçin, ardından 2005 sunucusunda oluşturduğu komut dosyasını çalıştırın. (Yaratılan senaryo olabileceğini unutmayın masif orijinal veritabanı çok büyükse!)

Bir SQL2005 veritabanını SQL2000'e dönüştürmek için sihirbazı bir SQL2005 sunucusunda bile çalıştırabileceğinizi unutmayın (elbette iş istasyonunuzda yüklü olan 2008 araçlarına ihtiyacınız olacaktır).


4
Alınma ama, veritabanı büyükse bu bir çözüm olamaz. Bu tekniği birkaç milyon satırlık herhangi bir masada deneyin (ve tek bir sütunun veri türü olarak varchar (max) olarak düşünün) ve Management Studio bu dosyayı açıp ayrıştırabilirse mutlu olursunuz, ama ben açılmayacağından emin, çökecek. Üzgünüz, ama bu sorunun çözümü değil, db'nin gerçekten küçük olması dışında.
Marian,

3
Tabii, eğer db çok büyükse, sadece veritabanı yapısını kopyalayın, ardından verileri itmek için en sevdiğiniz yöntemi (SSIS, BCP, Alma Sihirbazı) kullanın.
BradC

SSMS 11.0'da, yapıyla birlikte verileri kodlamak için bir seçenek bulunmadığı görülmektedir. i.imgur.com/SGkG8oZ.png
jcollum

Ah tamam şimdi altında "Komut dosyası için veri türleri" altında Tablo / Görüntüleme Seçenekleri
jcollum

16

Verileri bir SQL Server örneğinden başka bir örneğe BCP olarak atabilirsiniz. Verileri bir sürümden diğerine kopyalamanın en hızlı yolu bu olacaktır. Veri hacmine bağlı olarak uzun sürebilir.


2
Veri hacmine bağlı olarak, neredeyse her zaman uzun zaman alacaktır
jcolebrand

Evet, kesinlikle olacak. Büyük bir veritabanını SQL Server'ın eski bir sürümüne taşımak kolay bir iş değildir.
mrdenny

2
BCP'nin tersi, komut dosyası verilerini kullanmaktan daha hızlı olacağı yönündedir. Evet, yavaş, ama birçok alternatiften daha hızlı.
Jeremiah Peschka

15

Bildiğim kadarıyla, bir veri tabanını 2008 formatından 2005’e düşürmek için hiçbir yol yok.

Geçmişte bunu yaptım (aslında eski SQL Server sürümlerinde, ancak işlem aynı olacaktır):

  1. Henüz yapılmadıysa DB'yi bir SQL2008 örneğinde geri yükleyin
  2. Bir SQL2005 örneğinde doğru yapılarla (tablolar, dizinler, kısıtlamalar, görünümler, işlemler, tetikleyiciler, ...) boş bir DB oluşturun. Umarım bunu mevcut derleme prosedürünüzden ve / veya kaynak kodunuzdan yapabilirsiniz, ancak değilseniz, 2005 DB'deki her şey için komut dosyaları oluşturmak ve sonucu 2008 örneğinde boş bir kod üzerinde çalıştırmak için SQL Server Manager'ı kullanabilirsiniz.
  3. İki örneğin birbirini görebildiğinden emin olun (örneğin, farklı makinelerdeyse bağlantıları engelleyen güvenlik duvarı yok) ve bunları sp_addlinkedserver kullanarak bağlayın .
  4. Tüm verileri bir DB'den diğerine kopyalayın. Yabancı anahtar kısıtlamaları ve tetikleyicilerde endişelenmeniz gereken benzer sorunlar yoksa, yalnızca DB'leri bir araya getirebilir ve imleci tablo listesi (sys.objects arasından seçerek) ve çalıştırabilir
    INSERT destinationserver.destinationdb.schema.table SELECT * FROM sourcedb.schema.table
    (veya INSERT schema.table SELECT * FROM sourceserver.sourcedb.schema.tableörnekleri bu şekilde bağladıysanız) )
    her masa için. Tablolar arası tutarlılığı zorlayan kısıtlamalar ve tetikleyiciler varsa, elbette bu işlemlerin sıralanması konusunda biraz daha zeki olmanız gerekir, özellikle de kendisinin temel aldığı bir kısıtlama içeren bir tablo gibi döngüsel kısıtlamalar varsa (bir sıradüzensel tutma) olası bir örnek olarak veri).

Önce verileri kopyalamak ve 3. adımdan sonra diğer tüm yapıları (dizinler, procs, tetikleyiciler, ...) eklemek daha verimli olabilir. son teoride, tüm veriler eklendikçe bunları oluşturmaktan daha hızlı olmalıdır - tablolarınızda kümelenmiş dizinler varsa, verileri eklemeden önce bunları oluşturduktan sonra oluşturduklarından daha hızlı olamazlar.

Tabii ki, bunların hepsi nesnelerinizden hiçbirinin SQL 2008'e özgü özellikler kullanmadığını varsayar - eğer yaparlarsa, şemayı yeniden oluştururken hatalar çıktıkça bunları çözeceğinizi ve çözeceğinizi umarsınız. Kodunuzdan herhangi biri, SQL Server sürümleri arasında değişiklik gösteren resmen tanımlanmamış davranışlara dayanıyorsa, daha sonra avlamak ve ütülenecek çok daha ince ve zor böceklere sahip olabilirsiniz.


1
-1 çünkü bu aslında BCP'ye benzer olarak verimsizdir (arasından * seçim yapın).
jcolebrand

@jcolebrand verimlilik konusunda yeterince adil. Her ne kadar bu teknik benim sahip olduğum teknik.
David Spillett

bu adil bir sistem, sadece buradaki gelecekteki okuyucular nedeniyle bunu ekleyeceğimi düşündüm. Sorun olmaması için şu anda en yüksek puanları aldınız. ;)
jcolebrand


1

Öncelikle veritabanını yazmalı ve not almak istediğiniz türü belirlediğiniz sürümden emin olmalısınız. Ve verileri daha yüksek sürümden daha düşük sürüme kopyalamak için SQL Data Compare sizin için hile yapar.

İyi şanslar!

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.