none
Backup/Restore Database Sql Server RRS feed

  • 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.
    "

    martedì 4 maggio 2010 15:27

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
    mercoledì 12 maggio 2010 07:53
    Moderatore

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
    martedì 4 maggio 2010 15:46
    Moderatore
  • Ti ringrazio ma continuo a ottenere errore ...
    martedì 4 maggio 2010 16:17
  • 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) ?
     
    HTH
    Ciao!


    Simone Viganò AKA VeroToad
    Microsoft MVP Most Valuable Professional - Windows Desktop Experience
    Il mio blog | Blog MVP | Risorse in italiano per Office
    • Contrassegnato come risposta NikkySixx martedì 4 maggio 2010 23:39
    • Contrassegno come risposta annullato NikkySixx mercoledì 5 maggio 2010 00:21
    martedì 4 maggio 2010 18:36
  • 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?
    martedì 4 maggio 2010 19:48
  • 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
    • Contrassegnato come risposta NikkySixx martedì 4 maggio 2010 23:39
    • Contrassegno come risposta annullato NikkySixx mercoledì 5 maggio 2010 00:22
    martedì 4 maggio 2010 20:03
    Moderatore
  • 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?

     

    martedì 4 maggio 2010 23:28
  • 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
    • Contrassegnato come risposta NikkySixx mercoledì 5 maggio 2010 19:28
    • Contrassegno come risposta annullato NikkySixx mercoledì 12 maggio 2010 01:13
    mercoledì 5 maggio 2010 11:54
    Moderatore
  • 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

    mercoledì 12 maggio 2010 01:22
  • 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
    mercoledì 12 maggio 2010 07:53
    Moderatore
  • 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!

    mercoledì 12 maggio 2010 12:04
  • 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$sql2008

    e' una valida alternativa?

    mercoledì 4 agosto 2010 07:57
  • 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$sql2008

    e' una valida alternativa?


    No, per due motivi:

    1. Causi un fermo del DBMS e quindi di tutti i servizi che utilizzano i db ospitati sull'istanza
    2. 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
    mercoledì 4 agosto 2010 08:28
    Moderatore
  • No, per due motivi:

    1. Causi un fermo del DBMS e quindi di tutti i servizi che utilizzano i db ospitati sull'istanza
    2. 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

    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 ?

    GRAZIE

    mercoledì 1 settembre 2010 10:33
  • 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
    mercoledì 1 settembre 2010 18:55
    Moderatore
  • 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

    ovviamente 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

    giovedì 2 settembre 2010 16:20