COMANDOS DBCC - PARTE 01/02

O SQL SERVER 2000 possui um conjunto de comandos DBCC
(DATABASE CONSOLE COMMAND), usados na administração do
banco de dados.

De acordo com sua funcionalidades, são agrupados em 4 categorias:

MANUTENÇÃO - comandos que realizam tarefas de manutenção em:

  • databases
  • índices
  • grupos de arquivos

 DBCC DBREINDEX
 DBCC DBREPAIR --> MANTIDO POR COMPATIBILIDADE (DEVE-SE DROPAR E RECRIAR O DATABASE CORROMPIDO)
 DBCC INDEXDEFRAG
 DBCC SHRINKDATABASE
 DBCC SHRINKFILE
 DBCC UPDATEUSAGE

STATUS - comandos que checam o status de objetos do sistema:

 DBCC INPUTBUFFER
 DBCC OPENTRAN
 DBCC OUTPUTBUFFER
 DBCC PROCCACHE
 DBCC SHOWCONTIG
 DBCC SHOW_STATISTICS
 DBCC SQLPERF
 DBCC TRACESTATUS
 DBCC USEROPTIONS

VALIDAÇÃO - comandos que validam a estrutura e/ou alocação de:

  • databases
  • tabelas
  • índices
  • catálogos
  • grupos de arquivos
  • tabelas de sistema
  • páginas do database

 DBCC CHECKALLOC
 DBCC CHECKCATALOG
 DBCC CHECKCONSTRAINTS
 DBCC CHECKDB
 DBCC CHECKFILEGROUP
 DBCC CHECKIDENT
 DBCC CHECKTABLE
 DBCC NEWALLOC

DIVERSOS - comandos que realizam tarefas não enquadrados nas categorias acima:

 DBCC dllname (FREE)
 DBCC HELP
 DBCC PINTABLE
 DBCC ROWLOCK
 DBCC TRACEOFF
 DBCC TRACEON
 DBCC UNPINTABLE

******************************************************************
ABAIXO, APRESENTAREI OS COMANDOS, SEGUIDOS DE EXEMPLOS DE USO.

LEMBRO QUE NÃO ESTOU LHES MOSTRANDO A SINTAXE COMPLETA DO COMANDO, MAS AS SUAS FORMAS MAIS USADAS.

PARA MAIS DETALHES, CONSULTE OS BOOKS ON LINE DO SQL SERVER OU O SITE HTTP://MSDN.MICROSOFT.COM/SQL
******************************************************************

Listagem 01 - Exemplos dos comandos

USE PUBS
--TODOS OS EXEMPLOS ABAIXO SERÃO EXECUTADOS NESSE DATABASE


/*
 DBCC DBREINDEX(NOME DA TABELA) WITH NO_INFOMSGS
 
 RECRIA TODOS OS ÍNDICES DA TABELA PASSADA COMO PARÂMETRO

 ONDE:
  NOME DA TABELA:
   É O NOME DA TABELA A REINDEXAR
  WITH NO_INFOMSGS:
   INDICA QUE NÃO DEVEM SER APRESENTADAS AS MENSAGENS
*/

DBCC DBREINDEX(AUTHORS)
--DBCC execution completed. If DBCC printed error messages, contact your system administrator.

DBCC DBREINDEX(AUTHORS) WITH NO_INFOMSGS
--The command(s) completed successfully.
 
EXEC SP_MSFOREACHTABLE
 @COMMAND1 = PRINT REINDEXANDO A TABELA ?,
 @COMMAND2 = DBCC DBREINDEX(?) WITH NO_INFOMSGS
/*
REINDEXANDO A TABELA [dbo].[titleauthor]
REINDEXANDO A TABELA [dbo].[stores]
REINDEXANDO A TABELA [dbo].[sales]
REINDEXANDO A TABELA [dbo].[roysched]
REINDEXANDO A TABELA [dbo].[discounts]
REINDEXANDO A TABELA [dbo].[jobs]
REINDEXANDO A TABELA [dbo].[pub_info]
REINDEXANDO A TABELA [dbo].[employee]
REINDEXANDO A TABELA [dbo].[authors]
REINDEXANDO A TABELA [dbo].[publishers]
REINDEXANDO A TABELA [dbo].[titles]
*/


 
/*
 DBCC INDEXDEFRAG(DATABASE, TABELA, ÍNDICE) WITH NO_INFOMSGS

 REORGANIZA O ÍNDICE DA TABELA PASSADA COMO PARÂMETRO

 ONDE:
  DATABASE:
   É O NOME DO DATABASE QUE CONTÉM A TABELA
  TABELA:
   É O NOME DA TABELA QUE CONTÉM O ÍNDICE
  ÍNDICE:
   É O NÚMERO QUE INDICA A ORDEM DO ÍNDICE
  WITH NO_INFOMSGS:
   INDICA QUE NÃO DEVEM SER APRESENTADAS AS MENSAGENS
*/
 
DBCC INDEXDEFRAG(PUBS, EMPLOYEE, 1)
/*
Pages Scanned Pages Moved Pages Removed
------------- ----------- -------------
0             0           0

DBCC execution completed. If DBCC printed error messages, contact your system administrator.
*/

DBCC INDEXDEFRAG(PUBS, EMPLOYEE, 1) WITH NO_INFOMSGS
--The command(s) completed successfully.

 

/*
 DBCC SHRINKDATABASE(DATABASE, ESPAÇO_LIVRE) WITH NO_INFOMSGS

 DESALOCA ESPAÇOS NÃO OCUPADOS PELO DATABASE

 ONDE:
  DATABASE:
   É O NOME DO DATABASE
  ESPAÇO_LIVRE:
   É O ESPAÇO LIVRE EM % QUE DEVERÁ ESTAR ALOCADO
   NO FIM DO PROCESSO
*/

DBCC SHRINKDATABASE(PUBS, 0)
/*
DbId   FileId CurrentSize MinimumSize UsedPages   EstimatedPages
------ ------ ----------- ----------- ----------- --------------
5      1      160         80          152         152
5      2      63          63          56          56

DBCC execution completed. If DBCC printed error messages, contact your system administrator.
*/

DBCC SHRINKDATABASE(PUBS, 0) WITH NO_INFOMSGS
--The command(s) completed successfully.

EXEC SP_MSFOREACHDB
 @COMMAND1 = PRINT FAZENDO SHRINK DO DATABASE ?,
 @COMMAND2 = DBCC SHRINKDATABASE(?, 0) WITH NO_INFOMSGS
/*
FAZENDO SHRINK DO DATABASE CAP_03
FAZENDO SHRINK DO DATABASE CAP_04
FAZENDO SHRINK DO DATABASE CAP_05
FAZENDO SHRINK DO DATABASE CAP_06
FAZENDO SHRINK DO DATABASE CAP_07
FAZENDO SHRINK DO DATABASE CAP_08_09
FAZENDO SHRINK DO DATABASE correio
FAZENDO SHRINK DO DATABASE DB_CDS
FAZENDO SHRINK DO DATABASE DVD
FAZENDO SHRINK DO DATABASE FILMES
FAZENDO SHRINK DO DATABASE IMPACTA
FAZENDO SHRINK DO DATABASE master
FAZENDO SHRINK DO DATABASE model
FAZENDO SHRINK DO DATABASE msdb
FAZENDO SHRINK DO DATABASE Northwind
FAZENDO SHRINK DO DATABASE pubs
FAZENDO SHRINK DO DATABASE tempdb
*/

 

/*
 DBCC SHRINKFILE(NOME_LÓGICO, ESPAÇO_LIVRE) WITH NO_INFOMSGS

 DESALOCA ESPAÇOS NÃO OCUPADOS POR UM ARQUIVO DE DADOS OU LOG

 ONDE:
  NOME_LÓGICO:
   É O NOME LÓGICO DO ARQUIVO
  ESPAÇO_LIVRE:
   É O ESPAÇO LIVRE EM % QUE DEVERÁ ESTAR ALOCADO
   NO FIM DO PROCESSO
*/

EXEC SP_HELPDB PUBS
/*
MÚLTIPLAS LINHAS COM INFORMAÇÕES SOBRE O DATABASE PUBS
*/

DBCC SHRINKFILE(PUBS, 0)
/*
DbId   FileId CurrentSize MinimumSize UsedPages   EstimatedPages
------ ------ ----------- ----------- ----------- --------------
5      1      160         80          152         152

DBCC execution completed. If DBCC printed error messages, contact your system administrator.
*/

 

/*
 DBCC UPDATEUSAGE(DATABASE, TABELA, ÍNDICE) WITH COUNT_ROWS, NO_INFOMSGS

 APRESENTA E CORRIGE OS VALORES ARMAZENADOS INCORRETAMENTE NA TABELA
 SYSINDEXES, QUE FAZEM COM QUE A SAÍDA DA PROCEDURE SP_SPACEUSED SEJA FALSA

 ONDE:
  DATABASE:
   É O NOME DO DATABASE QUE CONTÉM A TABELA - SE FOR
   DIGITADO O VALOR 0 (ZERO), O DATABASE USADO SERÁ O
   QUE ESTÁ EM USO
  TABELA:
   É O NOME DA TABELA QUE CONTÉM O ÍNDICE - OPCIONAL
  ÍNDICE:
   É O NÚMERO QUE INDICA A ORDEM DO ÍNDICE - OPCIONAL
  WITH NO_INFOMSGS:
   INDICA QUE NÃO DEVEM SER APRESENTADAS AS MENSAGENS
  WITH COUNT_ROWS:
   ATUALIZA A COLUNA "ROWS" DA TABELA SYSINDEXES COM A
   QUANTIDADE DE LINHAS DA TABELA QUE ESTÁ SENDO ANALISADA,
   PARA OS ÍNDICES DE ID 0 E 1
*/

EXEC SP_SPACEUSED EMPLOYEE
/*
name       rows  reserved  data   index_size  unused 
---------- ----- --------- ------ ----------- -------
employee   43    152 KB    64 KB  32 KB       56 KB
*/

DBCC UPDATEUSAGE (PUBS, EMPLOYEE) WITH COUNT_ROWS
/*
DBCC UPDATEUSAGE: sysindexes row updated for table employee (index ID 1):
        DATA pages: Changed from (8) to (1) pages.
        USED pages: Changed from (12) to (5) pages.
        RSVD pages: Changed from (19) to (5) pages.
DBCC execution completed. If DBCC printed error messages, contact your system administrator.
*/

EXEC SP_SPACEUSED EMPLOYEE
/*
name      rows  reserved  data  index_size  unused 
--------- ----- --------- ----- ----------- -------
employee  43    40 KB     8 KB  32 KB       0 KB
*/

 

/*
 DBCC INPUTBUFFER(PROCESSO)

 RETORNA O ÚLTIMO COMANDO ENVIADO PELO CLIENTE AO SQL SERVER

 ONDE:
  PROCESSO:
   ID DO PROCESSO
*/

SELECT @@SPID
--51

DBCC INPUTBUFFER(51)
/*
EventType      Parameters EventInfo             
-------------- ---------- ----------------------
Language Event 0          DBCC INPUTBUFFER(51)

DBCC execution completed. If DBCC printed error messages, contact your system administrator.
*/

--AGORA, ABRA UMA NOVA JANELA (CTRL+N) E EXECUTE O COMANDO ABAIXO:

SELECT @@SPID
--52

SELECT * FROM SYSOBJECTS
--DIVERSAS LINHAS DE TABELA

--VOLTE A ESSA JANELA, SEM FECHAR A OUTRA (CTRL+TAB) E EXECUTE O COMANDO ABAIXO:

DBCC INPUTBUFFER(52)
/*
EventType      Parameters EventInfo                 
-------------- ---------- --------------------------
Language Event 0          SELECT * FROM SYSOBJECTS

DBCC execution completed. If DBCC printed error messages, contact your system administrator.
*/

 

/*
 DBCC OPENTRAN(DATABASE) WITH TABLERESULTS

 RETORNA DETALHES DAS TRANSAÇÕES ABERTAS

 ONDE:
  DATABASE:
   É O NOME DO DATABASE - SE FOR DIGITADO O VALOR 0
   (ZERO), O DATABASE USADO SERÁ O QUE ESTÁ EM USO
  WITH TABLERESULTS:
   RETORNA EM FORMATO DE TABELA
*/

--ABRA UMA NOVA JANELA (CTRL+N) E EXECUTE OS COMANDOS ABAIXO:

BEGIN TRAN

SELECT *
FROM TITLES A,
 TITLES B,
 TITLES C,
 TITLES D,
 TITLES E,
 TITLES F
--ESSE SELECT RETORNA 34,012,224 REGISTROS
--(A TABELA TITLES TEM 18 REGISTROS)
 
--AGORA, ANTES DE O COMANDO TERMINAR, (PAREI A EXECUÇÃO AOS 10 MINUTOS E AINDA TINHA GERADO APENAS 12,500,000 REGISTROS)VOLTE PARA ESSA JANELA (CTRL+TAB) E EXECUTE O COMANDO ABAIXO:

DBCC OPENTRAN(0)
/*
Transaction information for database pubs.

Oldest active transaction:
    SPID (server process ID) : 55
    UID (user ID) : 1
    Name          : user_transaction
    LSN           : (4:365:1)
    Start time    : Jul 30 2006  4:35:14:633PM
*/

DBCC OPENTRAN(0) WITH TABLERESULTS
/*
pubs              OPENTRAN                   
----------------- ---------------------------
OLDACT_SPID       55
OLDACT_UID        1
OLDACT_NAME       user_transaction
OLDACT_LSN        (4:365:1)
OLDACT_STARTTIME  Jul 30 2006  4:35:14:633PM
*/

--FINALMENTE, CANCELE A EXECUÇÃO DO SELECT NA OUTRA JANELA

 

/*
 DBCC OUTPUTBUFFER(PROCESSO)

 RETORNA EM HEXA E ASCII A RESPOSTA DO SERVIDOR À SOLICITAÇÃO
 DO CLIENTE

 ONDE:
  PROCESSO:
   ID DO PROCESSO
*/

--ABRA UMA NOVA JANELA (CTRL+N) E EXECUTE OS COMANDOS ABAIXO:

SELECT @@SPID
--53

SELECT GETDATE()
--2006-07-30 17:01:36.800

--AGORA, VOLTE PARA ESSA JANELA (CTRL+TAB) E EXECUTE O COMANDO ABAIXO:

DBCC OUTPUTBUFFER(53)
/*
Output Buffer                                                                
---------------------------------------------------------
00000000   04 01 00 ... 00 00 00 00 a7   ...+.5.........§
00000010   07 00 09 ... 41 47 4e 41 4c   .. .Ð.4.Ñ..AGNAL
00000020   44 4f fd ... 00 fd 01 00 ba   DOý..Á......ý..º

... saída dos endereços -> 00000020 A 00000fc0

00000fd0   00 70 17 ... 1a 8a 01 00 00   .p..@...€s..Š...
00000fe0   ff ff ff ... 00 00 00 00 00   ÿÿÿÿ¹...........
00000ff0   00 00 00 ... 00 00 00 01 00   ................
*/

Na próxima matéria mostrarei os comandos que faltam.