Archive for October, 2009

Base de dados virtual

Posted in Dicas, Vida Real on October 22nd, 2009 by Silas Mendes – 4 Comments

Hoje cedo recebi um e-mail da SQL Server Magazine, com a seguinte propaganda:

SQL Virtual Database: It’s As Easy As 1, 2, 3.

O anúncio chamou atenção e resolvi dar uma verificada.

Imagine o seguinte cenário: você tem um backup de uma base de dados SQL Server e precisa restaurá-lo pra trabalhar em cima dele. O backup tem aproximadamente 180 GB e você vai precisar de algumas horas pra restaurá-lo.

Imagine agora que você tenha uma forma de “restaurar” esse backup em 10 minutos e trabalhar em cima dele normalmente, como qualquer outra base de dados do SQL Server, executando consultas, procedures, realizando updates, etc. Essa é a idéia da ferramenta SQL Virtual Database desenvolvida pela Idera.

Algumas pessoas poderão dizer, “ah, mas o SQL Server já tem o Database Snapshot”. Sim, a idéia é parecida, mas o Database Snapshot só pode ser gerado na mesma instância da base de origem e só está disponível a partir do SQL Server 2005 em edições Enterprise. O SQL Virtual Database gera uma base de dados virtual em qualquer instância (inclusive SQL Server 2000) a partir de um arquivo de backup.

Achei a idéia inicial muito boa (o programa está na versão beta) e de certa forma fiquei impressionado com os 9 minutos que esperei para ter uma base virtual, baseada num backup de 180 GB, que estava em outra estação da rede. Particularmente achei uma saída muito interessante pra ambientes de desenvolvimento e homologação.

Vou testá-la repetidamente durante os próximos 14 dias (que é o período do Trial) e se tiver mais considerações posto aqui.

Abaixo algumas telas da ferramenta:

Tela de instalação

1. Tela de instalação

Attach do backup

2. Attach do backup na instância MENDES\SQL05

Base de dados anexada à instância

3. Base virtual anexada à instância

Link para download.

Bom trabalho!


SQL Server via prompt de comando?

Posted in Dicas, Vida Real on October 20th, 2009 by Silas Mendes – 4 Comments

Em minha experiência pessoal já vivi uma situação onde durante a atualização do principal sistema da empresa, nosso contato no datacenter reclamou dizendo que não conseguia abrir o Management Studio para executar nossos scripts.

A solução mais rápida? Enviei para o datacenter o procedimento de execução dos scripts via SQLCMD.

Mas o que é isso?

O SQLCMD é uma ferramenta que você utiliza para acessar instâncias SQL Server via prompt de comando (vulgo DOS). Não existem segredos, uma vez conectado, através de scripts você pode fazer tudo o que faria utilizando o Query Analyser ou o Management Studio. Apesar de ser uma excelente ferramenta, o SQLCMD tem suas limitações “gráficas”, no entanto em alguns cenários é a ferramenta ideal!

Os exemplos que vou apresentar foram executados na minha estação de trabalho. Nela tenho instalado um SQL Server 2005. Minha instância é uma instância nomeada e é identificada como SQL05.

Pra começar a conversa vamos ao prompt de comando (menu Iniciar > Executar > cmd).

No prompt de comando, para conectar no meu SQL local (localhost), utilizando o SQLCMD, devo digitar o seguinte comando:

sqlcmd –E  –S  LOCALHOST\SQL05

No comando acima estou conectando no SQL Server utilizando a autenticação Windows (-E) na instância SQL05 (-S), mas se for necessário conectar utilizando a autenticação do SQL Server, ficaria assim:

sqlcmd  –U SA –P senhateste –S  LOCALHOST\SQL05

No exemplo acima, estou conectando no SQL utilizando o login SA  do SQL Server (-U) com a senha  senhateste (-P).

Se a conexão for realizada com sucesso o prompt do SQLCMD ficará similar à imagem abaixo:

01sqlcmd

Se o seu SQL Server foi instalado como uma instância padrão a conexão é ainda mais simples, pois você não precisa especificar o nome da instância. No exemplo abaixo estamos conectando numa instância padrão do SQL Server, utilizando autenticação Windows.

sqlcmd –E

Uma vez conectado, para sair do SQLCMD podemos utilizar os clássicos EXIT ou CTRL + C.

Dentro do SQLCMD é importante saber que suas instruções sql só serão executadas quando você digitar um GO e confirmar com um ENTER. No exemplo abaixo eu mudei o contexto para a base de dados Northwind e logo depois executei uma consulta. Veja que ao fim de cada instrução eu adicionei um GO.

02sqlcmdNote que a cada GO a numeração das linhas recomeça.

Uma vez conectado, como já citado, você poderá executar qualquer instrução SQL desde selects, updates, até a criação de bancos e tabelas ou a execução de procedures do sistema que te auxiliem a monitorar seu SQL Server, como:

Ler log do SQL Server

sp_readerrorlog

go

Verificar conexões na instância:

sp_who

go

Etc…

Combinado a isto, é possível também executar comandos do DOS dentro do SQLCMD. Para listar o C:\ basta digitar

!!dir C:\

Se quiser dar uma limpada na tela, digite:

!!cls

Como você pode notar todos os comandos do prompt DOS são precedidos por dois pontos de exclamação (!!).

Ok…

Mas digamos agora que você tenha aí um script pronto e deseja executá-lo no SQLCMD, além disso deseja gravar o resultado da execução deste script num arquivo txt. Vamos exemplificar esta situação utilizando o script abaixo que será salvo na unidade c:\ num arquivo identificado como teste.sql.

USE northwind
SELECT
table_name nomeTabela,
column_name nomeColuna,
data_type tipoDaColuna,
isnull(character_set_name, ‘NoUnicode’) campoUnicode
FROM
information_schema.columns
WHERE
table_name = ‘Categories’

USE northwind

– lista todas as colunas da tabela Categories da base Northwind

SELECT

table_name nomeTabela,

column_name nomeColuna,

data_type tipoDaColuna,

isnull(character_set_name, ‘NoUnicode’) campoUnicode

FROM

information_schema.columns

WHERE

table_name = ‘Categories’

Veja como fica a linha dessa chamada utilizando o SQLCMD:

03sqlcmd

sqlcmd -E -S LOCALHOST\SQL05 -i”c:\teste.sql” -o”resultado.txt”

O parâmetro –i indica o arquivo de entrada (INPUT),  que contém o script que será executado. O parâmetro –o indica qual será o arquivo de saída (OUTPUT), que conterá o resultado da execução.

 

Como qualquer assunto no SQL Server, este é mais um que poderíamos discorrer por páginas e mais páginas… mas por enquanto ficamos por aqui. Creio que essa introdução é o suficiente pra entendemos o potencial desta ferramenta.

Para obter mais informações sobre os parâmetros do SQLCMD, no prompt do DOS digite sqlcmd -? Se esse help parecer um pouco confuso você poderá acessar este link e ter informações mais detalhadas.

 

É importante lembrar que o SQLCMD está disponível para o SQL Server 2005 e 2008. Para versões anteriores utilize o OSQL ou ISQL.

Bom trabalho, bons estudos!

 

Mendes

DBA Checklist – Segurança

Posted in Dicas, Traduzidos, Vida Real on October 13th, 2009 by Silas Mendes – Be the first to comment
Essa série de Check List para DBAs SQL Server foi escrita por Brad McGehee para o site http://www.simple-talk.com/ . É um texto sucinto, mas muito completo. Tomei a liberdade de adicionar algumas observações(em itálico) que normalmente apontam para outros conteúdos em português. O texto original pode ser lidoaqui.

Segurança

  • Garanta a segurança física de cada servidor SQL Server, evitando que usuários não autorizados acessem seus servidores fisicamente.
  • Em suas instâncias SQL Server instale somente bibliotecas e protocolos de rede que sejam realmente necessários.
  • Reduza a quantidade de sysadmins (administradores) que tenham permissão para acessar o SQL Server;
  • Como DBA trabalhe com privilégios sysadmin somente quando necessário. Crie contas diferentes para os DBAs acessarem o SQL Server quando privilégios de administrador não forem necessários.
  • Configure a conta SA com uma senha segura e jamais utilize esta conta para logar no SQL Server. Para acessar o SQL Server com direitos administrativos utilize uma conta com autenticação Windows.
  • Quando conceder permissões para usuários, dê o mínimo de permissão necessário para que ele possa realizar o trabalho.
  • Ao invés de permitir que usuários acessem os dados diretamente nas tabelas, utilize Store Procedures e/ou Views.
  • Sempre que possível utilize contas com autenticação Windows (windows authentication) no lugar de logins SQL Server.
  • Use senhas fortes em todas as contas com autenticação SQL Server.
  • Não conceda permissões para a role Public.
  • Remova logins que não precisam mais de acesso ao SQL Server.
  • Remova a conta guest de todos os bancos de dados.
  • Se não for necessário desabilite a propriedade Cross-Database Ownership.
  • Nunca dê permissão na procedure xp_cmdshell para usuários que não são administradores.
  • Evite criar compartilhamentos de rede no servidor SQL Server.
  • Ative a auditoria de login, para que você possa ver quem teve sucesso ou falha no momento de logar no SQL Server. No SQL Server 2008 você poderá utilizar o SQL Server Audit.
  • Não use a conta SA ou contas que são membros do grupo sysadmin como contas utilizadas por aplicações que acessam o SQL Server.
  • Garanta que o servidor SQL Server esteja protegido por um firewall e não esteja exposto diretamente na internet.
  • Retire o grupo BUILTIN/Administrators do SQL Server para prevenir que administradores do servidor tenham acesso ao SQL Server. Antes de fazer isso num SQL Server instalado sobre um cluster, verifique o Books Online.
  • Tenha uma conta de domínio diferente para cada serviço do SQL Server.
  • Conceda o mínimo necessário de direitos e permissões para as contas de domínio dos serviços SQL. Na maioria dos casos, direitos de administrador local ou administrador de domínio não são necessários. Fora poucas exceções a instalação do SQL Server configura automaticamente as permissões necessárias para as contas de serviços.
  • Ao rodar consultas distribuídas, utilize linked server ao invés de remote servers.
  • Não navegue na internet num servidor SQL Server.
  • Ao invés de instalar um anti-vírus/anti-spyware no servidor SQL Server, execute os scans a partir de uma maquina remota, em horários onde a atividade dos usuários é menor, fora do horário de produção.
  • Atualize service packs e hot-fix do sistema operacional e do SQL Server sempre que estes forem liberados e testados. Muitas vezes eles incluem melhorias na segurança.
  • Criptografe todos os backups do SQL Server. Se você tem o SQL Server 2008 Enterprise Edition poderá usar a criptografia nativa, se não for o caso, poderá utilizar ferramentas de terceiros, como o SQL Backup Pro.
  • Só habilite as auditorias C2 ou Common Criteria se isso for necessário.
  • O SQL Server 2008 vem com uma nova funcionalidade de auditoria chamada SQL Server Audit. Ela pode auditar praticamente qualquer atividade do usuário, mas mantenha um número baixo de atividades e objetos auditados para reduzir a sobrecarga no desempenho.
  • Considere executar o SQL Server Security Scanner nos seus servidores SQL Server para identificar falhas de segurança.
  • Considere adicionar um certificado em suas instâncias SQL Server e habilitar SSL ou IPsec para conexões com clientes.
  • Se estiver usando o SQL Server 2005/2008 habilite as opções de políticas de senha.
  • Se estiver utilizando o SQL Server 2008 Enterprise Edition, considere implementar criptografia dos dados (Transparent Data Encryption) para ajudar a proteger os dados armazenados em disco.