quinta-feira, 9 de julho de 2009

Recuperando o banco MSDB

Para quem não sabe, o SQL Server 2005 possui os seguintes bancos de dados do sistema:
  • master: registra toda informação de nível de sistema de uma instância SQL Server. É o repositório para todos os objetos que residem no esquema sys;
  • msdb: usado pelo SQL Server Agent para o alerta de agendamento e tarefas , e registrar operadores; contém também tabelas de histórico de tarefas de backup e restore;
  • model: modelo para criação todos os bancos de dados. Customizações são registradas neste banco;
  • tempdb: uma área de trabalho para criação de objetos temporários (tabelas, variáveis, stored procedures, cursores, resultados de ordenações, etc.). É recriado sempre que a instância reinicia;
  • resource: um banco de dados somente leitura que contém a cópia de todos objetos de sistema
  • distribution: este banco somente existe se o servidor foi configurado como Distribuidor de replicação. Armazena informações como metadados e dados históricos de todos os tipos de replicação.
Hoje, me deparei com o MSDB em estado 'suspect'. Tentei efetuar o procedimento descrito em http://dmelobrz.blogspot.com/2008/12/recuperando-um-banco-de-dados-em-estado.html, porém, não funcionou porque o banco possuía transações pendentes e havia uma falha em uma página do banco, conforme detalhamento do log de erros.
Reiniciei o serviço MSSQLServer com os seguintes parâmetros:
"C:\Arquivos de programas\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Binn\sqlservr.exe" -c -T3608 -m -s SQLEXPRESS

Conectei à instância, via prompt de comando com a ajuda do aplicativo sqlcmd:

sqlcmd -S computador\sqlexpress -E

Com isso, pude desconectar o banco com problemas :

1) EXEC sp_detach_db 'msdb'
2) go
1) exit
Isso mesmo, vamos sair do aplicativo e executar o sqlcmd com um novo parâmetro:

sqlcmd -S computador\sqlexpress -E -i"C:\Arquivos de programas\Microsoft SQL Server\MSSQL10.SQLEXPRESS\MSSQL\Install\instmsdb.sql"


O arquivo instmsdb.sql é utilizado para a criação do banco msdb. É interessante renomear ou apagar o arquivo MSDBData.mdf e MSDBLog.ldf antes de executar este comando.
O banco é recriado do zero (todas as informações já existentes serão perdidas).
Digite Ctrl-C no console do serviço SQL Server que foi inicializado manualmente e inicie a sua instância (através do console 'Serviços', pelo SSMS ou prompt de comando).

Mas nada melhor do que o bom e velho backup!

Referências:
http://msdn.microsoft.com/en-us/library/ms190190.aspx

segunda-feira, 6 de julho de 2009

ADPREP.exe do Windows Server 2008 aparentemente não executa

Quem já realizou uma atualização de AD (do 2000 para o 2003, do 2003 para 2003 R2) sabe que é necessário efetuar uma atualização também no esquema do AD, que é feita pelo utilitário 'adprep.exe'.
Hoje me deparei com o seguinte cenário:
  • Controlador de Domínio Windows Server 2003, 32 bits, Inglês;
  • Futuro Controlador de Domínio Windows Server 2008, 64 bits, Português;
  • Ao executar o comando 'adprep.exe /forestprep', nada aparece na tela. Qualquer tecla apertada e retorno para o prompt.

Normalmente, quando o comando é executado, aparece um aviso solicitando que seja pressionada a letra "C" (Continue), que é uma maneira de prevenir a execução acidental.

DICA: Sempre tenha um bom backup do seu System State antes de fazer alterações no AD!

No DVD de instalação do Windows Server 2008, o adprep fica em \sources\adprep.

Iniciei minhas buscas nos fóruns e me deparei com uma mensagem que indicava o conteúdo do diretório 'adprep': além dos arquivos .ldf, temos também um diretório, de acordo com o idioma, com o arquivo 'adprep.exe.mui' que contém mensagens específicas. Como eu estava num Windows Server 2003-Inglês (us-en) e o DVD de instalação do Windows Server 2008 era em Português (pt-br), o adprep não conseguiu encontrar o diretório adprep\en-us. Por isso, não aparecia mensagem alguma.

Bastou pressionar o "C", para confirmar a operação e a atualização prosseguiu normalmente.

Fica aí a orientação!

Obs.: este link de um fórum MS ajudou muito:

http://social.technet.microsoft.com/Forums/en-US/winserverMigration/thread/77b86b14-ce4f-4072-bff0-fcbbec8ab88b


Update1: Caso queira ver as mensagens "cross-language", copie o conteúdo de \sources\adprep para um disco local e renomeie a pasta específica de idiomas para coincidir com o do seu sistema operacional. Eu recomendo sempre que sejam padronizados sistemas operacionais com mesmo idioma.