Home - www.devmedia.com.br

Procedures Não Documentadas no SQL Server 2000.

Existem diversas procedures não documentadas no SQL Server 2000. Por que não são documentadas? Boa pergunta. O que posso dizer com plena convicção é que são bastante úteis e costumo utilizá-las em várias rotinas administrativas que estão sob minha responsabilidade. Vale ressaltar que, como todo processo não documentado, sua utilização deve ser vista com cautela pelo fato de não existerem garantias concretas de que tais procedimentos continuarão existindo em novas versões do produto.

Como a listagem dessas procedures é extensa, estarei periodicamente voltando a esse assunto. Seguem alguns exemplos.

sp_MSForEachDb

Utilize essa sp para executar um ou mais procedimentos em todos os databases de um servidor. Por exemplo, vamos imaginar uma rotina para checagem da integridade de databases. Você possui algumas opções:

1. Utilizando um script com linhas de comando fixas

dbcc checkdb(‘northwind’)
dbcc checkdb(‘pubs’)
dbcc checkdb(‘master’)

.

...

 

2. Utilizando um cursor para executar o comando DBCC em todos os databases:

declare cr_Cursor cursor fast_forward
for

     select name from master.dbo.SysDatabases

declare @database varchar(200)
declare @cmd varchar(200)
open cr_Cursor

fetch next from cr_Cursor into @database
while (@@fetch_status <> -1)
begin

          if (@@fetch_status <> -2)
          begin
               set @cmd = 'dbcc checkdb('+''''+@database+''''+')'
                         print ''
               print '-------------------------------------------'
               print '>>>> Database: '+ @database
               print '-------------------------------------------'
                         exec (@cmd)
          end
          fetch next from cr_Cursor into @database
end

close cr_Cursor
deallocate cr_Cursor

 

3. Utilizando a procedure sp_MSForEachDB, para realizar o mesmo procedimento

exec sp_MSForEachDB @command1="print '?'" ,
                                          @command2="DBCC CHECKDB ('?')"

 

Os parâmetros da procedure são:

Parâmetro
Obrigatório ?
Para que serve
@command1
Sim
Primeiro comando que se deseja executar.
@command2
Não
Segundo comando que se deseja executar
@command3
Não
Terceiro comando que se deseja executar
@replacechar
Não
Caractere que deverá ser substituído pelo nome do database nos parâmetros @command1..3. Quando não especificado, o caractere default será o sinal de interrogação ‘?’.
@precommand
Não
Comando que deverá ser executado ANTES de @command1..3
@poscommand
Não
Comando que deverá ser executado APÓS @command1..3

 

Comparando a opção 3 com as anteriores, percebemos que, além de simples, é bastante eficiente. Prevê a criação de novos databases (ponto onde a opção 1 deixa a desejar) e faz a mesma coisa que a opção 2, porém de maneira mais simples e objetiva.

sp_MSForEachTable

Executa um procedimento para todas as tabelas pertencentes a um database. Para reindexar todas as tabelas de um database:

EXEC sp_MSforeachTable @command1="print '>>>Tabela: ?'                                                @command2="DBCC dbreindex ('?')"

À exceção de @whereand (opcional para informar mais uma restrição a ser aplicada na tabela SysObjects), os outros parâmetros são os mesmos daqueles vistos na sp_MSForEachDB. Poderíamos utilizar o parâmetro @whereand para reindexar somente as tabelas cujo nome iniciasse por “or”:

use NorthWind
go
EXEC sp_MSforeachTable @command1="print '>>>Tabela: ?' ",
                                               @command2="DBCC dbreindex ('?')"
                                               @whereand=" and left(name,2)='Or'"

-------------------------------------------------------------------------------

>>>Tabela: [dbo].[Orders]
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
>>>Tabela: [dbo].[Order Details]
DBCC execution completed. If DBCC printed error messages, contact your system administrator.

 

Bem pessoal por hoje é só.

Forte abraço a todos e até a próxima!

Paulo Ribeiro

 

Paulo Ribeiro (psribeiro@hotmail.com) é Microsoft MCDBA e membro da equipe editorial da SQL Magazine. Atua como DBA sênior em SQL Server na Livraria e Papelaria Saraiva S/A.

  Monitorando deadlocks com Trace Flags    
  Monitorando deadlocks com o Profiler    
  Variáveis tipo TABLE    
  Tabelas Temporárias    
  Subqueries Parte II: Queries correlatas    
  Subqueries – Parte I    
  Gerenciando Bloqueios–Parte II    
  Gerenciando Bloqueios–Parte I    
  Porque qualificar o owner na chamada de stored-procedures    
  Explorando os Tipos de Join – Parte II    
  Explorando os Tipos de Join – Parte I    
  Versões existentes do SQL Server 2000    
  Tuning - Plano de Execução no SQL Server - Parte 4    
  Tuning - Plano de Execução no SQL Server - Parte 3    
  Tuning - Plano de Execução no SQL Server - Parte 2    
  Tuning - Plano de Execução no SQL Server - Parte 1    
  Tuning - Estatísticas de I/O    
  Desfragmentando Índices no SQL Server    
  Procedures Não Documentadas
no SQL Server 2000 Parte 2
   
  Procedures Não Documentadas
no SQL Server 2000.
   
  SQL Server 2005 - YUKON    
  SQL Server 2000: o Contra-Ataque.    
  Boas-Vindas    
     

 

Todos os direitos reservados: DevMedia Group
SQL Magazine - 2004