【问题标题】:Is there a way to ping MSSQL database before connecting to it有没有办法在连接到它之前 ping MSSQL 数据库
【发布时间】:2017-04-20 22:12:57
【问题描述】:

与数据库的连接非常脆弱,所以我尝试在链接之前测试连接。我找到了pg_connectmysql_pinghow-do-i-ping-the-mysql-db-and-reconnect-using-pdo,但没有一个与MSSQL 或我可以使用的函数有任何关系。

有什么方法可以在我连接到数据库之前对其进行测试?

【问题讨论】:

  • “与数据库的连接非常脆弱” 你为什么这么说?
  • 为什么不检查初始连接是否正常?
  • 你的意思是 ping 机器吗?这可能会告诉您机器已启动,但并不一定意味着 SQL Server 正在运行。要测试 SQL 是否正在运行,尝试连接它并等待连接或超时实际上是一种合理的方法。或者您可以使用 telnet,如下所示:dba.stackexchange.com/questions/23704/…。下面是一些从 PHP 调用 telnet 的想法:google.co.uk/…
  • @PedroLobito 在这种情况下,fragile 表示它不断中断,然后打开,然后关闭等。
  • 所以,您不需要 ping 数据库,而是修复 my.cnf

标签: php sql-server


【解决方案1】:

您可以将超时设置为一个非常小的数字并调用类似

SELECT 1;

SELECT GETDATE();

看看,如果有结果回来......

如果连接中断,那么这些微小的请求也应该中断。

如果 fragile 并不意味着 broken,您可以测量一个标准调用并比较执行速度...

【讨论】:

    【解决方案2】:

    您可以尝试 ping 服务器 + 相应端口以查看服务器是否接受连接。

    $host = '127.0.0.1'; // ip address, could be localhost 
    $port = 1433; // your mssql port
    $timeout = 1; //time to wait in seconds for response
    
    if($fp = fsockopen($host,$port,$errCode,$errStr,$timeout))
    {   
       // Server is OK - responding
    } else {
       // Server not respoded on given port in given time limit
    } 
    
    fclose($fp);
    

    【讨论】:

    • 我创建了一个函数来测试服务器,但是数据库存储在其他地方,我无法使用fsockopen ping 数据库所在的 IP 地址。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-03-15
    相关资源
    最近更新 更多