2010-03-09 18 views
3

Je sais que c'est plus probable une question simple, mais lorsque vous restaurez une base de données à l'intérieur studio de gestion de SQL, vous pouvez définir l'intervalle de mise à jour avec les statistiquesTrouver la restauration des progrès du serveur SQL à l'intérieur C#

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

Si Je voulais exécuter cette ligne de code à l'intérieur de C# comment pourrais-je obtenir les progrès? Actuellement, j'utilise simplement System.Data.SqlClient.SqlCommand.ExecuteNonQuery() mais je n'arrive pas à comprendre comment progresser.

En outre, si c'est plus rapide, l'utilisation de l'espace de noms Microsoft.SQLServer est acceptable. ExecuteNonQuery va seulement retourner une fois l'opération terminée.

Répondre

3

Il pourrait y avoir un moyen de surveiller ses progrès d'une connexion sur un autre thread ou d'utiliser un appel asynchrone, mais vous pouvez aussi envisager d'utiliser SMO, qui fournit un moyen d'enregistrer callbacks voir http://msdn.microsoft.com/en-us/library/microsoft.sqlserver.management.smo.restore.aspx et http://msdn.microsoft.com/en-us/library/ms162133.aspx avec PercentComplete event

+0

Savez-vous si le SDK SQL2008 est rétrocompatible avec les 2005 et 2000 serveurs ou est le SDK SQL2000 avant compatible. (J'ai besoin d'administrer une instance de 2000 et 2005 sur le même serveur et un point dans le futur une instance de 2008) –

+0

@ Scott Chamberlain J'utiliserais le dernier SDK et je testerais les anciens serveurs. Cela a la plus grande probabilité de succès. Le SDK 2000 n'avait même pas SMO (il avait quelque chose appelé SQL-DMO). –

+0

@Scott Chamberlain Dans SQL Server 2000, pour la solution de Remus, vous devrez utiliser la table sysprocesses, car ce DMV n'était pas disponible dans cette version. –

4

Avant démarrer l'opération obtenir l'ID de session de connexion:

SELECT @@SPID; 

Ensuite, démarrez votre demande de sauvegarde. A partir d'une autre connexion, requête sys.dm_exec_requests et regarder percent_complete pour la session qui exécute l'instruction RESTORE:

Pourcentage des travaux réalisés pour les commandes suivantes:

  • ALTER INDEX REORGANIZE
  • option AUTO_SHRINK avec ALTER DATABASE
  • BACKUP DATABASE
  • CREATE INDEX
  • DBCC CHECKDB
  • DBCC CHECKFILEGROUP
  • DBCC CHECKTABLE
  • DBCC INDEXDEFRAG
  • DBCC SHRINKDATABASE
  • DBCC SHRINKFILE
  • kill (Transact-SQL)
  • RESTORE DATABASE
  • STATISTIQUES DE MISE À JOUR .