SQL 2000 e 2005 – Troubleshooting dei problemi di backup tramite SQLVDI con un semplice strumento

Capita spesso di incontrare problemi di backup di database di SQL Server quando vengono effettuati da software che utilizzano le interfacce SQLVDI (SQLVDI.DLL), che si manifestano sotto forma di errori del tipo:

>>>

2007-06-18 11:21:00.83 spid820 BackupVirtualDeviceFile::ClearError: failure on backup device 'VDI_DeviceID'. Operating system error 995(The I/O operation has been aborted because of either a thread exit or an application request.).

>>>

>>>

2007-06-18 11:21:00.87 spid820 Error: 18210, Severity: 16, State: 1.

2007-06-18 11:21:00.87 spid820 BackupVirtualDeviceFile::RequestDurableMedia: Flush failure on backup device 'VDI_ DeviceID .

Operating system error 995(The I/O operation has been aborted because of either a thread exit or an application request.)

>>>

ed altri simili.

In queste condizioni occorre immediatamente applicare le Fix previste per i due prodotti come suggerito negli articoli:

http://support.microsoft.com/kb/934396 (SQL 2005)
http://support.microsoft.com/kb/935465 (SQL 2000)

Fatto questo potrebbero presentarsi ulteriori messaggi di errori ed il backup fallire di nuovo: a tale scopo può tornare utile il semplice tool allegato che effettua un backup di un database, utilizzando le interfacce SQLVDI per creare un “Virtual Device” sul quale effettuare il backup. Il codice utilizzato è quello normalmente presente negli esempi forniti con il CD di SQL 2000, e compilato sia per SQL2000 (usa Isql) sia per SQL2005 32Bit e 64Bit (usa Osql); sono state apportate piccole modifiche per potere specificare sia il nome del server che il nome del database.

Per il suo utilizzo occorre aprire un Command Prompt e digitare:

simple b %servername% %databasename%

dove b indica l’operazione di backup, %servername% il nome del SQL Server al quale connettersi (SERVER\ISTANZA nel caso di una Named Instance) e %databasename% il nome del database sul quale eseguire il backup; la versione per SQL 2005 a 32Bit si chiama simple2005 mentre quella per SQL 2005 a 64Bit si chiama simple200564. Il salvataggio viene effettuato nella stessa cartella dalla quale si esegue il comando, per cui è bene sincerarsi di avere a disposizione spazio sufficiente in relazione alla dimensione del database sul quale si sta eseguendo il comando.

Il comando interno di BACKUP contiene le impostazioni predefinite per SQLVDI, ossia “BLOCKSIZE=4096, BUFFERCOUNT=1, MAXTRANSFERSIZE=65536”; se con questo semplice strumento (e con le impostazioni predefinite) il backup funziona correttamente, l’origine degli ulteriori errori che si ricevono utilizzando strumenti di terze parti vanno ricercati nel software stesso. Tipicamente i problemi vengono risolti modificando le impostazioni di BLOCKSIZE, che deve essere espresso in multipli di 1024, e BUFFERCOUNT nelle opzioni di configurazione del software utilizzato; per massimizzare il transfer rate durante il backup molto spesso vengono usate combinazioni dei due parametri che portano all'utilizzo di “blocchi” di dati da trasferire di dimensioni superiori rispetto alle capacità di tutta la catena di I/O coinvolta nel backup.

Mauro Munzi
Senior Support Engineer
Microsoft Enterprise SQL Support

SQLBACKUP.ZIP