none
Backup database ed Errore del sistema operativo 21 : Periferica Non Pronta RRS feed

  • Domanda

  • Ciao  a tutti,in una discussione precedente stavo cercando di capire il funzionamento di backup/restore di un database e mi sto scontrando con i privilegi di sql server,comunque nel caso in questione , l applicazione gira su un server,dove risiede anche  il database.

    Quindi ho due possibilita Il backup va a buon fine solo su percorsi di share di rete e questo funziona perfettamente (http://social.microsoft.com/Forums/it-IT/sqlserverit/thread/5c49dd02-39af-4bfc-8aa7-4a49b9eeebf7)

    L altra possibilità consiste nel ipotesi che un utente dal client voglia salvare tale backup su un dispositivo usb. In questo modo ottengo l errore seguente

    Impossibile aprire dispositivo di backup.Errore del sistema operativo 21 : Periferica Non Pronta

    Grazie per qualsiasi suggerimento

    giovedì 13 maggio 2010 08:18

Risposte

  • In pratica ,qual è la sintassi in sql server per sovrascrivere un database precedente?


    Aggiungi la clausola WITH INIT al comando di backup. Occhio che se il backup fallisce, ti perdi anche la copia precedente! La soluzione migliore è di eseguire un backup con un nuovo nome (ad esempio accodando data e ora). Se l'operazione va a buon fine, allora puoi eventualmente decidere di eliminare il backup precedente (meglio mantenere online una retention di x backup set).

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    • Contrassegnato come risposta NikkySixx venerdì 14 maggio 2010 08:33
    venerdì 14 maggio 2010 08:20
    Moderatore
  • Ciao,
    forse volevi scrivere:
    backup database NomeDatabase to disk = 'd:\NomeFile.Bak'

    Devi considerare il fatto che l'istruzione backup database viene eseguita lato server quindi quel d:\ deve essere un percorso che il server può vedere. Ovviamente non puoi passare un percorso fisico relativo al client, come fa il server a sapere quali unità disco ha il client?
    Tu dal tuo client non ti sogneresti di fare Dir C:\ per vedere i files che ci sono nel disco C: del server.

    Per copiare il backup sul dispositivo usb, fai eseguire il backup che di default va sulla risorsa di rete, poi lato cliente con vb, esegui la copia del file dalla risorsa di rete al dispositivo usb. Ovviamente il client deve vedere la risorsa di rete su cui viene memorizzato il file di backup

    Ciao
    Giorgio Rancati

    • Contrassegnato come risposta NikkySixx giovedì 13 maggio 2010 15:18
    giovedì 13 maggio 2010 13:40
    Moderatore
  • vedi esempio in
    Metodo File.Copy (String, String)
    http://msdn.microsoft.com/it-it/library/c6cfw35a(VS.80).aspx

    poi se hai bisogno di chiarimenti su questo argomento conviene chiedere su:
    http://social.microsoft.com/Forums/it-IT/visualbasicit/threads

    Ciao
    Giorgio Rancati

    • Contrassegnato come risposta NikkySixx venerdì 14 maggio 2010 08:33
    giovedì 13 maggio 2010 14:39
    Moderatore

Tutte le risposte

  • Ciao,

    se mostri il procedimento che usi per salvare il backup sul dispositivo usb, che immagino sia una periferica del client, si potrebbe capire dove sbagli
    :-)
    Giorgio Rancati

    giovedì 13 maggio 2010 10:15
    Moderatore
  • Ciao :)  richiamo sql server usando questa sintassi tramite vb.net

    backup database NomeDatabase to disk = d:\

    giovedì 13 maggio 2010 13:16
  • Ciao,
    forse volevi scrivere:
    backup database NomeDatabase to disk = 'd:\NomeFile.Bak'

    Devi considerare il fatto che l'istruzione backup database viene eseguita lato server quindi quel d:\ deve essere un percorso che il server può vedere. Ovviamente non puoi passare un percorso fisico relativo al client, come fa il server a sapere quali unità disco ha il client?
    Tu dal tuo client non ti sogneresti di fare Dir C:\ per vedere i files che ci sono nel disco C: del server.

    Per copiare il backup sul dispositivo usb, fai eseguire il backup che di default va sulla risorsa di rete, poi lato cliente con vb, esegui la copia del file dalla risorsa di rete al dispositivo usb. Ovviamente il client deve vedere la risorsa di rete su cui viene memorizzato il file di backup

    Ciao
    Giorgio Rancati

    • Contrassegnato come risposta NikkySixx giovedì 13 maggio 2010 15:18
    giovedì 13 maggio 2010 13:40
    Moderatore
  • Si esatto.Quest idea della copia mi piace e ha senso :D

    sebbene non abbia la piu pallida idea di come si faccia...ma temo sia un po off-topic

     

    giovedì 13 maggio 2010 14:17
  • vedi esempio in
    Metodo File.Copy (String, String)
    http://msdn.microsoft.com/it-it/library/c6cfw35a(VS.80).aspx

    poi se hai bisogno di chiarimenti su questo argomento conviene chiedere su:
    http://social.microsoft.com/Forums/it-IT/visualbasicit/threads

    Ciao
    Giorgio Rancati

    • Contrassegnato come risposta NikkySixx venerdì 14 maggio 2010 08:33
    giovedì 13 maggio 2010 14:39
    Moderatore
  • La copia fa esattamente cio che volevo ti ringrazio, ma ho un piccolo (grande) problema.

    In pratica come mi hai suggerito viene fatto un backup temporaneo, prima della copia,su una cartella d:\backup\backup.bak

    Il problema è che ad ogni esecuzione di backup la sua dimensione cresce in proporzione al numero di salvataggi.

    Qual è la sintassi in sql server per sovrascrivere un database precedente? perchè attualmente ho questo caso

    Dopo la prima esecuzione di backup -> backup.bak  10 mb

    Dopo la seconda esecuzione di backup -> backup.bak 20 mb

    Ciao :)

    venerdì 14 maggio 2010 08:14
  • In pratica ,qual è la sintassi in sql server per sovrascrivere un database precedente?


    Aggiungi la clausola WITH INIT al comando di backup. Occhio che se il backup fallisce, ti perdi anche la copia precedente! La soluzione migliore è di eseguire un backup con un nuovo nome (ad esempio accodando data e ora). Se l'operazione va a buon fine, allora puoi eventualmente decidere di eliminare il backup precedente (meglio mantenere online una retention di x backup set).

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    • Contrassegnato come risposta NikkySixx venerdì 14 maggio 2010 08:33
    venerdì 14 maggio 2010 08:20
    Moderatore
  • Ciao e grazie,l accodamento di cui parli di data e ora e l eliminazione del backup,va fatta tramite sql server o tramite vb.net?
    venerdì 14 maggio 2010 08:24
  • Ciao e grazie,l accodamento di cui parli di data e ora e l eliminazione del backup,va fatta tramite sql server o tramite vb.net?


    La devi fare da vb quando componi la stringa con il nome del file .bak.

    Ciao!


    Lorenzo Benaglia
    Microsoft MVP - SQL Server
    http://blogs.dotnethell.it/lorenzo
    http://social.microsoft.com/Forums/it-IT/sqlserverit
    venerdì 14 maggio 2010 08:26
    Moderatore
  • Ciao,

    la sintassi per azzerare il file di backup è

    Backup Database NomeDB To Disk = 'D:\quel che l'è' WITH INIT

    Trovi tutte le info su: BACKUP (Transact-SQL) http://msdn.microsoft.com/en-us/library/ms186865.aspx

    Ciao
    Giorgio Rancati

    venerdì 14 maggio 2010 08:28
    Moderatore
  • Perfetto ,ora ho solo il problema che se sovrascrivo il vecchio file di destinazione, tramite la sintassi file copy di vb mi va in crash il tutto :D ma sono completamente off topic

    Grazie ancora ;)

    venerdì 14 maggio 2010 08:32