2011-04-14 77 views
4

我的应用程序同时连接到3个SQL服务器和5个数据库。我需要在状态栏上显示状态{running|stopped|not found}SQL Server状态监视器

任何想法/代码示例,我可以在这里使用?此代码不应影响应用程序的速度或SQL Server的开销。

菩提

回答

1

我想你应使用WMI(使用ServiceController类(使用this构造函数)。基本上查询sql server驻留的服务器并检查其状态。

下面的例子是假设您的应用程序是用C#:

ServiceController sc = new ServiceController("MSSQLSERVER", serverName); 
string status = sc.Status.ToString(); 
+0

那些SQL服务器没有在我的机器上运行,它们来自本地网络上的服务器,我认为我们不能使用这个... – 2011-04-25 04:14:25

+0

是的,即使服务位于其他机器上,您也可以使用它。您必须在运行服务的计算机上拥有适当的权限。 – 2011-04-25 16:56:45

+0

您可以使用模拟或将权限授予您需要运行该应用程序的每个用户。查看此页面以获取所需权限的信息:http://www.microsoft.com/resources/documentation/windows/xp/all/proddocs/en-us/sys_srv_permissions.mspx?mfr=true – 2011-04-25 17:01:19

1

“此代码应该不会影响应用程序或开销的速度 到SQL 服务器”

这是一个薛定谔的猫的场景:为了了解当前状态对于给定的远程服务或进程,您必须将消息序列化到网络上,等待响应,反序列化并对其执行操作。所有这些都需要所涉及的所有机器的一些工作和资源。

但是,该工作可能在调用方的后台线程中完成,如果不经常调用,可能不会以任何可衡量的方式影响目标服务器。

您可以使用SMO (SQL Server Management Objects)连接到远程服务器,并且可以通过SQL管理工具执行几乎任何你可以做的任何事情,因为他们也使用SMO来施展他们的魔法。这是一个非常简单的API,可以在合适的人手中非常强大。

SMO确实要求您对您要监控的箱子拥有适当的权利。如果您没有/没有足够的权限,您可能需要让您友好的SQL amin团队发布一个简单的数据源,以暴露您需要的一些数据。

HTH。

+0

我希望这是SQL 2008引入的,不幸的是我仍然使用SQL 2000. – 2011-04-18 06:09:20

1

在连接(验证连接)或未能连接(验证无连接)时,应用程序中会有一些开销,但您可以通过非常快速地检查来防止等待时间。

+0

任何想法/代码显示如何做到这一点? – 2011-04-18 06:09:51

+0

我会运行像SELECT COUNT(ID)FROM Contacts这样的基本脚本。这将检查与数据库的连接,并且所有权限等都仍然可以。开销会很低,并且可以通过不频繁的轮询/检查进一步降低。 – 2011-04-21 14:51:01

0

我们用下面的SQL查询来检查status特定数据库的

SELECT 'myDatabase status is:' AS Description, ISNULL((select state_desc FROM sys.databases WITH (NOLOCK) WHERE name ='myDatabase'),'Not Found') AS [DBStatus] 

这应该有非常小的开销,尤其是当与类似背景或异步线程的最佳实践配对

0

完全公开,我的Cotega

如果你有兴趣在服务做到这一点的创始人,我们的服务允许SQL监测服务器运行时间和性能。此外,您可以设置数据库不可用,性能降低,数据库大小或用户数问题等发生的通知。