sexta-feira, 4 de janeiro de 2008

Length of text, ntext, or image data (x) to be replicated exceeds configured maximum 65536.

Esta mensagem ocorre quando você tenta inserir dados em um campo text, ntext ou image que está publicado em um artigo para replicação.


Isto ocorre por que o valor máximo padrão para replicação é de 65536, basta aumentar este número.

Exemplo:

Ao executar um INSERT, recebi a seguinte mensagem de erro.

Length of text, ntext, or image data (67792) to be replicated exceeds configured maximum 65536.

Para solucionar isto, execute:

exec sp_configure 'max text repl size', 67762
reconfigure

quinta-feira, 3 de janeiro de 2008

Estatísticas do Mundo

Me desculpem o off-topic.

No site http://www.nationmaster.com você encontra uma grande quantidade de estatísticas, vale a pena conferir.

sexta-feira, 10 de agosto de 2007

SQL Server 2005 Full-Text

Recentemente tive que fazer um ajuste no desempenho dos resultados de pesquisas utilizando o Full-Text no SQL Server 2005. Para quem não sabe, o SQL Server possui uma ferramenta que permite realizar pesquisas textuais no BD, chamado Full-Text Search.

Antes de começar é bom deixar claro que a performance fica realmente comprometida quando o resultado supera os 100.000 registros. Este post trata apenas de ajustes de software e não de hardware como separação física de bases de dados, etc, que podem trazer grandes melhorias do desempenho.

A base de dados ajustada contém pouco mais de 6 milhões de registros, ocupa 20Gb e possui um catálogo (utilizado pelo Full-Text Search para buscas) com 4 Gb.

Como otimizar as pesquisas (você precisa ter um conhecimento mínimo no FTS a partir de agora):

1) Utilizar CONTAINSTABLE no lugar de CONTAINS para grandes pesquisas

- Quando você utiliza o CONTAINS em uma condição WHERE, implicitamente é realizado um Join para combinar os IDs retornados pelo CONTAINS com os registros filtrados pelo WHERE, e isto degrada a performance quando utilizado em grandes bases de dados.

2) Incluir condições de pesquisa no texto indexado

- Ou seja, incluir no texto indexado pelo Full-Text Search todas as palavras utilizadas como restrição no WHERE, exemplo: suponha uma biblioteca com o conteúdo dos textos dos livros indexados, se você pesquisa por texto e restringe a pesquisa apenas para os livros de determinado assunto, o texto do assunto deve ser incluído no texto do livro, ou seja, após o texto do livro, inclú-a algo como: ASSUNTO:TECNOLOGIA, supondo que o livro seja do assunto Tecnologia, agora utilize a palavra acima com o CONTAINSTABLE.

3) Aumentar o time-out do full-text (SQL Server 2005 SP2)

EXEC sp_configure 'remote query timeout', 10000 -- o padrão é 600 segundos

combine com a seguir:

EXEC sp_fulltext_querytimeout @ftcat = 'nomedocatalogoFT', @timeout = 10000000 -- em milisegundos

4) Configure memória suficiente para o Full-Text Search

Deixe o ajuste de performance do sistema em "System cache", da seguinte forma: botão da direita em "Meu Computador", selecione "Propriedades", "Avançado", "Ajuste de performance", abra a caixa de diálogo "Avançado" na seção de uso de memória, selecione melhor performance para "Cache do sistema".

5) Outras configurações

Como regra geral, configure o serviço Full-Text para criar indices de acordo com SLA, para isto a opção full-text crawl deve ser definida como 2x o número de processadores físicos do servidor, no meu caso segue a configuração:

EXEC sp_configure 'max full-text crawl range', 2

(obs: se der erro, execute antes: EXEC sp_configure 'show advanced option', '1' para permitir visualização e ajustes das opções avançadas)

Em seguida, ajuste o uso de recursos para o full-text:

EXEC sp_fulltext_service 'resource_usage', 5 -- padrão 3

Neste caso, a máquina fica mais dedicada para o uso com pesquisas Full-text e irá utilizar até 100% do processador para isto.

Apenas com os ajustes acima, tive um ganho de 60% no retorno das pesquisas. Você pode também estudar e modificar suas cláusulas SQL. Para concluir, não existe uma 'receita de bolo' para otimizar as pesquisas com Full-Text, você terá que experimentar, ou seja, o processo é um pouco empírico.

Algumas fontes de referência:

http://www.microsoft.com/technet/prodtechnol/sql/bestpractice/ftslesld.mspx?pf=true
http://msdn2.microsoft.com/en-us/library/ms915345.aspx

Além do books online!

quinta-feira, 26 de julho de 2007

PASSO 8 - Criptografar o tráfico entre o servidor e os clientes do Banco de Dados

Agora, você precisa proteger a comunicação entre o servidor de base de dados e a aplicação, para assegurar que os aspectos de rede associados ao modelo de segurança em níveis sejam contemplados.

Como padrão, esta comunicação entre cliente e servidor é transmitida pela rede na forma de texto, desta forma qualquer um que utilizar um monitor de rede pode escutar ou capturar o texto e obter acesso à informação.

O SQL Server 2005 suporta o uso de SSL (Secure Sockets Layer) para criptografar o tráfego entre o cliente e o servidor, garantindo a identidade do servidor e evitando o risco de ataques do tipo acima.

Para proteger comunicações com SSL você precisa obter um certificado de um PKI (enterprise public key infrastructure) através do Microsoft's Certificate Services ou de outra instituição como VeriSign. O Certificado SSL deve conter o nome do host ou o FQDN (fully qualified domain name) do servidor da base de dados e deve estar armazenado no no computador local caso o SQL Server 2005 estiver executando no contexto de LocalSystem, caso contrário o certificado
deve estar armazenado no mesmo host que detém a conta que executa o serviço.

Uma vez que o certificado está instalado, abra o SQL Server Configuration Manager, expanda o SQL Server 2005 Network Configuration e dê um clique com o botão da direita em Protocols e selecione Properties. Na guia de Certificados, selecione o certificado desejado (na lista), na guia General selecione Force Encryption e modifique o valor para Yes. Uma vez configurado o SQL Server 2005 para usar o certificado, você precisa restartar o SQL Server 2005 para que as modificações tenham efeito.

Uma segunda maneira de criptografar o tráfego entre cliente e servidor é utilizando o IPsec. O benefício do IPsec é que nenhum configuração é exigida no SQL Server 2005, e pode ser utilizado para criptografar todo o tráfego (não só do SQL) e restringe o acesso ao servidor. Para mais informações sobre utilizar o IPsec com o SQL Server 2005, visite http://www.microsoft.com/sdisolation.

quarta-feira, 25 de julho de 2007

PASSO 7 - Executar o SQL Server Surface Area Configuration Tool

O próximo passo é executar o SQL Server Surface Area Configuration Tool. Sugiro executá-lo após adicionar ou remover todos os componentes desejados da instalação do SQL e também após passar todos os services packs/atualizações.
Você encontra o SQLSSAC em Configuration Tools, que é um submenu de Microsoft SQL Server 2005. O
Surface Area Configuration Tool, quando executado, aponta automaticamente para o localhost, mas você pode utilizá-lo em outras instalações do SQL Server. Você pode escolher a visualização para configuração por serviços e conecções ou por características (features) (veja imagem). Para ajustes na segurança do SQL Server, esta ferramenta é a preferencial.

terça-feira, 24 de julho de 2007

PASSO 6 - Depois de instalar o SQL Server, aplicar suas atualizações e Service Packs

A primeira instalação, após a conclusão da instalação do SQL Server, é dos seus Services Packs e de suas atualizações. Link para o último SP http://technet.microsoft.com/en-us/sqlserver/bb426877.aspx

PASSO 5 - Instalar o SQL Server 2005

Uma vez preparado o servidor, a instalação do SQL Server pode ser iniciada. Neste passo selecione criteriosamente e com cuidado as opções de instalação.
A primeira seleção que você deverá fazer é: quais componentes instalar ? Você não deve instalar componentes que não necessita (lembre-se que o objetivo é minimizar a superfície ou área de ataque). A recomendação é que quando for solicitado os Components para instalação no Setup Wizard, você clique em Advanced para selecionar apenas as ferramamentas que mais necessita.
Por exemplo, você pode escolher se instala ou não a replicação ou o full-text search e você está instalando uma instância individual do SQL Server 2005 que não será replicada para outros servidores e se não pretente utilizar buscas rápidas em texto então não selecione para instalação estas ferramentas.
Entre cuidadosamente com as credenciais criadas no Passo 4 para cada serviço. Quando for perguntando do mode de autenticação, selecione Windows Authentication Mode sempre que possível. Em algumas situações você ira precisar do Mixed Mode, que permite os dois métodos de autenticação. Se você escolher Mixed Mode, precisará entrar com a senha do SQL Server systems administrator (sa) Assim como as contas criadas no Passo 4, você deve assegurar que a senha é forte além de definir uma agenda para substituição/mudança dela.

PASSO 4 - Criar conta para executar o SQL Server

O último passo na preparação para a instalação do SQL Server 2005 é crair contas para serem utilizadas na execução dos serviços. O número de contas vai depender de dois fatores: o número de serviços que você pretente instalar com SQL e o número de instalações SQL já existentes. Você pode utilizar uma conta para todos os serviços do SQL Server 2005, porém é recomendado utilizar uma conta para cada serviço. Desta forma, o ideal, seria criar uma conta para cada serviço para cada instalação do SQL Server 2005. Outro detalhe importante é que se sua instalação do SQL nunca precisar acessar outro servidor ou serviço através da rede, você pode utilizar contas locais do servidor. Para finalizar, estas contas devem ser normais, ou seja, com privilégios de um usuário normal, e as senhas devem ser fortes e substituidas com frequencia.

PASSO 3 - Limitar o acesso ao Servidor/Host

Neste passo, o foco está no servidor e no ambiente físico, já que uma invasão pode ser realizada de diversas maneiras como através da rede, por interatividade ou fisicamente quando o SO não está executando.
Você limita a interatividade assegurando que a base de dados SAM não contém contas desnecessárias e apenas contas do domínio possuem acesso. Você pode consultar e retirar contas do sistema utilizando o MMC (Microsoft Management Console) Gerenciamento do Computador (Computer Management snap-in) (compmgmt.msc).
A limitação de um logon interativo no servidor pode ser feita através do Group Policy ou utilizando o MMC Diretiva de Segurança Local (Local Security Settings snap-in)(secpol.msc), em Diretivas locais, Atribuição de direitos de usuários, Fazer logon local e Negar logon local. Você terá que dar uma atenção específica para membros do domínio, já que em muitos casos os membros do grupo Admins. do Domínio também são administradores do banco de dados, mas em alguns casos eles não 'devem' ser. Para retirar esta pré-definição, remova o grupo "Admins. do Domínio" do grupo local "Administradores" do servidor, e adicione quem você desejar.
Para previnir ataques remotos através da rede, você deve colocar o servidor em um segmento de rede seguro e utilizar pelo menos um firewall como por exemplo aquele que já vem incluído no Windows Server 2003 SP1 por exemplo. E finalmente, para garantir a segurança fisica do sevidor, ele deve permanecer em um local com acesso restrito, já que os 'attackers', se tiverem acesso ao equipamento, podem 'bootar' um SO alternativo e resetar a senha do administrador.

PASSO 2 - Aplicar todos os Service Packs e atualizaçõeses de segurança no Servidor/Host

Este segundo passo também se concentra no servidor/host para assegurar que todos os últimos Service Packs e atualizações de software foram aplicados ao Sistema Operacional (SO). Este passo é fundamental para a segurança da sua instalação do SQL, já os 'attackers' podem ganhar acesso ao seu sistema através de serviços e/ou aplicativos que são executados no servidor.