Come posso eseguire il backup di un database remoto di SQL Server su un'unità locale?


241

Devo copiare un database da un server remoto a uno locale. Ho provato a utilizzare SQL Server Management Studio, ma esegue il backup solo su un'unità sul server remoto.

Alcuni punti:

  • Non ho accesso al server remoto in modo da poter copiare i file;
  • Non ho accesso per impostare un percorso UNC sul mio server;

Qualche idea su come posso copiare questo database? Dovrò usare strumenti di terze parti?


1
Penso che se non hai affatto accesso alla struttura delle directory, sarai sfidato a provare a farlo.
JNK,

3
Stai solo cercando di copiare il database piuttosto che eseguirne il backup? In tal caso, è possibile utilizzare la procedura guidata Copia database o (in SQL Server 2008) utilizzare l'opzione "Genera script" per eseguire lo script dello schema e dei dati. Redgate SQL Compare e Data Compare possono anche essere utili qui.
Martin Smith,

1
@MartinSmith Secondo il tuo suggerimento, ho generato lo script usando l' Generate and Publish Scriptsopzione. Ricevo tutte le tabelle e lo schema, ma non ho ricevuto alcun dato con le tabelle. Come posso risolvere questo problema.
sei davvero amico il

Risposte:


182

In Microsoft SQL Server Management Studio è possibile fare clic con il pulsante destro del mouse sul database di cui si desidera eseguire il backup e fare clic su Attività -> Genera script.

Questo apre una procedura guidata in cui è possibile impostare quanto segue per eseguire un backup decente del database, anche su un server remoto :

  • Seleziona il database di cui desideri eseguire il backup e premi successivamente,
  • Nelle opzioni che ti presenta:
    1. Nel 2010: in Opzioni tabella / vista, modifica "Dati script" e "Indici script" su Vero e premi Successivo,
    2. Nel 2012: in "Generale", modifica "Tipi di dati in script" da "Solo schema" in "Schema e dati"
    3. Nel 2014: l'opzione di scripting dei dati è ora "nascosta" nel passaggio "Imposta opzioni di scripting", è necessario fare clic su "Avanzate" e impostare "Tipi di dati su script" sul valore "Schema e dati"
  • Nelle quattro finestre successive , premi "seleziona tutto" e poi,
  • Scegli di eseguire lo script in una nuova finestra di query

Una volta fatto, avrai uno script di backup pronto davanti a te. Creare un nuovo database locale (o remoto) e modificare la prima istruzione "USE" nello script per utilizzare il nuovo database. Salvare lo script in un luogo sicuro, andare avanti ed eseguirlo sul nuovo database vuoto. Questo dovrebbe crearti un database locale (quasi) duplicato che puoi eseguire il backup come preferisci.

Se hai pieno accesso al database remoto, puoi scegliere di selezionare "script tutti gli oggetti" nella prima finestra della procedura guidata e quindi modificare l'opzione "Database script" su True nella finestra successiva. Attenzione però, dovrai eseguire una ricerca completa e sostituire il nome del database nello script in un nuovo database che in questo caso non dovrai creare prima di eseguire lo script. Ciò dovrebbe creare un duplicato più accurato ma a volte non è disponibile a causa delle restrizioni delle autorizzazioni.


9
In SQL Server Management Studio 2012 non esiste un'opzione come "Dati script", quindi nelle versioni più recenti effettuare le seguenti operazioni per il passaggio 2: in "Generale", modificare "Tipi di dati in script" da "Solo schema" a "Schema e dati ".
berezovskyi,

1
L'ho controllato su SQL Server 2008 R2 e ha funzionato come un fascino. Per usarlo per la strategia di backup ho bisogno di un po 'di lavoro aggiuntivo da solo, ma penso sia meglio che usare alcuni strumenti di terze parti come RedGate ecc. Forse sono paranoia ma penso che la maggior parte degli strumenti di terze parti abbia un codice aggiuntivo e otterrà il mio controllare e ridurre la semplicità e il chiarimento della sceneggiatura. Grazie mille.
QMaster

2
@ShaunLuttin Se ti assicuri di cambiare "Tipi di dati in script" da "Solo schema" a "Schema e dati nel secondo passaggio (nel 2012), dovrebbero essere visualizzate le istruzioni INSERT.
Daniel Gill,

6
In SSMS 2014 l'opzione per passare dallo schema solo allo schema e ai dati è ora nascosta dietro un "Avanzato" quando si seleziona dove salvare lo script.
MushinNoShin,

2
Quando provo a eseguire uno script usando questo metodo ottengo un errore dallo studio di gestione del server SQL su "Memoria insufficiente per continuare l'esecuzione del programma. (Mscorelib)"
Rob

51

Innanzitutto, concedi le autorizzazioni di controllo completo a un percorso locale sul tuo computer (come mostrato di seguito) con Everyone. (O in alternativa concedere autorizzazioni specificamente per l'account di SQL Server Agent).

In secondo luogo, eseguire quanto segue:

BACKUP DATABASE [dev] TO  DISK = N'\\myMachine\c\dev.bak' WITH COPY_ONLY, INIT;

14
Questa è la risposta alla domanda. Ciò "eseguirà il backup di un database remoto di SQL Server su un'unità locale" e non "tabelle e dati di script". Qualcuno: contrassegnare questa risposta come accettata e rimuovere la risposta errata di Daniel Gill
Henrik Holmgaard Høyer,

mentre penso che questa sia la risposta migliore, la domanda chiede "Qualche idea su come posso copiare questo database?" non specificamente il backup.
Oliver Townshend,

11
Ciò presuppone che il computer remoto abbia accesso ai file dei computer locali, il che non è il caso generale.
Anders Lindén,

Vorrei poterti votare più di una volta. Questa è la risposta perfetta, e qualcosa che volevo fare da anni. Così semplice ... così perfetto. Non risolverà tutti i casi del mondo, ma ha funzionato perfettamente per il mio, in cui mi sono spostato in una macchina, ma non la macchina che dispone di SQL Server.
Wade Hatler,

Questo ha anche un lavoratore per me. Basta condividere temporaneamente la cartella locale con tutti , eseguire il backup, quindi disabilitare la condivisione. Penso anche che questa dovrebbe essere la risposta corretta.
Fred Rogers,

51

Per copiare solo i dati e lo schema (non copierà le stored procedure, le funzioni ecc.), Utilizzare l'importazione / esportazione guidata di SQL Server e selezionare Nuovo ... quando si sceglie il database di destinazione.

Fare clic con il tasto destro del mouse su Database> Attività> Importa dati.

Scegli un'origine dati

  • Origine dati : SQL Server Native Client
  • Nome server : il server remoto
  • Autenticazione :
  • Database : il nome del db

Scegli una destinazione

  • Origine dati : SQL Server Native Client
  • Nome server : il server locale
  • Autenticazione :
  • Database :New...

Il resto è semplice.


2
Questo ha funzionato molto meglio per me rispetto alla risposta accettata. Gestisce le relazioni tra le tabelle in modo molto più pulito.
MushinNoShin,

7
Welp. Purtroppo non imposta identità e vincoli predefiniti. :(
MushinNoShin,

1
Questo è un modo molto più efficace rispetto alla generazione di script. Gli script possono essere piuttosto grandi a volte. Preferenza personale. Senza offesa :)
Vikas,

Questo è molto più semplice e sarebbe il mio obiettivo, ma se per qualche motivo hai bisogno di colonne come object_id, create_data, modifica la data COSÌ COM'È in sys.tables, ricorda che verranno modificati al momento della creazione.
Crismogramma

@MushinNoShin è possibile generare prima gli script e quindi importare / esportare i dati abilitando l'inserimento dell'identità nella fase di mappatura.
HasanG,

29

Non è possibile creare un backup da un server remoto su un disco locale - non c'è proprio modo di farlo. E non ci sono nemmeno strumenti di terze parti per farlo, per quanto ne so.

Tutto quello che puoi fare è creare un backup sul computer del server remoto e chiedere a qualcuno di comprimerlo e inviarlo a te.


5
Non sono d'accordo. In molte circostanze è possibile utilizzare il comando "Genera script" di MS SQL Server Management Studio per creare uno script che può essere eseguito per generare un database locale che è quindi possibile eseguire come desiderato. Vedi la mia risposta qui sotto o il commento di Martin Smith sulla domanda.
Daniel Gill,

19
@Rafid: sì -ma NON è un vero BACKUP - è un'esportazione di script / dati .....
marc_s

2
@marc_s Che cosa c'è in un "backup vero" diverso da una copia esportata? Il ceppo? Qualunque altra cosa?
Dronz,

31
@Dronz: SÌ! L'esportazione degli script riprodurrà la struttura e possibilmente anche i dati in una tabella, ma non può includere elementi come registri delle transazioni e statistiche e altre parti vitali di un database di SQL Server.
marc_s,

1
@ShaunLuttin, puoi includere i dati.
Erwin Rooijakkers,

17

So che questa è una risposta tardiva, ma devo fare un commento sulla risposta più votata che dice di usare l'opzione generate script in SSMS.

Il problema è che questa opzione non genera necessariamente script nell'ordine di esecuzione corretto perché non tiene conto delle dipendenze.

Per i database di piccole dimensioni questo non è un problema, ma per quelli più grandi è certamente perché richiede di riordinare manualmente quello script. Provalo sul database di 500 oggetti;)

Purtroppo in questo caso l'unica soluzione sono strumenti di terze parti.

Ho usato con successo strumenti di confronto di ApexSQL (Diff e Data Diff) per attività simili, ma non puoi sbagliare con nessun altro già menzionato qui, in particolare Red Gate.


1
non sono d'accordo, per me sql ordina sempre correttamente le dipendenze, hai un esempio specifico di come riprodurre il comportamento che hai menzionato?
visto il

inoltre, c'è un'opzione per tenere conto di questa questione
Gaspa79,

13

Puoi provare SQLBackupAndFTP . Creerà script per creare tutti gli oggetti nel database e le istruzioni INSERT per tutte le righe nelle tabelle. In qualsiasi database è possibile eseguire questo file di script e l'intero database verrà ricreato.


4
Distaccato. Ho dovuto installare una nuova versione di sql server management studio e non potevo fare script come una volta. Questo strumento si è occupato rapidamente e senza problemi anche senza avere pieno accesso al server remoto (componente aggiuntivo sqlserver appharbor)
Daniel Gill

1
Si noti che questo software utilizza pesantemente le risorse.
Dementic

Oltre ad essere buggy e non del tutto sicuro che funzioni correttamente. Non è possibile connettersi senza problemi a un server remoto tramite PHP, ma non è possibile? Quando ho le impostazioni corrette sul server stesso. Quindi ya ... andare avanti.
Shawn Rebelo,

7

Guarda questo blog per una descrizione su come copiare un database remoto:

Eseguire il backup di un database SQL Server 2008 da un ambiente di hosting condiviso


1
Questo approccio spiega come eseguire lo script della struttura del database, crearlo localmente e quindi utilizzare gli strumenti di gestione SQL per copiare i dati tra un database locale e remoto.
Drew Noakes,

1
È possibile invertire l'opzione "Dati script" su True per eseguire lo script dei dati in una volta sola.
Daniel Gill,

Copia e backup sono due cose diverse.
Anders Lindén,

Questo è stato perfetto perché ho bisogno di lavorare su un database 2016 utilizzando SQL Server 2012 e non posso usare un backup 2016 nel 2012.
Majjam

6

C'è la soluzione al 99% per ottenere il file bak dal server sql remoto al tuo PC locale. L'ho descritto lì nel mio post http://www.ok.unsode.com/post/2015/06/27/remote-sql-backup-to-local-pc

In generale sarà simile a questo:

  • eseguire lo script sql per generare file bak

  • eseguire lo script sql per inserire ogni file bak nella tabella temporanea con tipo di campo varbinary e selezionare questa riga e scaricare i dati

  • ripeti anteprima passo quante volte hai i file bak

  • eseguire lo script sql per rimuovere tutte le risorse temporanee

il gioco è fatto, hai i tuoi file bak sul tuo PC locale.


5

È possibile utilizzare Copia database ... fare clic con il pulsante destro del mouse sul database remoto ... selezionare attività e utilizzare copia database ... chiederà informazioni sul server di origine e sul server di destinazione. che l'origine è il telecomando e la destinazione è l'istanza locale del server sql.

è così facile


Copia database richiede i privilegi SysAdmin. Questa non è una soluzione per gli utenti regolari del database.
Buggieboy,

Nel mio numero di oggi, il nostro team di sviluppo ha i privilegi di amministratore di sistema. Quindi userò l'approccio di Pouyan.
Codici con Hammer,

ma devo farlo quotidianamente e ho bisogno di un copione per farlo
chiarire il

3

La banda di AppHarbor ha lottato con questo e ha sviluppato una soluzione temporanea usando oggetti di gestione del server SQL e SqlBulkCopy.

Dai un'occhiata al loro post sul blog o vai direttamente al codice .

L'hanno testato solo con AppHarbor ma potrebbe valere la pena verificarlo.


3

Le risposte sopra non sono corrette. Uno script SQL anche con dati non è un backup. Un backup è un file BAK che contiene il database completo nella sua struttura corrente, inclusi gli indici.

Naturalmente un file BAK che contiene il backup completo con tutti i dati e indica da un database remoto di SQL Server può essere recuperato su un sistema locale.

Questo può essere fatto con un software commerciale, per salvare direttamente un file BAK di backup sul tuo computer locale, ad esempio Questo creerà direttamente un backup da un db SQL remoto sul tuo computer locale.


È necessario disporre delle autorizzazioni di amministratore di sistema per farlo.
LarryBud,

Destra. L'account (windows o sql server) utilizzato per connettersi in remoto all'istanza del server sql richiede autorizzazioni sysadmin per recuperare i junk di backup e archiviarli sul computer locale. Lo strumento citato dal software FIDA crittografa e comprime il traffico di rete da e verso il server sql durante il recupero delle giunzioni di backup. Una volta che hai il file bak sul tuo computer, puoi ripristinarlo dove vuoi.
Matthias,

1

Come ha detto Martin Smith, se non si ha accesso alla macchina o al filesystem, sarà necessario utilizzare strumenti di terze parti, come Red Gate o Adept per fare un confronto sui sistemi di origine e destinazione. Gli strumenti di Red Gate ti permetteranno di copiare oggetti e schemi E i dati.


1

in qualche modo è possibile eseguire un backup da un'istanza remota di SQL Server sull'unità locale, a condizione che sia soddisfatta la seguente condizione:

  1. Hai una cartella condivisa sul tuo disco locale.
  2. la cartella condivisa è accessibile dalla casella di SQL Server.

Ora quando si specifica il comando di backup, utilizzare il percorso della cartella condivisa quando si specifica l'opzione del disco.


E in che modo la tua risposta è diversa da quella di @Vivek?
Martin Schröder,

1

prova questo:

1) Condividi una cartella con l'autorizzazione completa sul tuo computer

2) nel tuo server SQL: pannello di controllo -> strumenti di amministrazione -> servizi -> fai clic con il tasto destro su tutti i servizi SQL

la scheda di accesso dovrebbe iniziare con l'amministratore del dominio

3) nella procedura guidata di manutenzione del server sql posizionare la posizione e la cartella di backup (\ nomeutente \ sharedfoldernam)

Ho fatto il backup remoto su 8 server di SQL Server 2008 nella nostra azienda


1

Sono sorpreso che nessuno abbia menzionato la soluzione di backup con script offerta da Ola Hallengren che lo fa assolutamente si consente di eseguire il backup di un database da un server remoto per un percorso UNC sulla rete per libero (In realtà sto usando come tipo I eseguire il backup di un DB da un server di sviluppo su cui non ho accesso remoto se non tramite SSMS su una condivisione sul mio PC di sviluppo). È disponibile dal 2008 e funziona su SQL Server 2005 fino al 2014.

Devi assicurarti che la condivisione che hai impostato abbia abbastanza accesso: tendo a consentire la lettura / scrittura completa al gruppo AD "Tutti" per la durata del processo di backup perché sono troppo pigro per capire qualcosa di più restrittivo, ma questo è scelta personale.

È ben utilizzato, ben documentato e molto flessibile. Tendo a mettere i proc e la tabella di registrazione nel loro piccolo database di utility e poi accenderlo. A condizione che tutto sia nel tuo dominio AD e non remoto nel senso che si trova su un server condiviso o qualcosa del genere, questo funziona molto bene.

Mi scuso per l'aggiunta di un thread molto vecchio, ma mi sono imbattuto in questo quando cercavo qualcos'altro e ho pensato che fosse una valida aggiunta per chiunque cercasse questo argomento.


1

Per il 2019, consiglierei di utilizzare mssql-scripter se si desidera un backup locale effettivo. Sì, si tratta di script ma è possibile modificarlo per includere tutto ciò che si desidera, che può includere tutti i dati. Ho scritto uno script bash per eseguire backup giornalieri automatici usando questo su una macchina Linux. Dai un'occhiata alla mia idea:

https://gist.github.com/tjmoses/45ee6b3046be280c9daa23b0f610f407

0

Potrei farlo una volta ... PER farlo devi avere una condivisione aperta sul server remoto. quindi puoi posizionare direttamente il backup sulla condivisione stessa, rispetto alla posizione predefinita ...

Di solito l'amministratore prende il backup e lo condivide con noi in alcune cartelle condivise. Ho provato se funzionerà se inserisco il backup lì. Ha funzionato.


0

Se si utilizzano gli script Genera in SSMS, fare clic sul pulsante Avanzate. Sotto l'opzione "Genera script per gli oggetti dipendenti", fai clic su Vero. Facendo clic su che anche tutte le dipendenze di ciascun oggetto verranno scritte nell'ordine corretto.


True è il valore predefinito in SSMS v17.8.1.
Chris Catignani,

0

Alcuni programmi di backup di terze parti consentono l'impostazione del trasferimento di file con autorizzazioni di rete specifiche. È molto utile quando il servizio SQL Server è in esecuzione con un account limitato e non dispone di autorizzazioni di rete sufficienti. Prova a utilizzare EMS SQL Backup che risolve questa attività.


0

A tale scopo utilizzo gli strumenti di Redgate backup pro 7 . è possibile creare il mirror dal file di backup nel riquadro di creazione in un'altra posizione. e può copiare automaticamente il file di backup dopo averlo creato sulla rete e sulla memoria host.


0

Crea una cartella condivisa locale, con privilegi di lettura / scrittura "tutti"

Connettiti al database di destinazione, avvia il backup e punta alla condivisione come di seguito

\ Mymachine \ cartella_condivisa \ mybackup.bak

(Provato su ambiente di dominio Windows)


0

So che questo è un post più vecchio, ma per quello che vale, ho scoperto che la soluzione "più semplice" è semplicemente fare clic con il pulsante destro del mouse sul database e selezionare "Attività" -> "Esporta applicazione livello dati". È possibile che questa opzione sia disponibile solo perché il server è ospitato su Azure (da quello che ricordo di aver lavorato con Azure in passato, il formato .bacpac era abbastanza comune lì).

Fatto ciò, è possibile fare clic con il pulsante destro del mouse sull'elenco "Database" del server locale e utilizzare "Importa applicazione livello dati" per ottenere i dati sul computer locale utilizzando il file .bacpac.

Ricorda solo che l'esportazione potrebbe richiedere molto tempo. Ho impiegato circa due ore per terminare l'esportazione. Tuttavia, l'importazione di parti è molto più rapida.


-1

Se ci si trova su una rete locale, è possibile condividere una cartella sul proprio computer locale e utilizzarla come cartella di destinazione per il backup.

Esempio:

  • Cartella locale:

    C:\MySharedFolder -> URL: \\MyMachine\MySharedFolder

  • SQL Server remoto:

    Select your database -> Tasks -> Back Up -> Destination -> Add -> Apply '\\MyMachine\MySharedFolder'

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.