Ripristino del backup del database di SQL Server su una versione precedente


185

Come ripristinare un file di backup del database di SQL Server versione precedente su un SQL Server versione precedente?

Usando SQL Server 2008 R2 (10.50.1600) , ho creato un file di backup e ora voglio ripristinarlo su SQL Server 2008 del mio server live (10.00.1600) .

Quando ho provato a ripristinare il backup su SQL Server 2008, viene visualizzato un errore, ad esempio Restore Failedperché:

È stato eseguito il backup del database su un server che esegue la versione 10.50.1600. Tale versione non è compatibile con questo server, che esegue la versione 10.00.1600.

Come posso ripristinare il file di backup su questo server?


2
Non puoi farlo - semplicemente non è possibile. SQL Server non consente * il downgrade "di un database da una versione superiore a una inferiore.
marc_s

18
Microsoft sa tutto di SQL Server (da quando lo hanno creato) e tuttavia è impossibile spostare i dati tra 2 versioni. Semplicemente non capisco perché una sorta di modalità di compatibilità non sia disponibile in esportazione. Quanto può essere difficile?
dvdmn,

1
@dvdmn duro come ogni episodio di Top Gear in cui lo dicono - tipi diversi, dichiarazioni diverse, layout di blocchi diversi. Lo spostamento dei dati tra database è molto semplice, indipendentemente dalle versioni interessate. Il downgrade non lo è .
Panagiotis Kanavos,

2
@PanagiotisKanavos Non sono d'accordo, in mysql puoi esportare db come comandi sql e puoi ripristinarlo su qualsiasi versione di mysql (down o up). Sì, puoi esportare anche sql db come script, ma ripristinarlo non è facile se hai alcune funzioni / procedure memorizzate che dipendono l'una dall'altra. Fondamentalmente non è utile / soluzione.
dvdmn,

3
@dvdmn esportare gli script di un database è completamente diverso dal backup. Mi rendo conto che alcuni prodotti non offrono funzionalità di backup / ripristino o, peggio ancora, confondono i due concetti. Ciò accade spesso per motivi storici: mancava il backup in passato, alcuni prodotti chiamati export / scripting con quel nome. Ora che lo fanno , devono continuare a risolvere i conflitti di termini, parlando di backup fisici e logici, quindi si confondono quando parlano di scripting
Panagiotis Kanavos,

Risposte:


78

No, non è possibile effettuare il downgrade di un database. 10.50.1600 è la versione di SQL Server 2008 R2 . Non è assolutamente possibile ripristinare o collegare questo database all'istanza di SQL Server 2008 su cui si sta tentando di ripristinare (10.00.1600 è SQL Server 2008). Le tue uniche opzioni sono:

  • aggiornare questa istanza a SQL Server 2008 R2 o
  • ripristinare il backup disponibile su un'istanza di SQL Server 2008 R2, esportare tutti i dati e importarli su un database SQL Server 2008.

non riesco ad aggiornare il client live server a causa delle restrizioni di autorizzazione. e la mia dimensione del database è superiore a 2,5 GB, quindi non ho potuto creare lo script di dati a causa dell'errore di eccezione della memoria.

9
@Gaurav Non eseguire lo scripting dei dati - invece, eseguire lo scripting dell'intero database (tabelle, processi, trigger, vincoli, ecc.) Senza dati, creare il nuovo database, quindi fare clic con il pulsante destro del mouse sul database di origine, andare su "Strumenti", quindi "Esporta dati" per trasferire i contenuti delle tabelle nel database.
Jim McLeod,

17
Sono molto sospettoso di una risposta pacifica "non c'è modo possibile" - questo significa solo che non hai ancora trovato la strada. Ci possono essere molti motivi per cui vuoi farlo, quindi questa non è una risposta utile.
Jay Imerman,

6
Non sono d'accordo, @Jay, a volte "non puoi" è la risposta perfetta, anche se è più utile offrire soluzioni alternative ove disponibili.
Russell Fox,

1
@Zhang se hai domande, ponile come domande, non come commenti.
Remus Rusanu il

83

È possibile utilizzare la funzionalità denominata Esporta applicazione a livello di dati che genera .bacpacfile costituiti da schema e dati del database.

Sul server di destinazione, è possibile utilizzare l' opzione Importa applicazione a livello di dati che crea e popola il nuovo database da un .bacpacfile pre-creato

Se si desidera solo trasferire lo schema del database, è possibile utilizzare Estrai applicazione di livello dati per la creazione di file e Distribuisci applicazione di livello dati per la distribuzione dello schema di database creato.

Ho provato questo processo su diverse versioni di SQL Server da SQL 2014 a SQL 2012 e da SQL 2014 a SQL 2008R2 e ho funzionato bene.


8
Questa è una risposta che merita maggiore attenzione. In realtà funziona solo per la maggior parte dei casi. Se ci sono utenti SQL lì orfani, tuttavia, le operazioni di esportazione falliranno. Puoi sempre rimuovere / aggiungere quei bit manualmente per trascendere altrimenti le versioni SQL.
Doctor Blue,

3
Ho appena provato questo, per creare un DB creato su MSSQLEX2014 (V12) sul mio MSSQLEX2012 (V11). Ho appena ricevuto un errore "Microsoft.Data.Tools.Schema.Sql.Sql120DatabaseSchemaProvider non valido" senza alcun modo per cambiarlo.
Craig,

5
L'importazione da SQL Server 2014 al 2012 utilizzando un .bakpac DOES funziona, ma richiede la versione corretta di SSMS. Ad esempio, utilizzo SSMS 2016 CTP3 e ha funzionato perfettamente. NON ha funzionato per me utilizzando SSMS 2012. Non ho testato SSMS 2014.
Greg Gum,

1
Qualcuno sa se si può scrivere questa procedura in T-SQL? AGGIORNAMENTO (rispondendo dopo un po 'di googling): puoi automatizzare questo tramite la sqlpackage.exeriga di comando. Google per di più.
Alex

1
Questa è l'unica soluzione che ha funzionato per me per il downgrade da SQL2017 abbastanza grande / complicato a SQL2016. Prestazioni anche molto buone.
Keith salta il

35

Non funzionerà necessariamente

Funzionerà

  • Generazione di script - Attività -> Genera script . Assicurarsi di impostare la versione di SQL Server di destinazione desiderata nella pagina Imposta opzioni di script -> Avanzate . Puoi anche scegliere se copiare schemi, dati o entrambi. Si noti che nello script generato, potrebbe essere necessario modificare la cartella DATA per i file mdf / ldf se si passa da non-express a express o viceversa.

  • Servizi di pubblicazione di database di Microsoft SQL Server - penso con SQL Server 2005 e versioni successive, credo. Scarica l'ultima versione da qui . Prerequisiti: sqlncli.msi/ sqlncli_x64.msi/ sqlncli_ia64.msi, SQLServer2005_XMO.msi/ SQLServer2005_XMO_x64.msi/ SQLServer2005_XMO_ia64.msi(scarica qui ).


7
La generazione di script non è affidabile per database sostanziali, evitare se possibile.
Chris,

Entrambi i collegamenti in basso sono 404.
Sнаđошƒаӽ

29

Ecco i miei 2 centesimi su diverse opzioni per completare questo:

Strumenti di terze parti : probabilmente il modo più semplice per eseguire il lavoro è creare un database vuoto nella versione precedente e quindi utilizzare strumenti di terze parti per leggere il backup e sincronizzare il nuovo database appena creato con il backup.

Red gate è uno dei più popolari ma ce ne sono molti altri come ApexSQL Diff , ApexSQL Data Diff , Adept SQL , Idera …. Tutti questi sono strumenti premium ma puoi fare il lavoro in modalità di prova;)

Generazione di script : come già menzionato da altri, è sempre possibile eseguire la scripting della struttura e dei dati utilizzando SSMS, ma è necessario prendere in considerazione l'ordine di esecuzione. Per impostazione predefinita, gli script degli oggetti non sono ordinati correttamente e dovrai occuparti delle dipendenze. Questo può essere un problema se il database è grande e contiene molti oggetti.

Procedura guidata di importazione ed esportazione : questa non è una soluzione ideale in quanto non ripristinerà tutti gli oggetti ma solo le tabelle di dati, ma puoi considerarla per correzioni rapide e sporche quando è necessario.


1
Red Gate Sql Clone non supporta la clonazione tra versioni diverse di SQL Server, segnalando esattamente lo stesso errore che ottengo quando provo a farlo manualmente.
DarkDeny,

29

Non è possibile ripristinare il database (o collegarlo) creato nella versione superiore nella versione precedente. L'unico modo è creare uno script per tutti gli oggetti e utilizzare lo script per generare il database.

inserisci qui la descrizione dell'immagine

selezionare "Schema e dati" - se si desidera inserire entrambe le cose nel file di script di backup
selezionare Solo schema - se è necessario solo lo schema.

inserisci qui la descrizione dell'immagine

Sì, ora hai terminato di creare lo script con schema e dati del database.


16

Un altro modo per farlo è utilizzare la funzione "Copia database":

Trova facendo clic con il pulsante destro del mouse sul database di origine> "Attività"> "Copia database".

È possibile copiare il database in una versione precedente dell'istanza di SQL Server. Questo ha funzionato per me da un SQL Server 2008 R2 (SP1) - 10.50.2789.0 a Microsoft SQL Server 2008 (SP2) - 10.0.3798.0


3
Si noti che questo non funzionerà se la destinazione è SQL server express "Il server di destinazione non può essere un'istanza Express di SQL Server 2005 o successiva." social.msdn.microsoft.com/Forums/en-US/sqlgetstarted/thread/…
Ohad Schneider,

2
Inoltre, non è possibile copiare un database da SQL Server 2012 a SQL Server 2008 in questo modo.
Twinkles,

1
Copia database è un'operazione Stacca / Collega
Panagiotis Kanavos,

1
Grazie per questo suggerimento! Questo mi ha aiutato moltissimo. Ho copiato i dati da SQL 2008 R2 a SQL 2008.
dns_nx,

8

Puoi provare questo.

  1. Creare un database su SQL Server 2008.
  2. Utilizzando la funzione Importa dati è possibile importare dati da SQL Server R2 (o qualsiasi versione successiva).
  3. utilizzare "RedGate SQLCompare" per sincronizzare lo script.

6

Vai su Attività- > Genera script ...

In Avanzate in "Tipi di dati per script" selezionare "Schema and data"e provare a eseguire questo script nella versione precedente.


5
Questa è un'ottima soluzione ma funziona molto male con database più grandi.
Veljasije,

5

Non è carino, ma è così che ti ho concesso che hai installato questa opzione sulla tua installazione di SQL 2008 R2.

1) Fare clic con il tasto destro del mouse su "Attività" di SQL Server 2008 R2. "Genera script" nella procedura guidata, selezionare l'intero database e gli oggetti nel primo passaggio. Nel passaggio "Imposta opzioni di scripting" dovresti vedere un pulsante "Avanzate", selezionalo e assicurati di selezionare "Script per versione server" = SQL Server 2008 "non versione R2. Questo è un passaggio cruciale, perché" importa dati " di per sé non porta con sé tutte le chiavi primarie, i costriferi e qualsiasi altro oggetto come le stored procedure ".

2) Esegui lo script SQL generato sulla nuova istanza di installazione o database SQL Express o SQL Server 2008 utilizzando la finestra della query o apri lo script .sql salvato ed esegui e dovresti vedere il nuovo database.

3) Ora fai clic con il pulsante destro del mouse sul nuovo database e seleziona "Attività". "Importa dati .." scegli l'origine come database R2 e la destinazione come nuovo database. "Copia i dati da una o più tabelle o viste", seleziona la casella di controllo superiore per selezionare tutte le tabelle e quindi il passaggio successivo, esegui il pacchetto e dovresti avere tutto su una versione precedente. Questo dovrebbe funzionare anche per tornare a una versione del 2005. Spero che questo aiuti qualcuno.


ciao @motogeek, ho lo stesso problema, ma ho R2 su server di produzione e 2008 su locale, in questo caso non posso usare i dati di importazione ed esportazione. quale sarebbe la soluzione ideale per questo?
Abbas,

2

puoi usare BCP in e out per i piccoli tavoli.

Comando BCP OUT: -

BCP "SELECT *  FROM [Dinesh].[dbo].[Invoices]" QUERYOUT C:\av\Invoices1.txt -S MC0XENTC -T -c -r c:\error.csv

Comando BCP IN: - Crea una struttura di tabella per Invoicescopy1.

BCP [Dinesh].[dbo].[Invoicescopy1] IN C:\av\Invoices.txt -S MC0XENTC -T -c

0

Apprezzo che questo sia un vecchio post, ma può essere utile per le persone sapere che la Migrazione guidata di Azure (disponibile su Codeplex - non è possibile collegarsi a come Codeplex è nel momento in cui sto scrivendo questo) lo farà facilmente.


Tale strumento è stato sostituito con Assistente alla migrazione dei dati di SQL Server. Vedi: stackoverflow.com/questions/46517060/...
ahwm

0

Dovresti usare le procedure guidate di importazione / esportazione in SSMS per migrare tutto

Non è possibile eseguire il "downgrade" utilizzando backup / restore o scollegamento / collegamento. Pertanto, ciò che devi fare è:

  1. Eseguire il backup del database dal server che esegue la nuova versione SSMS / SQL.
  2. Importa i dati dal file .bak generato, espandendo il menu "Attività" (dopo aver fatto clic con il pulsante destro del mouse sul database di destinazione) e selezionando l'opzione "Importa dati".

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.