Como executar o REORG, REORGCHK, RUNSTAT em todas tabelas de um banco DB2
O banco de dados da IBM, o DB2 não é lá uma das coisas mais fáceis de mexer. Uma vez precisei executar um REORG em todas as tabelas de um banco e passei trabalho pra conseguir. Tinha que executar em uma por vez e isso não é lá uma coisa muito bacana de fazer.
Achei na internet um comando muito prático pra realizar esse REORG, aproveito também pra deixar documentado como fazer o REORGCHK e o RUNSTAT em todas tabelas de uma base.
Primeiro você precisa se conectar a base que quer executar o REORG:
db2 connect to nome_da_base
Após isso basta executar o seguinte comando:
db2 -x "select 'reorg table',substr(rtrim(tabschema)||'.'||rtrim(tabname),1,50),';'from syscat.tables where type = 'T' " > reorg.out
Esse comando acima vai extrair os nomes das tabelas para dentro desse arquivo chamado reorg.out e junto com isso o comando para fazer o reorg. (Para conferir é só visualizar o conteúdo :))
Agora basta executar o script:
db2 -tvf reorg.out
Pronto, dessa maneira o REORG será executado em todas as tabelas do banco que você está conectado.
Para executar o REORGCHK o procedimento é o mesmo. Basta conectar-se no banco e execute:
db2 -x "select 'reorgchk update statistics on table',substr(rtrim(tabschema)||'.'||rtrim(tabname),1,50),';' from \ syscat.tables where type = 'T' " > reorgchk.out
E depois:
db2 -tvf reorgchk.out
Por sua vez pra executar o RUNSTATS em todas a tabelas, conecte-se ao banco e execute:
db2 -x "select 'runstats on table',substr(rtrim(tabschema)||'.'||rtrim(tabname),1,50),' and indexes all;'from \ syscat.tables where type = 'T' " > runstats.out
Assim que acabar execute:
db2 -tvf runstats.out
Pronto! Eu executo esses comandos algumas vezes, utilizo um sistema que fragmenta demais o banco e as vezes não consigo nem fazer backup, com esses comandos aí meu backup volta a funcionar.
Espero que ajude! Abraço!
André, bom dia! Sou novo no DB2, se perguntar algo insignificante desconsidere, mas o 1º comando o rodou de boa REORG, mas os outros dois ocorreram os mesmos erros abaixo:
REORGCHK e RUNSTAT deram este mesmo erro: DB21007E End of file reached while reading the command.
Obs.: Estou utilizando DB2 Express-C Win64bts se puder dar um ajudar, suas postagens aqui tem me ajudado muito. Desde já agradeço.
Bom dia, Marcos pelo erro que tu relatou ali deve ser erro na sintaxe do arquivo gerado no comando que faz o select, dá uma olhada no arquivo gerado e veja se os finais das linhas possuem o “;” certinho.
Eu rodo esses comandos no Linux, não sei se teria que mudar algo para o Windows, mas acredito que não.
Valeu!