Ao instalar o SQL Server, para que seja possível utilizá-lo em rede, você vai precisar ativar os serviços referentes a conexão e depois liberar as portas corretas do firewall.
Primeiro instale a versão do SQL Server, caso não tenha ainda. Sugerimos utilizar a versão Express, que é gratuita e atende a maioria das necessidades das microempresas. Estas instruções de configuração são para o contexto do Windows 7 ou Server 2012 ou mais recentes. Recomendamos como requisito mínimo o Windows 11 ou Server 2016. Pode ser necessário adaptar comandos ou instruções para sua versão específica.
Para ativar os serviços utilize o utilitário “Sql Server Configuration Manager” e revise se os protocolos que você deseja utilizar estão ativos. Geralmente é necessário apenas ativar com início automático o Sql Server Express e o Sql Browser. Ative o serviço de conexão TCP nestas configurações.
Em seguida, você só precisa abrir as regras do firewall do windows – em Firewall do Windows com Segurança Avançada – e criar estas três regras de permissão de entrada, liberando acesso:
- Para o programa sqlserv.exe que está em Arquivos de Programas, em uma subpasta do SQL (varia conforme a versão)
- SQL Server 2014 Express: C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Binn.
- SQL Server 2022 Express: C:\Program Files\Microsoft SQL Server\MSSQL16.SQLEXPRESS\MSSQL\Binn
- SQL Server 2022 Standard: C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Binn
- Para a porta TCP 1433
- Para a porta UDP 1434
Válido para os Windows à partir do Vista, inclusive Server. Para mais informações, verifique a ajuda da Microsoft.
Observação: talvez seu micro tenha outros programas de firewall, como o que vem com alguns programas de antivírus ou internet protection, neste caso você deverá consultar a documentação do seu firewall para fazer as liberações do programa e das portas.
Downloads do Sql Server:
Script para facilitar
Para simplificar, você pode apenas abrir um prompt de comando em modo admin no seu Windows e executar o código abaixo. Para conveniência você pode também pode salvar em um arquivo de comandos “.bat”.
Este código está ajustado para o Sql Server Express e Standard.
@echo off rem apaga e recria a regra TCP 1433 restrito à rede local netsh advfirewall firewall delete rule name="SQL SERVER TCP 1433" netsh advfirewall firewall add rule name="SQL SERVER TCP 1433" dir=in protocol=tcp action=allow localport=1433 remoteip=localsubnet profile=any rem apaga e recria a regra UDP 1434 restrito à rede local netsh advfirewall firewall delete rule name="SQL SERVER UDP 1434" netsh advfirewall firewall add rule name="SQL SERVER UDP 1434" dir=in protocol=udp action=allow localport=1434 remoteip=localsubnet profile=any rem apaga e recria a regra sqlserv.exe restrito à rede local netsh advfirewall firewall delete rule name="SQL SERVER sqlserv.exe" rem ******** Abaixo remova o comentário REM da linha correspondente à sua versão ******** rem ******** 1. Verifique se a sua instância nomeada é SQLEXPRESS ou MSSQLSERVER ou outra rem ******** 2. Verifique se a pasta de instalação do SQL está padrão ou se foi alterada e faça o ajuste rem -- SQL Server 2014 Express netsh advfirewall firewall add rule name="SQL SERVER sqlservr.exe" dir=in protocol=any action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL12.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" remoteip=localsubnet profile=any rem -- SQL Server 2016 Express rem netsh advfirewall firewall add rule name="SQL SERVER sqlservr.exe" dir=in protocol=any action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL13.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" remoteip=localsubnet profile=any rem -- SQL Server 2022 Express (confirme se é instância padrão ou SQLEXPRESS antes de usar) rem netsh advfirewall firewall add rule name="SQL SERVER sqlservr.exe" dir=in protocol=any action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL16.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" remoteip=localsubnet profile=any rem -- SQL Server 2022 Standard (confirme o nome da instância antes de usar) rem netsh advfirewall firewall add rule name="SQL SERVER sqlservr.exe" dir=in protocol=any action=allow program="C:\Program Files\Microsoft SQL Server\MSSQL16.MSSQLSERVER\MSSQL\Binn\sqlservr.exe" remoteip=localsubnet profile=any
Para migrar banco SQL server restaurado direto do *.mdf.
O banco de dados SQL fica salvo em arquivos *.mdf e os logs em *.ldf. O caminho normal para exportar/importar, por exemplo, via Sql Management Studio é exportar como *.bak e importar *.bak, isso restaura as estruturas, dados e permissões.
Mas em situações onde houve perda de acesso ao seu computador Windows, e o seu suporte de TI conseguiu o arquivo *.mdf e o *.ldf que estava na pasta DATA do SQL local, você pode conseguir restaurar manualmente. Isso vai depender do estado dos arquivos, permissões de acesso, versões de servidor e configurações; por exemplo, uma criptografia extra poderia tornar isso inviável.
Veja os scripts úteis abaixo e faça a sequência (testado em Sql Server 2022 express importando bancos desde Sql Server 2014 express):
- Copie os arquivos para o servidor novo: coloque o .mdf e o .ldf em uma pasta acessível ao serviço do SQL Server (ideal: a pasta padrão de dados da instância, algo como C:\Program Files\Microsoft SQL Server\MSSQL16.SQLEXPRESS\MSSQL\DATA).
- Verifique permissões: dê permissão total (Full Control) à conta de serviço do SQL Server (geralmente NT Service\MSSQL$SQLEXPRESS ou similar) nos arquivos copiados. Sem isso o attach falha com erro de acesso negado.
- Anexe o banco via T-SQL (mais confiável que a interface gráfica quando o log pode estar corrompido/desatualizado, mas ainda pode-se usar o Sql Management Studio em situação normal):
CREATE DATABASE [NomeDoBanco] ON (FILENAME = 'C:\...\NomeDoBanco.mdf'), (FILENAME = 'C:\...\NomeDoBanco_log.ldf') FOR ATTACH; /* Se o .ldf estiver ausente ou corrompido (comum em resgate de disco com defeito), use: */ CREATE DATABASE [NomeDoBanco] ON (FILENAME = 'C:\...\NomeDoBanco.mdf') FOR ATTACH_REBUILD_LOG; /* Isso reconstrói um log novo — funciona bem quando o banco foi desligado corretamente antes da pane, mas pode haver perda de transações não commitadas se o desligamento foi abrupto. */ - Deixe o SQL Server fazer o upgrade interno: no momento do attach, o SQL Server converte automaticamente o formato interno do banco para a versão atual. Isso é transparente e definitivo — não há passo manual adicional aqui.
- Ajuste o nível de compatibilidade (opcional, mas recomendado): por padrão o banco mantém o nível de compatibilidade original (exemplo: 120, do 2014). Isso não causa problema de funcionamento, mas impede de usar otimizador e recursos mais novos. Para elevar:
ALTER DATABASE [NomeDoBanco] SET COMPATIBILITY_LEVEL = 160; /* exemplo para sql server 2022 express */
Só faça isso depois de testar a aplicação, pois mudanças no otimizador de consultas podem alterar planos de execução.
- Valide a integridade e atualize estatísticas:
DBCC CHECKDB ([NomeDoBanco]) WITH NO_INFOMSGS; EXEC sp_updatestats;
- Faça um backup completo nativo imediatamente: a partir desse backup, tudo estará “nativo” da sua versão atual do SQL, sem qualquer resquício do arquivo original.
BACKUP DATABASE [NomeDoBanco] TO DISK = 'C:\Backups\NomeDoBanco_full.bak';
Consultas SQL úteis para diagnóstico
Abaixo instruções sql para facilitar diagnósticos e configurações de manutenção.
– Listar o espaço ocupado pelas tabelas do banco de dados
Referência original em AGO-2020.
SELECT t.NAME AS TableName, s.Name AS SchemaName, p.rows, SUM(a.total_pages) * 8 AS TotalSpaceKB, CAST(ROUND(((SUM(a.total_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS TotalSpaceMB, SUM(a.used_pages) * 8 AS UsedSpaceKB, CAST(ROUND(((SUM(a.used_pages) * 8) / 1024.00), 2) AS NUMERIC(36, 2)) AS UsedSpaceMB, (SUM(a.total_pages) - SUM(a.used_pages)) * 8 AS UnusedSpaceKB, CAST(ROUND(((SUM(a.total_pages) - SUM(a.used_pages)) * 8) / 1024.00, 2) AS NUMERIC(36, 2)) AS UnusedSpaceMB FROM sys.tables t INNER JOIN sys.indexes i ON t.OBJECT_ID = i.object_id INNER JOIN sys.partitions p ON i.object_id = p.OBJECT_ID AND i.index_id = p.index_id INNER JOIN sys.allocation_units a ON p.partition_id = a.container_id LEFT OUTER JOIN sys.schemas s ON t.schema_id = s.schema_id WHERE t.NAME NOT LIKE 'dt%' AND t.is_ms_shipped = 0 AND i.OBJECT_ID > 255 GROUP BY t.Name, s.Name, p.Rows ORDER BY TotalSpaceMB DESC, t.Name
Ou utilize uma a uma
exec sp_spaceused [nome da tabela]