Spostare il database da SQL Server 2012 al 2008


29

Ho un database su un'istanza di SQL Sever 2012 che vorrei copiare su un server 2008. Il server 2008 non può ripristinare i backup creati da un server 2012 (ho provato).

Non riesco a trovare alcuna opzione nel 2012 per creare un backup compatibile del 2008. Mi sto perdendo qualcosa?

Esiste un modo semplice per esportare lo schema e i dati in un formato indipendente dalla versione che posso quindi importare nel 2008?

Il database non utilizza alcuna funzionalità specifica del 2012. Contiene tabelle, dati e procedure memorizzate.

Ecco cosa ho provato finora

Ho provato AttivitàGenera script sul server 2012 e sono stato in grado di generare lo schema (comprese le stored procedure) come script SQL. Tuttavia, ciò non includeva nessuno dei dati.

Dopo aver creato quello schema sulla mia macchina del 2008, sono stato in grado di aprire la procedura guidata "Esporta dati" sulla macchina del 2012 e dopo aver configurato il 2012 come macchina di origine e il 2008 come macchina di destinazione, mi è stato presentato un elenco di tabelle che ho potrebbe copiare. Ho selezionato tutte le mie tabelle (oltre 300) e ho fatto clic sulla procedura guidata. Sfortunatamente impiega anni a generare i suoi script, quindi fallisce con errori come "Errore nell'inserimento nella colonna di sola lettura 'FOO_ID'".

Ho anche provato la "Procedura guidata per la copia del database", che sosteneva di essere in grado di copiare "dal 2000 o successivamente al 2005 o successivo". Ha due modalità:

  1. "Stacca e collega", che ha avuto esito negativo con errore:

    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. Metodo dell'oggetto di gestione SQL non riuscito con errore

    Impossibile leggere la proprietà IsFileStream. Questa proprietà non è disponibile su SQL Server 7.0. "


Sei in grado di esportare direttamente? Non so quanto sia grande il tuo DB, ma questo è quello che farei lavorando con database più piccoli.
Dave,

2
Nessuna versione precedente di SQL Server può ripristinare i backup dalle versioni più recenti. Questo è di progettazione. Utilizzare la funzionalità di esportazione, eseguire lo script delle tabelle e dei dati e impostare la destinazione dello script su SQL 2008.

4
"Cercare di capire perché qualcuno nella loro mente giusta dovrebbe migrare all'indietro." - Ho un server di produzione in esecuzione nel 2012, ma la mia macchina di sviluppo ha solo il 2008. Vorrei una copia locale del DB per aiutare lo sviluppo, ma non voglio installare il 2012 sulla mia macchina di sviluppo come non ho tanto spazio libero rimasto e non voglio passare ore a installarlo. (Quindi trascorro ore a cercare di migrare all'indietro invece ... ma sono solo io.)
Rich

1
Ci sei quasi. La sezione Esporta in cui hai inserito ha un'opzione per includere i dati e lo schema.

1
Volevo solo aggiungere per Ramhound: I per un aggiornamento da SQL 2008 R2 a SQL 2012 nel mio ambiente Dev e quindi, dopo aver modificato molti schemi e dati nella mia istanza aggiornata, ho realizzato che VS 2010 non può confrontare schema o dati con SQL 2012. SSDT per VS 2010 e VS 2012 possono confrontare lo schema con SQL 2012 ma non sono compatibili con i progetti di database VS 2010 originali e non possono confrontare i dati. Per farla breve, preferirei tornare a SQL 2008 R2 e aspettare fino a quando non verrà presa una decisione aziendale per passare al 2012. Ma vorrei salvare il mio nuovo schema / dati. AFAIK Ho ragione.
GFK,

Risposte:


40

Fare clic con il tasto destro del mouse sul database in SQL Management Studio 2012 e selezionare "Attività -> Genera script". Fai clic sulla schermata di benvenuto, scegli "script intero database e tutti gli oggetti del database". Nella pagina "specifica come salvare gli script", fai clic su "Avanzate". In "Generale" nella pagina delle proprietà del pop-up, modifica "Tipi di dati in script" da "Solo schema" in "Schema e dati" e cambia "Script per versione server" da "2012" a "2008".

Ho quindi dovuto trovare un modo per modificare l'inizio di questo enorme file SQL, per modificare il modo in cui il database sarebbe stato creato - vedere questo q: /programming/102829/best-free-text-editor 4GB-file più-che--sostenere-

E infine ho dovuto trovare un modo per eseguire lo script SQL, che era troppo grande per essere aperto in SQL Management Studio - vedi questo q: /programming/431913/how-do-you-run- a-300MB-MS-SQL-sql file


cosa hai modificato all'inizio del file?
JonoRR,

1
Non ricordo esattamente, scusa. Roba specifica per app, penso. Forse il nome del database o qualcosa del genere. Penso che l'avrei aggiunto qui se fosse rilevante per le persone con lo stesso problema.
Ricco

3
@JonoRR Molto probabilmente vorresti modificare l'istruzione CREATE DATABASE e impostare i percorsi dei file di dati su qualsiasi cosa abbia senso sul server di destinazione.
Igby Largeman,

12

Per le migrazioni SQL, utilizzare la Migrazione guidata database SQL gratuita e open source.

Avevo un database da 5 GB con circa 10 milioni di record e ho provato il percorso tramite Generate Script e poi l'ho eseguito con sqlcmd.exe. Prima di tutto, lo script generato non funzionava sempre correttamente. In secondo luogo, sqlcmd.exe può fallire anche su file di grandi dimensioni, lamentandosi della memoria disponibile. osql.exe funziona, ma richiede solo anni (e ha gli stessi argomenti della riga di comando).

Poi ho trovato uno strumento meraviglioso per la migrazione di SQL Server a database SQL Azure. Questo funziona anche per SQL Server su SQL Server, ad esempio se desideri migrare un database SQL 2012 su 2008 R2. Utilizza bcp.exe, che utilizza la copia bulk. Sono disponibili una versione della GUI e della riga di comando (Batch) ed è open source. Vedi http://sqlazuremw.codeplex.com/ . Nel mio caso, l'operazione ha richiesto 16 minuti.

In una schermata avanzata è possibile selezionare che la destinazione sia SQL Server, non SQL Azure.


1
Dove imposta 2008 R2 in questa procedura guidata?
JonoRR,

Suggerimento straordinario, ho ripristinato un database da Express 2012 a Web 2008. Molto semplice.
rkawano,

Può confermare che funziona come pubblicizzato. Ha effettuato un 2014-> 2012 server SQL locali interdominio. In che modo questo strumento ha evitato le mie ricerche per così tanto tempo! Incredibile anche per un uso non azzurrato.
Gomibushi,

3

Sono nuovo di SQL, ma sono riuscito a migrare dal 2012 al 2008. Per fare ciò ho usato l'utilità di importazione ed esportazione di SQL. Ho scelto il server SQL 2012 e il database che voglio migrare e infine il server 2008 e ho creato un nuovo database come mio database di destinazione. Ha funzionato.


2

Prova gli strumenti APEXSQL . Hanno uno strumento che scriverà il database e scriverà anche i dati.


"da $ 299" - esiste un'alternativa gratuita?
Rich

1

Dopo aver creato quello schema sulla mia macchina del 2008, sono stato in grado di aprire la procedura guidata "Esporta dati" sulla macchina del 2012 e dopo aver configurato il 2012 come macchina di origine e il 2008 come macchina di destinazione, mi è stato presentato un elenco di tabelle che ho potrebbe copiare. Ho selezionato tutte le mie tabelle (oltre 300) e ho fatto clic sulla procedura guidata. Sfortunatamente impiega anni a generare i suoi script, quindi fallisce con errori come "Errore nell'inserimento nella colonna di sola lettura 'FOO_ID'".

Il problema è che non è in grado di inserire le colonne ID, quindi:

  1. Seleziona tutte le tabelle spuntandole
  2. Seleziona tutte le tabelle (il modo per farlo è fare clic sul primo e tenere premuto MAIUSC e fare clic sull'ultima tabella)
  3. Fai clic su "Modifica mappature": puoi vederlo appena sopra il pulsante successivo e accanto all'anteprima.
  4. Verrà visualizzata una finestra, selezionare "Abilita inserimento identità" e quindi fare clic su Avanti e andare avanti, dovrebbe funzionare. Ha funzionato per me.

1

Ho seguito la soluzione di Rich /superuser//a/469597/312310 sopra e ha funzionato benissimo! Grazie - Non posso ancora votare qui!

I passaggi aggiuntivi che ho dovuto fare per farlo funzionare sono:

  • Modificare i nomi dei file logici e assicurarsi che il percorso sia corretto. Ho anche dovuto cambiare il nome del registro generato, altrimenti ha cercato di sovrascrivere il file mdf con il registro e quindi ha gettato questo errore /programming/7534664/sql-server-script-error-database-is- già in uso

    CREA DATABASE [xxxxx] SU PRIMARY (NAME = xxxxx ', FILENAME = N'C: \ Programmi \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx.mdf', SIZE = 14400KB, MAXSIZE = UNLIMITED, FILEGROWTH = 1024 KB) LOG ON (NAME = N'xxxxxldf ', FILENAME = N'C: \ Programmi \ Microsoft SQL Server \ MSSQL11.MSSQLSERVER \ MSSQL \ DATA \ xxxxx_log.ldf', SIZE = 18560KB, MAXSIZE = 2048GB, FILEGROWTH = 10 %) GO

  • Ho dovuto commentare la sezione generata e aggiungere successivamente le autorizzazioni utente

    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
    

L'ho eseguito ed ecco che ora posso ripristinare il mio nuovo database Umbraco 7.1.2 sul mio server Web che ha solo SQL Server 2008 R2!


Utilizzando il nostro sito, riconosci di aver letto e compreso le nostre Informativa sui cookie e Informativa sulla privacy.
Licensed under cc by-sa 3.0 with attribution required.