2012-07-05 25 views
0

您好,我正在使用以下代碼來恢復我的程序中的數據庫。ReadingProgress正在上傳的備份

SQLCMD =新的SqlCommand( 「還原數據庫DB1從磁盤= '」 & txtFileName.Text & 「' 替換爲」) sqlcmd.Connection = CON sqlcmd.ExecuteNonQuery()

此代碼是可以正常使用但我想基於恢復過程的進度顯示進度條。我怎麼能這樣做?

回答

0

無法準確知道備份文件的大小。你可以做的是運行備份命令之前,找出數據庫的大小,你可以大概猜測1GB可能需要1秒的備份和相應地顯示進度條

2

如果你正在運行此SQL 2005或更高版本,您可以使用以下查詢來監視還原操作的狀態。

SELECT 
    command, start_time, percent_complete, 
    CAST(((DATEDIFF(s,start_time,GetDate()))/3600) as varchar) + ' hour(s), ' 
     + CAST((DATEDIFF(s,start_time,GetDate())%3600)/60 as varchar) + 'min, ' 
     + CAST((DATEDIFF(s,start_time,GetDate())%60) as varchar) + ' sec' as running_time, 
    CAST((estimated_completion_time/3600000) as varchar) + ' hour(s), ' 
     + CAST((estimated_completion_time %3600000)/60000 as varchar) + 'min, ' 
     + CAST((estimated_completion_time %60000)/1000 as varchar) + ' sec' as est_time_to_go, 
    dateadd(second,estimated_completion_time/1000, getdate()) as est_completion_time, s.text 
FROM 
    sys.dm_exec_requests r 
    CROSS APPLY sys.dm_exec_sql_text(r.sql_handle) s 
WHERE 
    r.command in ('RESTORE DATABASE', 'BACKUP DATABASE', 'RESTORE LOG', 'BACKUP LOG', 'DBCC TABLE CHECK') 

您可以調整WHERE子句中的值來控制將返回狀態的操作。

+1

確認仍然適用於SQL 2013.非常感謝!如果在緩慢上傳的情況下對網絡驅動器進行了非常長時間的恢復,則可以使用它來查看它是否會很快完成,或者如果我不得不取消它以延續另一天。 – Demonslay335 2015-07-17 21:37:13