如何知道ac#程序中sql实例的状态

发布于 2024-12-13 19:43:46 字数 297 浏览 0 评论 0原文

我有一个数据库,一个镜像,处于高安全模式(目前使用见证服务器,但打算把他拿出来),这个数据库将用于存储ac#程序收集的数据。

我想知道如何在程序中检查所有 SQL 实例的状态并导致/强制进行手动故障转移。

有没有任何 C# API 可以帮助我解决这个问题?

信息:我使用sql server 2008

编辑:我知道我可以查询sys.database_mirroring,但为此我需要主体数据库启动并运行,我想联系每个sql实例并检查它们的状态。

I have one database with one mirror in high-safety mode (using a witness server at the moment but planing to take him out), this database will be used to store data gathered by a c# program.

I want to know how can I check in my program the state of all the SQL instances and to cause/force a manual failover.

is there any c# API to help me with this?

info: im using sql server 2008

edit: I know I can query sys.database_mirroring but for this I need the principal database up and runing, I would like to contact each sql instance and check their status.

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(2

べ繥欢鉨o。 2024-12-20 19:43:46

使用SQL Server 管理对象 (SMO)

SQL Server 管理对象 (SMO) 是一个对象集合,旨在对管理 Microsoft SQL Server 的各个方面进行编程。 SQL Server 复制管理对象 (RMO) 是封装 SQL Server 复制管理的对象集合。

我之前曾在托管应用程序中使用过 SMO - 效果很好。


要了解实例的状态,请使用 Server 对象 - 具有 StateStatus 属性。

Use SQL Server Management Objects (SMO).

SQL Server Management Objects (SMO) is a collection of objects that are designed for programming all aspects of managing Microsoft SQL Server. SQL Server Replication Management Objects (RMO) is a collection of objects that encapsulates SQL Server replication management.

I have used SMO in managed applications before - works a treat.


To find out the state of an instance, use the Server object - is has a State and a Status properties.

莫言歌 2024-12-20 19:43:46

经过一番尝试后,我发现了这个解决方案(我不知道这是一个正确的解决方案,所以请留下评论)

using Microsoft.SqlServer.Management.Smo.Wmi;

ManagedComputer mc = new ManagedComputer("localhost");
foreach (Service svc in mc.Services) {
    if (svc.Name == "MSSQL$SQLEXPRESS"){
        textSTW.Text = svc.ServiceState.ToString();
    }
    if (svc.Name == "MSSQL$TESTSERVER"){
        textST1.Text = svc.ServiceState.ToString();
    }
    if (svc.Name == "MSSQL$TESTSERVER3") {
        textST2.Text = svc.ServiceState.ToString();
    }
}

这样我只是在寻找服务的状态(正在运行/已停止)并且速度要快得多,我我错过了什么吗?

after playing around a bit I found this solution (i'm not if this is a proper solution, so leave comments plz)

using Microsoft.SqlServer.Management.Smo.Wmi;

ManagedComputer mc = new ManagedComputer("localhost");
foreach (Service svc in mc.Services) {
    if (svc.Name == "MSSQL$SQLEXPRESS"){
        textSTW.Text = svc.ServiceState.ToString();
    }
    if (svc.Name == "MSSQL$TESTSERVER"){
        textST1.Text = svc.ServiceState.ToString();
    }
    if (svc.Name == "MSSQL$TESTSERVER3") {
        textST2.Text = svc.ServiceState.ToString();
    }
}

this way i'm just looking for the state of the services (Running/Stoped) and is much faster, am I missing something?

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文