Sto facendo un backup di un grande database in un file batch dos (non powershell), usando sqlcmd (sqlcmd reference). Ci vogliono circa 30 minuti.Come mostrare i progressi in un file batch usando sqlcmd?
sqlcmd -S 127.0.0.1 -d DbNameHere -E -Q "BACKUP DATABASE [DbNameHere] TO DISK = N'c:\Temp\MyBackup.bak' WITH COPY_ONLY, NOFORMAT, INIT, NAME = N'My Full Database Backup', SKIP, NOREWIND, NOUNLOAD, STATS = 10"
Se si esegue il comando BACKUP in SQL Management Studio, si ottiene l'output, come accade:
10 percent processed.
20 percent processed.
...
In un batch DOS, nella migliore delle ipotesi, ho tutte le 10,20, 30..100 tutti visualizzati sullo schermo contemporaneamente, una volta completato il backup.
ho provato a giocare con questi parametri, ma ancora non si ottiene l'aggiornamento di avanzamento desiderata sullo schermo:
-m-1
-V 1
-r1
Questi messaggi di avanzamento sono tamponati, e che potrebbe essere parte del problema. Questo è dicsussed qui per esempio: How do I flush the PRINT buffer in TSQL? Ma ho un unico comando a lunga esecuzione, non più comandi.
È possibile eseguire un'istruzione SQL separata altrove, e che ti dice il progresso e anche il tempo finito stimato:
SELECT session_id as SPID, command, a.text AS Query, start_time, percent_complete, dateadd(second,estimated_completion_time/1000, getdate()) as estimated_completion_time
FROM sys.dm_exec_requests r CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) a
WHERE r.command in ('BACKUP DATABASE','RESTORE DATABASE')
Ma da usare che, avrei dovuto creare un secondo file batch (con un sqlcmd che esegue questa istruzione), lo apre in una nuova finestra poco prima di eseguire il backup sqlcmd e lo esegue in un ciclo su un timer di 1 minuto, magari, e termina quando il backup è terminato. Tutto in gruppo. Idealmente, preferirei conservare tutto in un unico file batch! L'output dei messaggi di avanzamento standard sarebbe molto più semplice!
Qualche idea?
Mostra l'avanzamento immediatamente se si digitano i comandi in modo interattivo dopo l'esecuzione di 'sqlcmd -S 127.0.0.1'? – wOxxOm
wOxxOm, se corro correntemente 'sqlcmd -S 127.0.0.1', dopo' 1> 'Digito il comando backup, dopo' 2> 'I digita' GO' quindi '[return]', il progresso non viene mostrato come succede, è tutto visualizzato in un colpo solo dopo il completamento dell'intera istruzione di backup. –