Posso ripristinare i file .bak di SQL Server senza SQL Server?


16

Ne ho alcuni grandi .bak file di dimensioni da un dump di SQL Server 2005.

Posso ripristinarli senza usare SQL Server, su PostgreSQL, MySQL o su file di testo semplici?

Una soluzione open source sarebbe molto utile.


1
"Preferirei non doverlo fare solo per questo compito." Perchè no? È il modo di fare quello che stai cercando di fare.
sweckeck,

Il ripristino di qualcos'altro ha persino senso? Cosa vuoi fare con i dati risultanti?
Philᵀᴹ

1
@Phil Vorrei spostare i dati risultanti in un database PostgreSQL o anche file di testo piatti.
Abe,

1
@swasheck Ho rimosso la riga tra virgolette, in quanto sembra aver sminuito la domanda. Ma per rispondere alla tua domanda, perché non ho idea di come usarlo e il mio server esegue Linux. Un laptop Windows disponibile non ha abbastanza spazio.
Abe,

2
Bene, queste sono informazioni che non avevamo prima :) Grazie per le informazioni extra - Ho un piano
Scambia il

Risposte:


19

Ecco cosa suggerisco:

  1. costruire una macchina virtuale con Windows, con spazio su disco sufficiente per contenere il backup. Copia lì il file di backup. Se non hai già la possibilità di creare macchine virtuali, puoi farlo con prodotti gratuiti come Oracle VirtualBox .
  2. scaricare e installare l'edizione di valutazione di SQL Server . Assicurarsi di includere sia il motore di database che gli strumenti di gestione - Completo.
  3. se la VM ha spazio sufficiente per contenere il backup ma non abbastanza per ripristinarlo, è possibile eseguire un "ripristino virtuale" utilizzando la versione di prova di un prodotto di Red-Gate con lo stesso nome (che consente di interagire con file di backup come se fosse stato ripristinato). Altrimenti, ripristinare il database in modo normale .

  4. Una volta che il database è disponibile (tramite un ripristino normale o virtuale), è possibile generare script per lo schema e i dati nel modo seguente:

    • Apri Management Studio e connettiti alla tua istanza.
    • Apri Esplora oggetti.
    • Fai clic con il pulsante destro del mouse sul database appena ripristinato, scegli Attività> Genera script ...
    • Fare clic su Avanti, fare clic su Avanti
    • Nella pagina "Scegli opzioni script", scorri verso il basso e imposta "Dati script" su True
    • Fai clic su Avanti
    • Controllare tutti gli oggetti pertinenti e fare clic su Avanti
    • Controlla le tabelle che desideri e fai clic su Avanti
    • Scegli di eseguire lo script in un file. Ora avrai un file che contiene tutti i tuoi oggetti e dati usando la sintassi di inserimento di SQL Server, dovrai giocare con l'output per ottenerlo in un formato che funziona per Postgres (non sono al corrente di differenze di sintassi minori).

In alternativa puoi provare a giocare con l' utilità bcp per estrarre i dati in file CSV o simili, ma dovrai farlo tabella per tabella o usare alcuni script intelligenti (PowerShell, T-SQL, C # / SMO, ecc. ) per generare tutti i comandi bcp per te. Una volta nei file CSV, dovrebbe essere banale caricare in blocco i dati in Postgres (ma avrai ancora del lavoro da fare per generare le tabelle).

Come ultimo suggerimento, se il file .bak non è enorme e i dati non sono confidenziali, sono più che disposto a provare a generare file per te nel formato che ti serve. Ho un sacco di macchine virtuali Windows con spazio, la sfida sarebbe quella di portare il file .BAK in un posto dove posso recuperarlo, specialmente se è più grande della maggior parte del supporto dei servizi di condivisione file.


+1 Stavo per suggerire il metodo bcp una volta arrivato a un computer. Alcuni gotcha sono delimitatori di tabella, IDENTITY (sequenza, in pag.), Nvarchar, solo per citarne alcuni. Altrimenti, questo è ciò che avrei suggerito (senza Red-Gate) nella mia sezione di modifica.
sweckeck,

Ci sono 8, 20 GB di file .bak e sarebbe fantastico se tu potessi aiutare, ma per favore vedi le domande relative su gis.se, gis.stackexchange.com/q/28281/3218 e gis.stackexchange.com/q/28257 / 3218 sul database USDA Soils (SSURGO). Attualmente è molto difficile utilizzare l'accesso a questi dati in modo automatizzato per la modellazione di simulazione. Sarebbe un grande vantaggio per la scienza avere questi dati in una struttura più utilizzabile. Potresti scaricarlo dal mio server. I dati non sono confidenziali, nessuno può ottenerli per $ 50 / CD o $ 100 / DVD o forse meno dal loro agente di estensione.
Abe,

Sembra che tu abbia le risposte su come ottenere i dati su GIS.SE. Ho visitato quei siti ma non vedo dove specificano che il file è un backup di SQL Server. Come / da dove hai ottenuto questi file?
cambio

7

Sfortunatamente non esiste un modo per accedere al contenuto di un file .bak senza avere una profonda conoscenza degli interni del file stesso. Posso pensare a una persona qui che potrebbe essere a conoscenza di queste informazioni, ma non posso dire se detta persona ti dirà o no come fare per farlo

Quindi, dovrai installare un'istanza di SQL Server. Dovrai anche assicurarti che questa istanza possa parlare con il tuo server Postgres (frigging con pg_hba.conf) Una volta lì, hai un paio di buoni percorsi per migrare i dati.

Il primo percorso sarebbe installare il driver ODBC di Postgres per Windows e impostare una connessione al server pg. Quindi è possibile utilizzare SSIS per eseguire lo script di una migrazione dei dati. Se hai intenzione di seguire questa strada, ti suggerisco di installare SSIS durante l'installazione del server di database.

L'altra opzione riguarda anche la connessione del driver ODBC, ma è possibile creare un server collegato in SQL Server ed eseguire inserimenti sull'istanza pg tramite SQL Server. Ho già risposto a questa esatta domanda qui, quindi non dovrebbe essere difficile da trovare.

MODIFICARE

Per incorporare il commento di Aaron, una volta avviato SQL Server, è possibile esportare i dati in file flat in diversi modi. Se scegli questo percorso fammelo sapere e posterò alcuni modi per farlo

MODIFICA (2):

Il processo del server collegato potrebbe non essere l'approccio migliore a meno che non si desideri creare le strutture in anticipo. È il mio metodo preferito, ma di solito ho già la struttura in atto su entrambi i lati.

Questo lascia la risposta di Aaron Bertrand come la migliore risposta. Si noti che oltre ai tipi di dati ( IDENTITYvs. SEQUENCE, postgres non sa nulla da NVARCHARquando si imposta la codifica sul database stesso). Postgres non ne sa nulla CREATE CLUSTERED INDEX( CLUSTERpotrebbe funzionare per te). Infine, poiché vedo nei commenti che userete i dati spaziali, postgresql non sa nulla di CREATE SPATIAL INDEXsintassi. Dovrai installare Postgis e usare la INDEXTYPEparola chiave per creare indici spaziali. Infine, assicurati di gestire gli schemi in modo appropriato.

Per farla breve:

  1. Genera script e dati usando il metodo di Aaron Bertrand (probabilmente mi atterrerei al livello della tabella)
  2. Prendi nota dell'indice DDL (se è ancora valido), ma non includerlo
  3. Crea indici su Postgres una volta che la struttura e i dati sono a posto

3
Non penso che sia necessario configurare SQL Server per parlare con Postgres. Sono sicuro che una volta installato SQL Server potrai estrarre i dati in una varietà di formati che Postgres capirà.
Aaron Bertrand

Scuse. Volevo dire che avresti bisogno di configurare Postgres per accettare connessioni esterne (in questo caso SQL Server)
swasheck,

Non scusarti. :-) Stavo solo chiarendo che non è necessario che SQL Server parli direttamente con Postgres o viceversa ..
Aaron Bertrand
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.