Strict Standards: Non-static method themeGluedIdeas_Subtle::initOptions() should not be called statically in /home/riopro/www/blog.riopro.com.br/wp-content/themes/gluedideas_subtle/header.php on line 19
Riopro Blog - » Algumas dicas para os usuários do MSSqlServer

Algumas dicas para os usuários do MSSqlServer



Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

Durante os últimos anos temos trabalhado diversas vezes com o banco de dados MSSqlServer (vamos chamar ele daqui pra frente de MSSql pra encurtar um pouco). Nossos sistemas sempre foram desenvolvidos tendo como meta manter um Sql padrão, que o tornasse independente da plataforma de banco de dados utilizada pelo nosso cliente. Isso, apesar de impedir determinadas otimizações (como o uso de Stored Procedures, que não estão disponíveis em todos os bancos), facilita o trabalho de implantação e manutenção das aplicações, bem como migrações de base de dados dentro dos clientes.

Esse artigo pretende mostrar alguns caminhos das pedras que se não são preciosos, pelo menos poupam um bocado de tempo tanto em debug de problemas quanto em rapidez para executar funções. Acho que eu nem precisava dizer isso, mas é importante dizer que todas as dicas que aqui colocamos não têm garantia de que irão funcionar no seu caso específico nem que irão servir para todas as versões do MSSql. Portanto, nem pense em começar seus testes em um servidor de produção.

Trabalhamos em clientes com o MSSql desde sua versão 6.5 e apesar de não ser o nosso preferido, é um banco muito eficiente. A versão 6.5 tirava o meu sono só de pensar naqueles controles manuais de log de transação (que sempre os clientes acabavam ligando quando o log enchia e nenhuma transação mais era aceita) e uma interface de administração tão fraquinha que até trabalhar no terminal com o MySQL era melhor. Depois disso veio a ótima versão 7.0 e suas irmãs gêmeas 2000, 2003,…

Em todo esse tempo o que não melhorou mesmo foi a performance do Enterprise Manager e sua interminável lerdeza para ler a estrutura de dados e de autorização de um banco de dados/tabelas/direitos. Nisso o MSSql está anos luz atrás pois mesmo a interface gráfica sendo bonitinha dá tristeza para quem lida sempre com bancos de dados.

Chega de blá, blá, blá então e vamos as nossas poucas e boas (pelo menos para nos) dicas:

1) Se você gostaria de ter um bom cliente de MSSqlServer sem precisar possuir uma cópia do MSSql na sua máquina (tenha sempre em mente a questão legal e financeira das licenças de uso de softwares), o melhor cliente free que encontramos, pelo menos até o momento, foi o SQL Lite da FriendShip. Com uma interface simples mas eficiente, você tem o cliente que precisa para criar tabelas, índices, definições de campos, direitos de usuários,… Apesar do desenvolvimento estar estagnado a mais de 2 anos (eles dizem estar criando o SqlLite.net), o produto é bem estável e quebra todos os galhos.

Para aquela hora de pressa, quando você não quer nem imaginar ter que entrar em um Enterprise Manager para fazer backup e restore do banco, aqui vão as dicas:

2) Backup do Banco pode ser feito de 2 maneiras, criando uma instância de backup ou somente criar um arquivo de backup:

2.1) Backup criando/usando uma instância (isso facilita restaurar o banco em caso de erro de dados, mas não é útil para caso de reinstalações completas):

EXEC sp_dropdevice 'NOME_DA_INSTANCIA'
go
EXEC sp_addumpdevice 'disk', 'NOME_DA_INSTANCIA',
'd:\\backup\\NOME_DO_BACKUP.DATA_ATUAL.dmp'
go
BACKUP DATABASE NOME_DO_DATABASE TO NOME_DA_INSTANCIA
go

2.2) Backup direto para um arquivo

BACKUP DATABASE NOME_DO_DATABASE TO DISK ='d:\\backup\\NOME_DO_BACKUP.DATA_ATUAL.dmp'

3) Restaurando Bancos de dados

3.1) Restaurar um banco de dados por um comando de linha é algo que não tenho o hábito de fazer, mas funciona também (esse comando, se mau executado pode causar danos irreversíveis a seus dados). Normalmente quando eu faço é de um banco de dados completo. Existe também a possibilidade de fazer o restauro incremental do banco, mas para isso sempre necessitaremos de um backup completo inicial para depois aplicarmos os backups incrementais de forma subseqüente.

RESTORE DATABASE [NOME_DO_DATABASE] FROM  DISK = 'd:\\backup\\NOME_DO_BACKUP.DATA_ATUAL.dmp'

O banco será restaurado para os caminhos padrão de dat e log que está no dump, portanto, se você precisa restaurar de um servidor para outro e esses possuem caminhos diferentes para o armazenamento dos arquivos, o restauro deve ficar mais ou menos assim

RESTORE DATABASE NOME_DO_DATABASE FROM DISK = 'd:\\backup\\NOME_DO_BACKUP.DATA_ATUAL.dmp'
WITH MOVE 'NOME_LOGICO_DO_ARQUIVO' TO 'C:\\MSSQL2000\\MSSQL\\Data\\NOVO_NOME_LOGICO_DO_ARQUIVO.MDF',
MOVE 'NOME_LOGICO_DO_LOG_DO_ARQUIVO' TO 'C:\\MSSQL2000\\Data\\NOVO_NOME_LOGICO_DO_LOG_DO_ARQUIVO.LDF'
--,REPLACE --if NOME_DO_DATABASE already exists

Deixei também a cláusula REPLACE para o caso do banco já existir no servidor.

3.2) Para restaurar um banco de dados Master o MSSql deve estar no modo Single User. Para coloca-lo nesse modo, digite em um terminal

sqlservr –m

4) Truncando o Log de transações do BD
O log de transações armazena todas as transações efetuadas com um banco de dados. Esse log é bem importante para ver que transações foram efetuadas a cada momento e oferecem ao DBA (administrador de banco de dados) a capacidade de recuperar dados perdidos.

Todo banco de dados MSSql tem seu próprio log de transações (que fica no arquivo normalmente terminado por .log). A tendência é que esse log cresça indefinidamente, tornando o dump do banco de dados muito pesado.

De forma a ‘zerar’ esse log, podemos truncar o script abaixo. Obs: nunca truncar o log sem antes fazer backup completo em um servidor de PRODUÇÃO. Em uma base de teste, onde as perdas são mínimas, não tem problema executa-lo direto:

backup log NOME_DO_DATABASE with truncate_only
go
DBCC SHRINKDATABASE (NOME_DO_DATABASE)
go

5) Quando restaurar o seu banco de dados, não se engane, os direitos de usuários (exceto o sa obviamente), são todos zerados. Isso confunde muita gente, porque se você for na guia users, todos aqueles usuários que estavam ativos na hora do seu dump aparecerão na listagem. Pode dropar e recriar esses usuários (do seu banco de dados, não do servidor) sempre que restaurar um banco.

6) Para conferir quais as conexões ativas ao seu servidor e quais bancos estão sendo acessados, é só chamar a procedure do banco master sp_who.

7) Para aqueles que utilizam a versão 7.0 ainda, existe um problema associado à configuração de acentos e charsets. É que até a versão 7.0, a definição de charsets e sorts era por servidor. Isso quer dizer que se um servidor for configurado com sort diferente do servidor no qual o backup for restaurado, não irá funcionar. A única saída é exportar os dados. Para checar se os sorts são equivalentes, compare o resultado do comando sp_helpsort nos dois servidores. A partir da versão 2000 o sort e o charset passam a ser por banco de dados.

8) O Query Analyser que vem com o MSSql tem uma feature bem legal pra quem quer otimizar o seu banco de dados. Fica no menu Query | Display Estimated Execution Plan. Ele é interessante para avaliar principalmente suas query’s complexas, que envolvem mais de uma tabela, ou para avaliar aquelas tabelas que são muito grandes e precisam de otimizações pois são acessadas cada hora tendo um campo para filtro. A imagem abaixo dá uma amostra do que é o retorno e passando o mouse em cima de cada campo as informações são ainda mais precisas (não mostramos aqui mas faça seu teste):

tela_query_analyser.png

É isso, espero que seja útil, e quando puder vou atualizar com novas características desse banco de dados interessante e bastante usado.

Informações e Links

Junte-se comentando, lendo o que os outros dizem ou colocando um link a partir do seu blog.


Outros Artigos

Strict Standards: Only variables should be assigned by reference in /home/riopro/www/blog.riopro.com.br/wp-includes/post.php on line 117
Usando as AccessKeys no Firefox 2

Strict Standards: Only variables should be assigned by reference in /home/riopro/www/blog.riopro.com.br/wp-includes/post.php on line 117
Como incluir feeds RSS no Mediawiki

Comente

Tire um tempo para comentar e nos dizer o que você acha. Alguns códigos HTML são permitidos para formatação.

Comentários dos Leitores


Deprecated: preg_replace(): The /e modifier is deprecated, use preg_replace_callback instead in /home/riopro/www/blog.riopro.com.br/wp-includes/formatting.php on line 82

quero saber como configura meu sertvido de mu
.