Veritabanını SQL Server 2012'den 2008'e taşıma


29

Bir 2008 sunucusuna kopyalamak istediğim bir SQL Sever 2012 örneğinde bir veritabanım var. 2008 sunucusu, 2012 sunucusu tarafından oluşturulan yedeklemeleri geri yükleyemez (denedim).

2008'de uyumlu bir yedekleme oluşturmak için 2012'de hiçbir seçenek bulamıyorum. Bir şey mi eksik?

Şema ve verileri, 2008'e aktaracağım bir sürüm agnostik formata dışa aktarmanın kolay bir yolu var mı?

Veritabanı, 2012'ye özgü hiçbir özellik kullanmaz. Tabloları, verileri ve saklı prosedürleri içerir.

İşte şimdiye kadar denediklerim

2012 sunucusunda GörevlerKomut Dosyaları Oluştur komutunu denedim ve bir şema (bir SQL komut dosyası olarak da dahil olmak üzere) şema oluşturabildim. Buna rağmen, bu verilerin hiçbirini içermiyordu.

2008 makinemde bu şemayı yarattıktan sonra, 2012 makinesinde "Verileri Dışa Aktar" sihirbazını açmayı başardım ve 2012'yi kaynak makine olarak ve 2008'i hedef makine olarak yapılandırdıktan sonra, oluşturduğum tabloların bir listesini sundum. kopyalayabilir. Tüm masalarımı (300+) seçtim ve sihirbazı tıklattım. Ne yazık ki, senaryolarını oluşturmak için yaş harcıyor, sonra "salt okunur 'FOO_ID' sütununa ekleme hatası" gibi hatalarla başarısız oluyor.

Ayrıca "2000'den veya daha sonradan 2005 veya sonrasına" kopyalayabildiğini iddia eden "Veritabanı Kopyalama Sihirbazı" nı da denedim. İki modu vardır:

  1. Hata ile başarısız olan "Ayır ve Ekle":

    Message: Index was outside the bounds of the array.
    StackTrace:    at Microsoft.SqlServer.Management.Smo.PropertyBag.SetValue(Int32 index, Object value)
    ...
    at Microsoft.SqlServer.Management.Smo.DataFile.get_FileName()
    
  2. Hata ile başarısız olan SQL Yönetim Nesnesi Yöntemi

    IsFileStream özelliği okunamıyor. Bu özellik, SQL Server 7.0'da mevcut değil. "


Doğrudan ihracat yapabiliyor musunuz? DB'nizin ne kadar büyük olduğunu bilmiyorum, ama bu küçük veritabanlarıyla çalışırken ne yapacağım.
Dave,

2
Daha eski sürümlerden hiçbiri SQL Server'ın yeni sürümlerinden yedekleyemez. Bu, tasarım gereğidir. Dışa Aktar özelliğini kullanın, tabloları ve verileri

4
“Aklı başında olan birinin neden geriye göç ettiğini anlamaya çalışmak.” - 2012 çalıştıran bir üretim sunucum var, ancak dev makinemde yalnızca 2008 var. Geliştirmeye yardımcı olması için DB'nin yerel bir kopyasını istiyorum, ancak 2012'yi dev makineme yüklemek istemiyorum. o kadar boş alan kaldı ve onu kurmak için saat harcamak istemiyorum. (Yani saatlerce geriye doğru göç etmeye çalışıyorum ... ama bu sadece benim.)
Zengin

1
Neredeyse oradasın. Girdiğiniz Dışa Aktarma bölümünde, şemanın yanı sıra veri ekleme seçeneği de vardır.

1
Sadece Ramhound'u eklemek istedim: Ben bir tane daha yükseltilmiş SQL 2008 R2'yi Dev ortamımda SQL 2012'ye getirdim ve daha sonra, yükseltilmiş örneğimde çok sayıda şema ve veriyi değiştirdikten sonra VS 2010'un şema veya verileri SQL 2012 ile karşılaştıramayacağını fark ettim. VS 2010 ve VS 2012 için SSDT, şemayı SQL 2012 ile karşılaştırabilir, ancak orijinal VS 2010 veritabanı projeleriyle uyumlu değildir ve verileri karşılaştıramaz. Uzun lafın kısası, SQL 2008 R2’ye geri dönmeyi tercih ediyorum ve 2012’ye doğru ilerlemem için karar verilinceye kadar bir karar vermeyi beklemeliyim. AFAIK Aklımdayım.
GFK

Yanıtlar:


40

2012 SQL Management Studio'daki veritabanına sağ tıklayın ve "Görevler -> Komut Dosyaları Oluştur" u seçin. Karşılama ekranını tıklayın, "veritabanının tamamı ve tüm veritabanı nesnelerinin komut dosyasını" seçin. "Komut dosyalarının nasıl kaydedileceğini belirtin" sayfasında, "gelişmiş" düğmesini tıklayın. Açılır özellikler sayfasındaki "Genel" altında, "Komut dosyası için veri türleri" ni "Şema" dan "Şema ve veri" ye ve "Sunucu Sürümü için Komut Dosyası" nı "2012" den "2008" e değiştirin.

Sonra veritabanının nasıl oluşturulacağını ayarlamak için bu büyük SQL dosyasının başlangıcını düzenlemenin bir yolunu bulmak zorunda kaldım - bu q'ya bakın: https://stackoverflow.com/questions/102829/best-free-text-editor desteklenmesi-daha-daha-4gb-dosyaları

Sonunda, SQL Management Studio’da açılmayacak kadar büyük olan SQL betiğini çalıştırmak için bir yol bulmam gerekti - bu q’ya bakın: https://stackoverflow.com/questions/431913/how-do-you-run- a-300mb-ms-sql-sql-file


Dosyanın başında ne ayarladın?
JonoRR

1
Tam olarak hatırlayamıyorum, üzgünüm. Uygulamaya özgü şeyler, sanırım. Belki veritabanı adı ya da onun gibi bir şey. Sanırım aynı sorunu yaşayan insanlarla alakalı olsaydı, buraya eklerdim.
Zengin,

3
@JonoRR Büyük olasılıkla CREATE DATABASE deyimini düzenlemek ve veri dosyası yollarını hedef sunucuda anlamlı olana ayarlamak istersiniz.
Igby Largeman,

12

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

Birkaç ~ 10 milyon kayda sahip 5GB'lık bir veritabanım vardı ve Genetiği Komut Dosyası ile rotayı denedim ve sqlcmd.exe ile çalıştırdım. Her şeyden önce, oluşturulan komut dosyası her zaman doğru çalışmıyordu. İkincisi, sqlcmd.exe de büyük dosyalar üzerinde başarısız olabilir ve mevcut hafızadan şikayetçi olabilir. osql.exe çalışıyor, ancak yalnızca yaş alıyor (ve aynı komut satırı argümanlarına sahip).

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 ç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 var. Http://sqlazuremw.codeplex.com/ adresini ziyaret edin . Benim durumumda operasyon 16 dakika sürdü.

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


1
2008 R2'yi bu sihirbazda nereye koyacaksınız?
JonoRR

Müthiş bir ipucu, Express 2012'den Web 2008'e bir veritabanını geri yükledim. Çok kolay.
rkawano

Reklamı olarak çalıştığını onaylayabilir. 2014-> 2012, etki alanı, yerel SQL-sunucuları yaptım. Bu araç aramalarımdan bu kadar uzun süre nasıl uzak kaldı! Azure olmayan kullanım için bile şaşırtıcı.
Gomibushi,

3

SQL'de yeniyim, ancak 2012'den 2008'e geçmeyi başardım. Bunu yapmak için SQL alma ve verme yardımcı programını kullandım. Taşımak istediğim SQL 2012 sunucusunu ve veritabanını ve nihayet 2008 sunucusunu seçtim ve hedef veritabanım olarak yeni bir veritabanı oluşturdum. İşe yaradı.


2

APEXSQL araçlarını deneyin . Veritabanını kodlayacak ve verileri de kodlayacak bir araca sahipler.


"299 $ 'dan" - ücretsiz bir alternatif var mı?
Zengin

1

2008 makinemde bu şemayı yarattıktan sonra, 2012 makinesinde "Verileri Dışa Aktar" sihirbazını açmayı başardım ve 2012'yi kaynak makine olarak ve 2008'i hedef makine olarak yapılandırdıktan sonra, oluşturduğum tabloların bir listesini sundum. kopyalayabilir. Tüm masalarımı (300+) seçtim ve sihirbazı tıklattım. Ne yazık ki, senaryolarını oluşturmak için yaş harcıyor, sonra "salt okunur 'FOO_ID' sütununa ekleme hatası" gibi hatalarla başarısız oluyor.

Sorun, kimlik sütunlarını ekleyememesi, yani:

  1. Tüm tabloları işaretleyerek seçin
  2. Tüm tabloları seçin (bunu yapmanın yolu birinciye tıklayıp shift tuşunu basılı tutun ve son masaya tıklayın)
  3. "Haritaları Düzenle" yi tıklayın - bir sonraki düğmenin hemen üstünde ve önizlemenin yanında olduğunu görebilirsiniz.
  4. Bir pencereye sahip olacaksınız, "Kimlik tanımını etkinleştir" i işaretleyiniz ve ileri 'yi tıklayıp devam ediniz, bu işe yaramalı. Benim için çalıştı.

1

Rich'in https://superuser.com/a/469597/312310 yukarıdaki çözümünü takip ettim ve harika çalıştı! Teşekkürler - Buraya henüz oy veremem!

Bunun işe yaraması için yapmam gereken ek adımlar:

  • Mantıksal dosya adlarını değiştirin ve yolun doğru olduğundan emin olun. Ayrıca oluşturulan log adını değiştirmek zorunda kaldım, aksi halde log ile mdf dosyasının üzerine yazmaya çalıştım ve ardından bu hatayı attı https://stackoverflow.com/questions/7534664/sql-server-script-error-database-is- çoktan kullanımda

    VERİTABANI OLUŞTURMA [xxxxx] PRIMARY (NAME = xxxxx ', FILENAME = N'C: \ Program Dosyaları \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ VERİ \ \ xxxxx.mdf', BOYUT = 14400KB, MAXSIZE = SINIRSIZ, FILROWTH 1024KB) GİRİŞ AÇIK (NAME = N'xxxxxldf ', FILENAME = N'C: \ Program Dosyaları \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', BOYUT = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10 %) GO

  • Oluşturulan bölümü yorumlamalı ve daha sonra kullanıcı izinlerini el ile eklemeliydim

    USE [xxxxx]
    GO
    /****** Object:  User [xxxxx]    Script Date: 30/11/2014 12:44:07 ******/
    CREATE USER [xxxxx] FOR LOGIN [xxxxx] WITH DEFAULT_SCHEMA=[dbo]
    GO
    sys.sp_addrolemember @rolename = N'db_owner', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datareader', @membername = N'Umbraco'
    GO
    sys.sp_addrolemember @rolename = N'db_datawriter', @membername = N'Umbraco'
    GO
    

Koştum ve artık yeni Umbraco 7.1.2 veritabanımı yalnızca SQL Server 2008 R2 olan web sunucuma geri yükleyebilirim!


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.