Como habilitar ou desabilitar um protocolo de rede de servidor (SQL Server PowerShell)

Os protocolos TCP e de rede de pipes nomeados são instalados pela Instalação do SQL Server, mas talvez não estejam habilitados. Os protocolos de rede podem ser habilitados ou desabilitados usando os seguintes scripts PowerShell ou o SQL Server Configuration Manager. Você deve parar e reiniciar o Mecanismo de banco de dados do SQL Server para que as alterações do protocolo entrem em vigor.

Para obter informações gerais sobre o PowerShell, consulte Visão geral do SQL Server PowerShell. Para obter mais informações sobre como gerenciar protocolos usando o SQL Server Configuration Manager, consulte Como habilitar ou desabilitar um protocolo de rede de servidor (SQL Server Configuration Manager).

O utilitário SQL Server PowerShell (SQLPS.exe) inicia uma sessão do PowerShell com o provedor do SQL Server PowerShell e cmdlets carregados e registrados. Ao executar o PowerShell (PowerShell.exe), em vez do SQL Server PowerShell, primeiro execute as instruções a seguir para carregar manualmente os assemblies necessários.

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

Os scripts a seguir habilitam os protocolos. Para desabilitar protocolos, defina as propriedades IsEnabled como $false.

Para habilitar um protocolo de rede de servidor usando o SQL Server PowerShell

  1. Usando as permissões de administrador, abra um prompt de comando.

  2. Para iniciar o SQL Server PowerShell, no prompt de comando, digite sqlps.exe.

  3. Execute as instruções a seguir para habilitar os protocolos TCP e de pipes nomeados. Substitua <computer_name> pelo nome do computador que está executando o SQL Server. Se estiver configurando uma instância nomeada, substitua MSSQLSERVER pelo nome da instância.

    $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
    

Para configurar os protocolos para o computador local

  • Quando o script é executado localmente e configura o computador local, o SQL Server PowerShell pode tornar o script mais flexível determinando o nome do computador local dinamicamente. Para recuperar o nome de computador local, substitua a linha que define a variável $uri pela linha a seguir.

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

Para reiniciar o Mecanismo de Banco de Dados usando o SQL Server PowerShell

  • Depois de habilitar ou desabilitar os protocolos, você deve parar e reiniciar o Mecanismo de Banco de Dados para que a alteração entre em vigor. Execute as instruções a seguir para parar e iniciar a instância padrão usando o SQL Server PowerShell. Para parar e iniciar uma instância nomeada, substitua 'MSSQLSERVER' por '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