executescalar mysql_ExecuteScalar

executescalar mysql_ExecuteScalar这两个答案和一点点思考使我想到了一个接近答案的东西。首先再澄清一下:该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQLServer2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报…

大家好,又见面了,我是你们的朋友全栈君。

这两个答案和一点点思考使我想到了一个接近答案的东西。

首先再澄清一下:

该应用程序是用C#(2.0+)编写的,并使用ADO.NET与SQL Server 2005进行通信。镜像设置是托管主体和镜像的两个W2k3服务器以及托管作为监视器的快速实例的第三个服务器。这样做的好处是,故障转移对于使用数据库的应用程序几乎是透明的,它将对某些连接引发错误,但从根本上讲一切都会很好地进行。是的,我们得到了奇怪的误报,但总的来说是让系统以最少的麻烦进行工作,而镜像确实很好地实现了这一点。

此外,问题不在于严重的服务器故障-通常更明显,但由于其他原因(参考上述错误肯定)会进行故障转移,因为由于多种原因,我们确实有几项无法进行故障转移无论如何,我们可以看看是否可以识别出误报的情况。

因此,鉴于以上所述,仅检查框的状态还不够,并且追逐事件日志可能过于复杂-事实证明,答案非常简单:sp_helpserver

sp_helpserver返回的第一列是服务器名称。如果您定期运行请求,并保存前一个服务器名称并每次进行比较,则可以确定何时进行了更改,然后采取适当的措施。

以下是一个演示控制台原理的控制台应用程序-尽管它需要做一些工作(例如,每次连接都应该是非池化的,并且每次都是新连接),但目前已经足够了(因此,我将其作为“答案”) )。参数是Principal,Mirror,Database

using System;

using System.Data.SqlClient;

namespace FailoverMonitorConcept

{

class Program

{

static void Main(string[] args)

{

string server = args[0];

string failover = args[1];

string database = args[2];

string connStr = string.Format(“Integrated Security=SSPI;Persist Security Info=True;Data Source={0};Failover Partner={1};Packet Size=4096;Initial Catalog={2}”, server, failover, database);

string sql = “EXEC sp_helpserver”;

SqlConnection dc = new SqlConnection(connStr);

SqlCommand cmd = new SqlCommand(sql, dc);

Console.WriteLine(“Connection string: ” + connStr);

Console.WriteLine(“Press any key to test, press q to quit”);

string priorServerName = “”;

char key = ‘ ‘;

while(key.ToString().ToLower() != “q”)

{

dc.Open();

try

{

string serverName = cmd.ExecuteScalar() as string;

Console.WriteLine(DateTime.Now.ToLongTimeString() + ” – Server name: ” + serverName);

if (priorServerName == “”)

{

priorServerName = serverName;

}

else if (priorServerName != serverName)

{

Console.WriteLine(“***** SERVER CHANGED *****”);

Console.WriteLine(“New server: ” + serverName);

priorServerName = serverName;

}

}

catch (System.Data.SqlClient.SqlException ex)

{

Console.WriteLine(“Error: ” + ex.ToString());

}

finally

{

dc.Close();

}

key = Console.ReadKey(true).KeyChar;

}

Console.WriteLine(“Finis!”);

}

}

}

如果没有a)提出问题,然后b)得到使我真正想到的答案,我就不会到达这里

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/147328.html原文链接:https://javaforall.net

(0)
上一篇 2022年6月30日 下午2:36
下一篇 2022年6月30日 下午2:36


相关推荐

  • MyBatis 为什么需要通用 Mapper ?

    MyBatis 为什么需要通用 Mapper ?在早期项目文档中有过类似主题的内容 但是最近我自己看文档的时候发现一个问题 文档虽然很详细 但是并不适合初次接触的人 为了方便第一次听说 第一次尝试的开发人员了解通用 Mapper 补充此文档

    2026年3月18日
    2
  • CSDN提现规则说明(更新:支持实时提现)

    提现范围1、博客(付费专栏、VIP可见文章)、学院讲师、必问、活动业务线等的收益进行合并提现;提现标准1、必须进行实名认证才可以进行提现;

    2022年4月12日
    62
  • kafka和flume的区别

    kafka和flume的区别1 kafka 和 flume 都是日志系统 kafka 是分布式消息中间件 自带存储 提供 push 和 pull 存取数据功能 flume 分为 agent 数据采集器 sourcechanne 2 kafka 做日志缓存应该是更为合适的 但是 flume 的数据采集部分做的很好 可以定制很多数据源 减少开发量 所以比较流行 flume kafka 模式 如果为了利用 flume 写 hdfs 的能力 也可以采用 kafka flume 的方式 采集层主要可以使用 Flume Kafka 两种技术 Flume Fl

    2026年3月18日
    3
  • PyCharm使用教程 — 6、代码运行

    PyCharm使用教程 — 6、代码运行代码运行编写好代码肯定是需要去运行的 在 Pycharm 中运行代码的方式有以下 1 右键 Run 运行直接在要运行的 py 文件中右键 点击 Run 即可 或者使用快捷键 Ctrl Shify F102 通过导航栏的 Run 执行如果之前执行过某个程序 在这里是可以看到的 选择要执行的程序 点击绿色的三角箭头即可运行 如果是一个新的程序 则点击 EditConfigur 进行配置 这个在前面的菜单栏 Run 章节中有讲过 3 通过 main 启动如果程序中有 main 函数 会在左侧有个绿色的三角箭

    2026年3月27日
    2
  • 认识Apache Bookkeeper

    认识Apache BookkeeperApacheBookke 简介 Apachebookke 是一个分布式 可扩展 容错 多副本 低延迟的存储系统 其提供了高性能 高吞吐的存储能力 Bookkeeper 实现了 append 方式的写操作 Bookkeeper 有一个非常成功的应用案例 apachepulsar 是近年雅虎开源的一个 MQ pulsar 相对于 kafka 来说 在存储上有优势 kafka 的单个 partition 的存储容量受到了部署 kafka 的 broker 的硬盘容量限制 当有大量的数据需要 MQ 支持时 partitio

    2026年3月17日
    2
  • 数据结构之哈希表(hash)代码

    哈希的关键在于算法,呵呵,我这算法,不说了,见笑了。哈希在内核中用得非常之广,准确来说是链表,下面是一个相对简单的例子,希望能对大家理解hash有些帮助。/************************************************************************************************************** **文

    2022年4月8日
    85

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号