Principale utente con più risposte
Backup/Restore Database Sql Server

Domanda
-
Salve a tutti,il titolo è abbastanza espicito,in pratica ho bisogno di una query che faccia un backup del mio file database.mdf e di una restore che lo ripristini eliminando il corrente,il tutto dovrebbe essere richiamato da vb.net, ma ho preferito postare il problema qua essendo un qualcosa di relativo a sql server
Come posso procedere?
Vi ringrazio ;)
p.s.Ho iniziato a risolvere il problema con una query simile ma ottengo un errore dopo l esecuzione
backup database prova to disk = 'c:\prova.bak'
"Messaggio 3201, livello 16, stato 1, riga 1
Impossibile aprire il dispositivo di backup 'c:\prova.bak'. Errore del sistema operativo 5(Accesso negato.).
Messaggio 3013, livello 16, stato 1, riga 1
Interruzione anomala di PROVA DATABASE in corso.
"
Risposte
-
Chiedo scusa a Lorenzo Benaglia,per aver riaperto il topic ma sto riscontrando diversi problemi.Uno dei quali è la necessarietà (= imposizione) di salvare in qualsiasi posizione,e quindi anche su c:\
Come ho già scritto è semplicemente assurdo salvare i backup localmente al server in quanto se il server si rompe perdi sia i dati che i backup; ha poco senso spostarli subito dopo da un'altra parte in quanto se il server va in crash durante la copia perdi nuovamente tutto.
L'unica soluzione sensata è eseguire i backup su una risorsa remota (normalmente una share di rete).
Se si opera in questo modo è necessario che i server siano in ambiente di dominio e che SQL Server venga eseguito con un normale utente di dominio. Nel tuo caso mi sembra di capire che l'applicazione e SQL Server girano sul medesimo PC. In questo caso assegna i permessi di Full Control al gruppo locale SQLServerMSSQLUser$<nome pc>$<nome istanza> di ogni directory che dovrà essere utilizzata per i backup (al limite anche root). Tale operazione la puoi fare da Windows Explorer selezionando la directory, tasto DX, Properties, tab Security, Edit, Add.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit- Contrassegnato come risposta NikkySixx mercoledì 12 maggio 2010 12:04
Tutte le risposte
-
Salve a tutti,il titolo è abbastanza espicito,in pratica ho bisogno di una query che faccia un backup del mio file database.mdf e di una restore che lo ripristini eliminando il corrente
Ciao,
Leggi i seguenti paragrafi sui Books Online:
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit -
-
Hai già verificato che l'utente con cui esegui il processo di SQL Server ha accesso a C:\ (che non è proprio l'area del disco solitamente impiegata per i backup) ?HTHCiao!
Simone Viganò AKA VeroToad
Microsoft MVP Most Valuable Professional - Windows Desktop Experience
Il mio blog | Blog MVP | Risorse in italiano per Office -
-
Diciamo che non saprei come verificarlo, supponendo di eseguire un programma in locale ma il cui database risiede su un server,come dovrei verificare tale accesso?
Connettiti al server remoto in console/via RDP, lancia il SQL Server Configuration Manager, seleziona il servizio SQL Server (nome istanza) e guarda cosa riporta la colonna "Log On As".Il mio consiglio è quello di NON salvare i backup localmente al server in quanto in caso di crash ti perderesti database e backup ma piuttosto di eseguirli su una share di rete, verificando che l'account utilizzato dal SQL Server Agent abbia i permessi di full control sulla share (e a livello NTFS).
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit -
Ho capito,salvare su c: è un po'inutile,infatti salvando su un qualsiasi altro disco o partizione non ho alcun errore
Sembra funzionare vi ringrazio :) se ho dei problemi nell integrazione della funzione in vb,apriro'una nuova discussione
ciao!
p.s sembra ma non funziona,in pratica viene salvata la struttura della tabella/e ma non il contenuto usando la query.
backup database prova to disk = 'd:\prova.bak'
Per altro il restore non avviene se non riavvio sql server management,con cui mi da questo errore
Impossibile ottenere accesso esclusivo al database perché è in uso.Dove sto sbagliando?
-
p.s sembra ma non funziona,in pratica viene salvata la struttura della tabella/e ma non il contenuto usando la query.
backup database prova to disk = 'd:\prova.bak'
Per altro il restore non avviene se non riavvio sql server management,con cui mi da questo errore
Impossibile ottenere accesso esclusivo al database perché è in uso.Dove sto sbagliando?
Un Full Backup contiene l'intero database (dati + metadati) quindi non è possibile quanto affermi.
Per eseguire il restore di un db, quest'ultimo non deve essere in uso (leggi ci deve essere solo 1 connessione attiva, quella che sta eseguendo il comando di RESTORE).
Se stai cercando di eseguire il Restore di un db già presente sull'istanza devi specificare la clausola WITH REPLACE.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit -
Chiedo scusa a Lorenzo Benaglia,per aver riaperto il topic ma sto riscontrando diversi problemi.Uno dei quali è la necessarietà (= imposizione) di salvare in qualsiasi posizione,e quindi anche su c:\
Quindi la domanda sarebbe come dare i permessi necessari ad sql server affinchè possa scrivere su tale directory
Lanciando SQL Server Configuration Manager,e selezionando il servizio SQL Server (nome istanza) la colonna "Log On As" ha valore pari a NTAUTHORITY/NETWORK SERVICE
Inoltre ipotizzando che il programma sia su un server,ottengo un errore curioso,e cioè se salvo su c:\ ottengo l errore classico di mancati permessi, ma se salvo su un disco esterno locale (ad esempio una penna usb inserita sul client) mi conferma che il backup è andato a buon fine ma non appare alcun file
Grazie
-
Chiedo scusa a Lorenzo Benaglia,per aver riaperto il topic ma sto riscontrando diversi problemi.Uno dei quali è la necessarietà (= imposizione) di salvare in qualsiasi posizione,e quindi anche su c:\
Come ho già scritto è semplicemente assurdo salvare i backup localmente al server in quanto se il server si rompe perdi sia i dati che i backup; ha poco senso spostarli subito dopo da un'altra parte in quanto se il server va in crash durante la copia perdi nuovamente tutto.
L'unica soluzione sensata è eseguire i backup su una risorsa remota (normalmente una share di rete).
Se si opera in questo modo è necessario che i server siano in ambiente di dominio e che SQL Server venga eseguito con un normale utente di dominio. Nel tuo caso mi sembra di capire che l'applicazione e SQL Server girano sul medesimo PC. In questo caso assegna i permessi di Full Control al gruppo locale SQLServerMSSQLUser$<nome pc>$<nome istanza> di ogni directory che dovrà essere utilizzata per i backup (al limite anche root). Tale operazione la puoi fare da Windows Explorer selezionando la directory, tasto DX, Properties, tab Security, Edit, Add.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit- Contrassegnato come risposta NikkySixx mercoledì 12 maggio 2010 12:04
-
Ciao,grazie delle spiegazioni :) sempre esaurienti, ma ho combinato un mezzo macello.
In pratica ho provato a dare come autorizzazioni il permesso di scrivere su c:\ ed è successo il panico,perchè ovviamente ha propagato tutte le autorizzazioni anche a file in uso da windows,col risultato che (non so per quale motivo) la funzione di backup su sql server dopo questa modifica impallava completamente il computer.Ho risolto ripristinando il sistema a una posizione precedente e comunque ho capito il problema, è proprio il fatto che l applicazione giri sul server anzichè sul client a dare fastidio al backup sui dischi esterni
Grazie ancora!
-
una soluzione di backup potrebbe essere anche questa .. con un file .bat messo in Task Schedule di windows :
net stop mssql$sql2008
copy work*.mdf \\server2\backup\salva
net start mssql$sql2008e' una valida alternativa?
-
una soluzione di backup potrebbe essere anche questa .. con un file .bat messo in Task Schedule di windows :
net stop mssql$sql2008
copy work*.mdf \\server2\backup\salva
net start mssql$sql2008e' una valida alternativa?
No, per due motivi:- Causi un fermo del DBMS e quindi di tutti i servizi che utilizzano i db ospitati sull'istanza
- Un database è SEMPRE costituito da almeno 2 files: il Master Data File (.mdf), il Transaction Log (.ldf) ed eventuali Secondary Data File (.ndf). Se copi solo l'.mdf, all'atto del "restore" rischi di ritrovarti un db in uno stato inconsistente.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit -
No, per due motivi:
- Causi un fermo del DBMS e quindi di tutti i servizi che utilizzano i db ospitati sull'istanza
- Un database è SEMPRE costituito da almeno 2 files: il Master Data File (.mdf), il Transaction Log (.ldf) ed eventuali Secondary Data File (.ndf). Se copi solo l'.mdf, all'atto del "restore" rischi di ritrovarti un db in uno stato inconsistente.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserveritE se mi copio tutta la direttori dov'è in database :
..\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA
riesco in caso di problemi a ripristinarlo ?
GRAZIE
-
E se mi copio tutta la direttori dov'è in database :
..\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA
riesco in caso di problemi a ripristinarlo ?
Solo se la copia avviene a servizio fermo, quindi ricadi nel caso 1 che ti ho descritto nel post precedente.
I backup è opportuno che vengano eseguiti in base ad uno schedule preciso utilizzando l'omonimo comando T-SQL.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserverit -
E se mi copio tutta la direttori dov'è in database :
..\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA
riesco in caso di problemi a ripristinarlo ?
Solo se la copia avviene a servizio fermo, quindi ricadi nel caso 1 che ti ho descritto nel post precedente.
I backup è opportuno che vengano eseguiti in base ad uno schedule preciso utilizzando l'omonimo comando T-SQL.
Ciao!
Lorenzo Benaglia
Microsoft MVP - SQL Server
http://blogs.dotnethell.it/lorenzo
http://social.microsoft.com/Forums/it-IT/sqlserveritovviamente prima fermi il servizio con il comando:
net stop mssql$sql2008
poi faccio la copia del direttorio:
..\Program Files\Microsoft SQL Server\MSSQL10.SQL2008\MSSQL\DATA
Finito la copia riattivo il servizio:
net start mssql$sql2008