SQL Server ripristina i risultati di backup in un errore


15

Ho un database in sviluppo (SQL Server 2005 su Windows Server 2008) che devo passare al prod (SQL Server 2000 su Windows Server 2003). Il mio processo è il seguente:

  1. Accedi a dev, apri SQL Server Management Studio
  2. Fare clic con il tasto destro sul database | Compiti | Backup. Mantieni tutte le opzioni predefinite (backup completo ecc.)
  3. Spostare il file .bak localmente su prod (nessuna unità di rete), accedere a prod, aprire SQL Server Enterprise Manager.
  4. Fare clic con il pulsante destro del mouse sul nodo Database | Tutte le attività | Ripristina database.
  5. Cambia Ripristina come database per riflettere lo stesso nome del database.
  6. Fai clic sul pulsante di opzione "Dal dispositivo". Fai clic su "Seleziona dispositivi"
  7. Fai clic su Ripristina da: Aggiungi ..., passa al file .bak (piccolo - solo 6mb)

Ora sono pronto per ripristinare il database, quindi faccio clic su OK e visualizzo il seguente errore:

"La famiglia di supporti sul dispositivo 'E: ... bak' non è formata correttamente. SQL Server non è in grado di elaborare questa famiglia di supporti. RIPRISTINARE DATABASE si sta chiudendo in modo anomalo."

Questo errore è immediato.

Ho provato alcune diverse varianti di questo: ripristinare il db in macchina dev con un diverso nome db e nomi dei file di registro (dove ha avuto origine), creando un database vuoto con lo stesso percorso fisico dei file prima e tentando di ripristinarlo, creando alcuni file .bak diversi e assicurandosi che siano verificati prima di caricarli su prod. So per certo che la directory per i file .mdf e .ldf esiste su prod, sebbene i file stessi non esistano. Se, prima di fare clic su OK per ripristinare, vai alla scheda Opzioni invece visualizzo il seguente errore:

Errore 3241: la famiglia di supporti sul dispositivo "E: ... bak" non è formata correttamente. SQL Server non può elaborare questa famiglia di supporti. RESTORE FILELIST sta terminando in modo anomalo.

Qualcuno ha qualche idea brillante?


Sono d'accordo, ho appena trascorso un giorno su questo e ho perso tempo, sembra un problema di compatibilità con le versioni precedenti, da 2k8 R2 a 2k5 nel mio caso.

Risposte:


7

Le intestazioni di backup in MSSQL2008 sono diverse da quelle in MSSQL2005, che è probabilmente la fonte del problema. Prova a esportare il DB anziché il paradigma di backup-restore o imposta MSSQL2008 sul tuo server DEV.


4

Come dice Mike Dimmick - SQL 2000 non riconoscerà i backup di SQL 2005 (come Word 2000 non riconoscerebbe i file DOCX del 2007). Pertanto dovrai migrare i tuoi dati in un formato denominatore comune inferiore come gli script SQL. Prova la Pubblicazione guidata database che fa parte di SQL Server Hosting Toolkit che genera un singolo file SQL sia per lo schema che per i dati.


1
È importante verificare se hai installato SqlExpress (potresti averlo installato senza rendertene conto). È molto facile accedere a SqlExpress per errore e poi andare nel panico perché non ti permetterà di ripristinare un database 2008 su di esso. Questo è probabilmente un motivo molto comune per ottenere questo errore.
Simon

2

È possibile spostare i backup in avanti nella famiglia di SQL Server, ovvero 2000-2005 o 2008, ma non all'indietro: non è possibile ripristinare un backup di SQL Server 2005 su SQL Server 2000.


1

È possibile che si tratti di un problema di autorizzazioni che impedisce la creazione del file quando si tenta di ripristinare. Prova a creare un nuovo database sulla destinazione con lo stesso nome desiderato e ripristinalo sopra.

Inoltre, se si sta tentando di ripristinare il backup da un disco rigido esterno o una condivisione di rete, provare a copiare il file di backup sul computer locale prima di tentare il ripristino.


1

Per impostazione predefinita, ci sono due esploratori di oggetti da SQL Server 2005. Immagino che tu stia provando un oggetto server / sqlexpress. Prova a ripristinare su un altro.


1

(Sospiro sollevato.) Ahhhhh, questo è il problema.

Ho SQL Server 2008 SP1 in esecuzione su un PC remoto. Ho eseguito il backup del database, ma non è stato possibile ripristinare la mia copia locale di SQL Server 2008 dal file .bak.

Come dice [Yini], ciò dipendeva dalla mia copia di SQL Server 2008 che apriva la mia istanza di SQL Server 2005 sul mio PC locale, piuttosto che dalla mia istanza di SQL Server 2008. Genio.

E sono completamente d'accordo con [Yini] - abbastanza onesto, non è possibile ripristinare un backup di SQL Server 2008 in un'istanza del 2005, ma Microsoft potrebbe almeno darci un messaggio di errore decente.

"La famiglia di supporti sul dispositivo 'D: \ DatabaseBackup_21_02_2011.bak' non è formata correttamente. SQL Server non è in grado di elaborare questa famiglia di supporti."

Il mio backup non è stato formato in modo errato. Non può essere ripristinato in un'istanza di SQL Server 2005 , anche quando eseguo SQL Server 2008 SP1.

È davvero così difficile inserire questo in un messaggio di errore ............?


0

Alcuni pensieri:

  • Qual è la dimensione approssimativa del database che stai ripristinando?
    L'unico articolo di supporto su questo errore è per SQL 2000 e parla di file di registro di grandi dimensioni. Sebbene non si utilizzi SQL 2000, potrebbe essere utile provare a ridurre prima le dimensioni dei registri se sono particolarmente grandi.

  • Sei in grado di ripristinare il database sul tuo server Dev (come un diverso nome db, in diversi file)? Ciò proverebbe se il file stesso va bene per quanto riguarda SQL 2005.

  • Sei in grado di ripristinare altri database da quel server Dev su Prod?


0

Ciao a tutti, come suggerisce Mike che consiglierei la Pubblicazione guidata database, fa un ottimo lavoro.

Ecco una soluzione alternativa che inizialmente ho usato e che non suggerirei del tutto - sembra un po 'ghetto .


1) Creare il db su prod, creare un utente db con i diritti corretti, aprire la porta sul firewall che consente l'accesso remoto
2) Da dev in SQL Server Management Studio, fare clic con il tasto destro del mouse su db -> attività -> esporta dati. Quando si seleziona la destinazione, assicurarsi di specificare la porta xxx.xxx.xxx.xxx, 1764.
3) Seleziona tutte le tabelle da trasferire, fai clic su 100 volte successive e il gioco è fatto.

ATTENZIONE: questo non copia le procedure memorizzate.
ATTENZIONE: questo non viene copiato su Identità per le colonne int

AGGIORNAMENTO: Sembra che tu non possa andare dal 2005 al 2000. Ho trovato il seguente testo post link - sembra che tu possa usare i miei metodi sopra, ma vuoi anche scrivere tutti gli oggetti e quindi eseguirlo nel 2000.

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.