Как включить или отключить сетевой протокол сервера (SQL Server PowerShell)

Протокол TCP и протокол именованных каналов устанавливаются с помощью программы установки SQL Server, но могут быть не включены. Сетевые протоколы можно включить или отключить с использованием следующих сценариев PowerShell или с использованием диспетчера конфигурации SQL Server. Чтобы изменения протокола вступили в силу, необходимо остановить и перезапустить компонент SQL Server Database Engine.

Общие сведения о PowerShell см. в разделе Общие сведения о SQL Server PowerShell. Дополнительные сведения об управлении протоколами с использованием диспетчера конфигурации SQL Server см. в разделе Как включить или отключить протокол SNP (диспетчер конфигурации SQL Server).

Программа SQL Server PowerShell (SQLPS.exe) запускает сеанс PowerShell с помощью поставщика SQL Server PowerShell, а также загруженных и зарегистрированных командлетов. При запуске PowerShell (PowerShell.exe) вместо SQL Server PowerShell сначала выполните следующие инструкции, чтобы вручную загрузить необходимые сборки.

# Load the assemblies
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.Smo")
[reflection.assembly]::LoadWithPartialName("Microsoft.SqlServer.SqlWmiManagement")

Следующие сценарии включают протоколы. Чтобы отключить протоколы, установите для свойства IsEnabled значение $false.

Включение сетевого протокола сервера с использованием SQL Server PowerShell

  1. Откройте командную строку с использованием разрешений администратора.

  2. В командной строке введите sqlps.exe, чтобы запустить SQL Server PowerShell.

  3. Выполните следующие инструкции, чтобы включить протокол TCP и протокол именованных каналов. Замените <computer_name> именем компьютера, на котором работает SQL Server. Если настраивается именованный экземпляр, замените MSSQLSERVER именем экземпляра.

    $smo = 'Microsoft.SqlServer.Management.Smo.'
    $wmi = new-object ($smo + 'Wmi.ManagedComputer').
    
    # List the object properties, including the instance names.
    $Wmi
    
    # Enable the TCP protocol on the default instance.
    $uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
    $Tcp = $wmi.GetSmoObject($uri)
    $Tcp.IsEnabled = $true
    $Tcp.Alter()
    $Tcp
    
    # Enable the named pipes protocol for the default instance.
    $uri = "ManagedComputer[@Name='<computer_name>']/ ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Np']"
    $Np = $wmi.GetSmoObject($uri)
    $Np.IsEnabled = $true
    $Np.Alter()
    $Np
    

Настройка протоколов на локальном компьютере

  • Если сценарий запускается локально и настраивает локальный компьютер, с помощью SQL Server PowerShell можно сделать сценарий более гибким, динамически определяя имя локального компьютера. Для получения имени локального компьютера замените строку, устанавливающую переменную $uri, следующей строкой.

    $uri = "ManagedComputer[@Name='" + (get-item env:\computername).Value + "']/ServerInstance[@Name='MSSQLSERVER']/ServerProtocol[@Name='Tcp']"
    

Перезапуск компонента Database Engine с использованием SQL Server PowerShell

  • После включения или отключения протоколов необходимо остановить и перезапустить компонент Database Engine, чтобы эти изменения вступили в действие. Выполните следующие инструкции, чтобы остановить и запустить экземпляр по умолчанию с использованием SQL Server PowerShell. Чтобы остановить и запустить именованный экземпляр, замените 'MSSQLSERVER' на 'MSSQL$<instance_name>'.

    # Get a reference to the ManagedComputer class.
    CD SQLSERVER:\SQL\<computer_name>
    $Wmi = (get-item .).ManagedComputer
    # Get a reference to the default instance of the Database Engine.
    $DfltInstance = $Wmi.Services['MSSQLSERVER']
    # Display the state of the service.
    $DfltInstance
    # Stop the service.
    $DfltInstance.Stop();
    # Wait until the service has time to stop.
    # Refresh the cache.
    $DfltInstance.Refresh(); 
    # Display the state of the service.
    $DfltInstance
    # Start the service again.
    $DfltInstance.Start();
    # Wait until the service has time to start.
    # Refresh the cache and display the state of the service.
    $DfltInstance.Refresh(); $DfltInstance