Abilitare SQL Server per il backup su macchine / unità remote


8

Ho un SQL Server (2000, 2005 e 2008) e mi piacerebbe usare SQL Agent (o anche un semplice database di backup 'xxx' su disco = 'yyy'), per eseguire il backup su unità remote.

Vale a dire: ho un'unità mappata nella macchina SQL, ad esempio: "M:" che mappa a \\ otherbox \ someshare

Per impostazione predefinita, SQL Server non consente di eseguire il backup su tali unità, ma penso che ci sia un modo per abilitarlo. Qualcuno può indicarmi i documenti?

Grazie in anticipo.


1
Puoi semplicemente utilizzare uno strumento di terze parti, come SQLBackupAndFTP per eseguire il backup di SQL Server in remoto? sqlbackupandftp.com/blog/…
Nick Taylor

Risposte:


8

Utilizzare il percorso UNC quando si specifica la destinazione: l'agente SQL non ha un concetto di "unità" "mappate".

Inoltre, SQL Agent viene in genere eseguito come "Servizio locale" o "Sistema locale" e, come tale, non dispone dei diritti per le condivisioni remote su altri computer.

Hai un paio di scelte:

  • Esegui SQL Agent come account ruolo nel dominio. Concedi a quell'account l'autorizzazione a scrivere nella directory / condivisione in cui desideri archiviare i backup.

  • Esegui SQL Agent come "Servizio di rete". Si autenticherà sul server di condivisione con l'account del computer di dominio della macchina su cui è in esecuzione il servizio. Concedi a quell'account l'autorizzazione a scrivere nella directory / condivisione in cui desideri archiviare il backup.

  • Se non si dispone di un dominio, creare un account con lo stesso nome utente e password sia sulla macchina che ospita SQL Agent sia sulla macchina che ospita i file di backup. Modifica SQL Agent in modo che venga eseguito come account "ruolo" e concedi a tale account l'autorizzazione a scrivere nella directory / condivisione in cui desideri archiviare il backup. (Il "dominio dei poveri" ...)


Oltre a menzionare i percorsi UNC, consiglierei di connettersi effettivamente al percorso UNC. Il modo rapido / semplice per farlo è semplicemente aprire un browser Web e digitarlo. Ti verrà richiesto un nome utente / password e di solito puoi dire che vuoi RICORDARE quell'utente / passare per il futuro. Ho visto troppe persone che erano lì al 99% e non riuscivano a capire perché le cose non funzionassero. PROVA IL TUO COLLEGAMENTO! LOL! :-)
KPWINC,

Questo è quello che stavo cercando (la parte del "dominio dei poveri");) Grazie!
Martin Marconcini,

4

Sono totalmente d'accordo con entrambe le risposte sul percorso UNC.

Vorrei anche aggiungere che anche con le unità mappate hai una soluzione semplice. È possibile eseguire un backup su una qualsiasi delle normali unità del server. E poi puoi aggiungere

xp_cmdshell 'XCOPY [source] [destination] \flags'

Comando SQL per il lavoro o lo script SQL eseguito.

Con xp_cmdshell puoi fare ancora di più - ad esempio esegui uno strumento da riga di comando di archivio esterno, come 7z per comprimere il file prima di copiarlo sull'unità mappata (quando la connessione remota è troppo lenta ...)

PS: Hai dimenticato di dire che xp_cmdshell può essere abilitato e disabilitato utilizzando lo strumento di configurazione della superficie e eseguendo sp_configure (e per impostazione predefinita è disabilitato)


L'utilità ROBOCOPY dal Resource Kit Win2003 offre alcune opzioni extra rispetto a XCOPY, utili in questo tipo di operazione. Nel mio caso, la possibilità di non sovrascrivere i backup precedentemente copiati o di eseguire il mirroring di due directory di backup è facilmente implementabile senza script aggiuntivi.
kermatt,

1

Il tuo agente deve accedere alle condivisioni di rete. Non hanno bisogno di essere mappati in anticipo.

Lo fai in questo modo:

BACKUP DATABASE myDB TO DISK = '\\machine\share\dir\file.bak'

Credo che se l'utente proprietario del lavoro è un amministratore di sistema sql, viene eseguito sotto l'agente, altrimenti viene eseguito come utente non amministratore di sistema.


1

Se SQL Server non viene eseguito con un account di dominio, è possibile mappare un'unità di rete per l'account sqlserver (non il proprio account) come descritto in questa risposta StackOverflow

Per prima cosa devi abilitare xp_cmdshell

-- allow changes to advanced options 
EXEC sp_configure 'show advanced options', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO
-- To enable xp_cmdshell
EXEC sp_configure 'xp_cmdshell', 1
GO
-- Update currently configured values for advanced options.
RECONFIGURE
GO

Quindi è possibile mappare un'unità utilizzando:

EXEC xp_cmdshell 'NET USE Z: \\Srv\Path password1 /USER:Domain\UserName'

Finalmente puoi eseguire il backup su quell'unità mappata:

BACKUP DATABASE myDB TO DISK = 'z:\file.bak'

0

Tieni presente che SQL Server è molto intollerante ai ritardi di rete. Se si verificano e tendono a farlo, il backup fallirà. Non raccomando affatto questa pratica per ambienti di produzione.

Meglio eseguire il backup locale e quindi copiare.


0

Il modo più semplice è creare un'unità .vhd su una condivisione di rete tramite la gestione del disco e assegnargli una lettera di unità. SQL può accedere a questa unità senza alcuna modifica.

Basta aggiungere uno script diskpart.exe allo scheduler all'avvio per collegarsi automaticamente al riavvio.

esempio selezionare vdisk file = "\ {indirizzo ip / server} {networkshare} {filenamep.vhd}" attach vdisk // ricorda l'ultima lettera di unità assegnata a.

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.