none
使用sys.dm_os_ring_buffers查看链接,SQLSERVER为什么也能记录链接情况 RRS feed

  • 问题

  • 使用下面的sql语句来查看曾经链接过sqlserver的链接

    WITH RingBufferConnectivity as
    (	SELECT
    		records.record.value('(/Record/@id)[1]', 'int') AS [RecordID],
    		records.record.value('(/Record/ConnectivityTraceRecord/RecordType)[1]', 'varchar(max)') AS [RecordType],
    		records.record.value('(/Record/ConnectivityTraceRecord/RecordTime)[1]', 'datetime') AS [RecordTime],
    		records.record.value('(/Record/ConnectivityTraceRecord/SniConsumerError)[1]', 'int') AS [Error],
    		records.record.value('(/Record/ConnectivityTraceRecord/State)[1]', 'int') AS [State],
    		records.record.value('(/Record/ConnectivityTraceRecord/Spid)[1]', 'int') AS [Spid],
    		records.record.value('(/Record/ConnectivityTraceRecord/RemoteHost)[1]', 'varchar(max)') AS [RemoteHost],
    		records.record.value('(/Record/ConnectivityTraceRecord/RemotePort)[1]', 'varchar(max)') AS [RemotePort],
    		records.record.value('(/Record/ConnectivityTraceRecord/LocalHost)[1]', 'varchar(max)') AS [LocalHost]
    	FROM
    	(	SELECT CAST(record as xml) AS record_data
    		FROM sys.dm_os_ring_buffers
    		WHERE ring_buffer_type= 'RING_BUFFER_CONNECTIVITY'
    	) TabA
    	CROSS APPLY record_data.nodes('//Record') AS records (record)
    )
    SELECT RBC.*, m.text
    FROM RingBufferConnectivity RBC
    LEFT JOIN sys.messages M ON
    	RBC.Error = M.message_id AND M.language_id = 1033
    WHERE RBC.RecordType='Error' --Comment Out to see all RecordTypes
    ORDER BY RBC.RecordTime DESC
    

    SQLSERVER是暴露在公网的,但是做了端口映射,公网的端口是23313,内网端口是1433

    sql语句查询出来的结果

    SQLSERVER错误日志里的某一条记录

    如果公网连进来,应该链接23313这个端口,才能链接sqlserver,但是为什么人家从50490、1731、1424这些端口链接进来,sqlserver也可以记录呢?


    2014年5月5日 2:27

答案

  • Hi 桦仔,

    我还是建议您能收一下Netmon 的日志看一下,如果您确实可以从Netmon的日志中看到连接时从50490、1731、1424这些端口进来的,那么这个问题可以归结为网络相关的问题,您可以在Network相关的Forum咨询,或者询问一下华为的支持,硬件防火墙具体是如何工作的。

    谢谢。

    Doris JI

    2014年5月19日 5:43

全部回复

  • Hi 桦仔,

    我建议您可以收一个Network Monitor的日志来查看从远端连进SQL Server的连接的具体信息。

    我尝试从我的10.172.19.57这台服务器访问SQL Server的服务器(IP:10.172.18.238 Port:58516),连接的时候我制造了一个login failure 的18456的报错。

    从sys.dm_os_ring_buffers中我们可以看到RemotePort=58164; RemoteHost=10.172.19.57.

    对应Netmon Monitor的日志,可以很清楚的看到两端的IP以及Port都是相对应的。

    如果说在您这边的Network Monitor日志中也可以看到从50490,1731,1424这些remote port访问SQL Server所在的服务器。那么可能问题出现端口映射。

    谢谢。

    Doris JI

    2014年5月8日 6:40
  • 数据库在内网,防火墙做了端口映射的,用的是华为的硬件防火墙,但是开的端口并没有50490、1731、1424这些端口,为什么会看到这些端口呢?请问
    2014年5月8日 8:54
  • Ring buffer records every sql connection attempt, success or failure.
    2014年5月11日 21:22
  • 我知道,但是端口都不正确,他怎么链接进来呢?
    2014年5月12日 2:40
  • Attempted and failed for connection.
    2014年5月12日 2:54
  • Hi 桦仔,

    我还是建议您能收一下Netmon 的日志看一下,如果您确实可以从Netmon的日志中看到连接时从50490、1731、1424这些端口进来的,那么这个问题可以归结为网络相关的问题,您可以在Network相关的Forum咨询,或者询问一下华为的支持,硬件防火墙具体是如何工作的。

    谢谢。

    Doris JI

    2014年5月19日 5:43
  • 好的     
    2014年5月19日 5:48