首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >命名实例的静态DAC端口

命名实例的静态DAC端口
EN

Database Administration用户
提问于 2018-05-10 14:21:26
回答 1查看 1.1K关注 0票数 5

使用SQL 2016企业版

默认实例将侦听1433,DAC端口将侦听TCP 1434。SQL浏览器将监听UDP 1434。任何后续命名实例都将从49152到65535范围内的窗口获得动态分配端口,其DAC端口也是如此。对那些命名实例的连接请求(包括DAC)将调用SQL浏览器并告知端口号。

可以使用Server配置工具将命名实例的端口更改为静态端口号,但没有选项将DAC端口设置为静态端口号。

当我向网络团队建议,我希望为远程DAC连接开放整个端口范围时,他们并不那么热情。

是否有任何方法将DAC端口设置为命名实例的已知静态端口号?

EN

回答 1

Database Administration用户

回答已采纳

发布于 2018-05-10 14:57:00

摘自微软支持站点

若要为专用管理员连接(DAC)配置静态端口,必须更新与实例对应的注册表项。例如,注册表项可能是: HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\MSSQL.X\MSSQLServer\SuperSocketNetLib\AdminConnection\Tcp注"MSSQL.X“中的"X”是一个数字,指示安装Server 2005实例的目录或Server 2008的实例名称。

TcpDynamicPorts条目更新为您希望使用的端口号。

尽管本文讨论的是Server 2008,但这适用于2005年及以上所有基于Windows的版本。Linux上的SQL Server使用了另一种机制,我还没有意识到这种机制。

要使更改生效,需要停止并启动Server实例。重新启动实例后,检查错误日志以获得以下消息,指示Server专用管理连接使用的是哪个端口:

为远程监听xxxx端口建立了专用的管理连接支持。

我使用此脚本配置远程DAC端口:

代码语言:javascript
复制
/*
    Reads the instance's registry settings (via xp_instance_regread
    as opposed to xp_regread), to determine if the Dedicated 
    Aministrator Connection is configured to use the desired TCP 
    port number.

    2022-11-29  Hannah Vernon
*/
SET NOCOUNT ON;
SET XACT_ABORT ON;

DECLARE @desired_dac_port   varchar(11)     = '1432';

IF NOT EXISTS
(
    SELECT 
        1 
    FROM 
        [sys].[configurations] sc
    WHERE  
        sc.[name] = N'show advanced options' 
        AND sc.[value] = 1
)
BEGIN
    PRINT N'Enabling "Show Advanced Options" configuration.';
    EXEC sys.sp_configure 
          @configname = 'show advanced options'
        , @configvalue = 1;
    RECONFIGURE;
END;

IF NOT EXISTS
(
    SELECT 
        1 
    FROM 
        [sys].[configurations] sc
    WHERE  
        sc.[name] = N'remote admin connections' 
        AND sc.[value] = 1
)
BEGIN
    PRINT N'Enabling Remote Dedicated Admin Connections.';
    EXEC sys.sp_configure 
          @configname = 'remote admin connections'
        , @configvalue = 1;
    RECONFIGURE;
END
ELSE
BEGIN
    PRINT N'Remote Dedicated Admin Connections are already enabled.';
END;

DROP TABLE IF EXISTS #dac_port;
CREATE TABLE #dac_port
(
      [value]   nvarchar(128)       NOT NULL
    , [data]    varchar(255)        NULL
);

INSERT INTO #dac_port
(
      [value]
    , [data]
)
EXEC sys.xp_instance_regread 
      @rootkey = N'HKEY_LOCAL_MACHINE'
    , @key = N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\AdminConnection\Tcp'
    , @value = N'TcpDynamicPorts';

IF NOT EXISTS
(
    SELECT *
    FROM #dac_port dp
    WHERE dp.[value] = N'TcpDynamicPorts'
        AND dp.[data] = @desired_dac_port
)
BEGIN
    PRINT N'Setting Dedicated Admin Connection to use port ' + @desired_dac_port;

    EXEC sys.xp_instance_regwrite 
          @rootkey = N'HKEY_LOCAL_MACHINE'
        , @key = N'SOFTWARE\Microsoft\Microsoft SQL Server\MSSQLServer\SuperSocketNetLib\AdminConnection\Tcp'
        , @value_name = N'TcpDynamicPorts'
        , @type = N'REG_SZ'
        , @value = @desired_dac_port;
END
ELSE
BEGIN
    PRINT N'The dedicated admin connection is already configured on port ' + @desired_dac_port;
END;
票数 10
EN
页面原文内容由Database Administration提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://dba.stackexchange.com/questions/206367

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档