3

これはおそらく単純な質問ですが、SQL Management Studio内からデータベースを復元する場合は、統計情報を使用して更新間隔を設定できます。

RESTORE DATABASE [test] FROM  DISK = N'C:\Program Files\Microsoft SQL Server\MSSQL.1\MSSQL\Backup\test.bak' WITH  FILE = 1,  NOUNLOAD,  STATS = 10

そのコード行をC#内から実行したい場合、どのように進行状況を取得できますか?現在は使用System.Data.SqlClient.SqlCommand.ExecuteNonQuery()しているだけですが、進捗状況がわかりません。

また、それよりも高速な場合は、Microsoft.SQLServer名前空間を使用することもできます。

4

2 に答える 2

5

操作を開始する前に、接続セッションIDを取得します。

SELECT @@SPID;

次に、バックアップ要求を開始します。sys.dm_exec_requests別の接続から、restoreステートメントを実行するセッションのpercent_completeを照会して確認します。

次のコマンドで完了した作業の割合:

  • ALTER INDEXREORGANIZE
  • ALTERDATABASEを使用したAUTO_SHRINKオプション
  • バックアップデータベース
  • インデックスの作成
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCCチェックテーブル
  • DBCC INDEXDEFRAG
  • DBCC SHRINKDATABASE
  • DBCC SHRINKFILE
  • KILL(Transact-SQL)
  • データベースの復元
  • 統計を更新します。
于 2010-03-09T18:11:29.110 に答える
3

ExecuteNonQueryは、操作が完了した後にのみ返されます。別のスレッドの接続からの進行状況を監視したり、非同期呼び出しを使用したりする方法があるかもしれませんが、コールバックを登録する方法を提供するSMOの使用を検討することもできます。http://msdn.microsoft.com/enを参照してください。 -us / library/ microsoft.sqlserver.management.smo.restore.aspxおよびhttp://msdn.microsoft.com/en-us/library/ms162133.aspxwithPercentComplete event

于 2010-03-09T15:59:05.347 に答える