Data

17 set, 2013

Administração do DB2 em ambiente UNIX – Parte 02

Publicidade

Este é o segundo de uma série de dez artigos sobre conceitos de administração do DB2 em ambiente UNIX, conhecido oficialmente como DB2 LUW.

Este artigo continua o assunto sobre armazenamento e prevenção de perda de dados e trata da criação de bases de dados e instâncias.

Recomendo ao leitor interessado em acompanhar o curso que acesse o portal do DB2 para abaixar uma cópia do DB2 Express-C, edição gratuita do produto, ou então para obter instruções de como acessar e configurar uma instalação do DB2 rodando na nuvem. Para mais detalhes, clique aqui.

Aula 2 – Criando bancos de dados e instâncias

No DB2, os bancos de dados estão sempre associados a uma instância. E a instância, por sua vez, pode conter até 256 bancos de dados cadastrados.

Cada instância existente num servidor roda como um serviço independente, isto é, para todos os efeitos práticos, cada instância se comporta como um “servidor DB2”.

Via de regra, o proprietário de uma base de dados é o usuário que cria esta base, ou seja, o usuário que executa o comando “CREATE DATABASE”. É importante observar que DB2 em si não cria ou define usuários, pois a segurança de acesso ao DB2 está vinculada ao sistema operacional. Este assunto será abordado em mais detalhes em outro artigo desta série.

O proprietário do banco de dados tem direitos plenos sobre a base. Ele pode criar/destruir objetos, atribuir/revogar privilégios a outros usuários, executar rotinas de manutenção, ler, inserir, atualizar e excluir dados, etc. Outros usuários podem ser autorizados a executar estas ações, requerendo as devidas alterações nas suas autoridades de acesso à base.

A seguir, apresento listas de comando importantes para serem executados no nível de banco de dados e de instância.

Comandos importantes executados ao nível de banco de dados

Alguns comandos de banco de dados essenciais para o DBA:

  • Para criar um banco de dados:

db2  “create database NOME on CAMINHO”

  • Para destruir um banco de dados

db2 drop database NOME

  • Para listar bancos de dados em uma instância

db2 list database directory

  • Para catalogar uma nova base local ou externa

db2 catalog database NOME on CAMINHO

  • Para verificar parâmetros de operação do servidor

db2 values current server

  • Para identificar parâmetros de operação da base de dados

db2 get db cfg for NOME

Comandos importantes executados ao nível de banco de dados

No nível de instância, estes são os principais comandos:

  • Para criar ID para o dono da instância (em LINUX)

useradd IDINST –m –g GRUPO –d  /home/IDINST

  • Para criar uma instância

db2icrt  -u db2fenc1 IDINST    #db2icrt disponível no diretório de instalação do DB2

  • Para excluir uma instância

db2idrop IDINST  #db2idrop disponível no diretório de instalação do DB2

  • Para atualizar especificações de uma instância

db2iupdt –[parâmetro]   #db2iupdt disponível no diretório de instalação do DB2

  • Para listar instâncias existentes no servidor

db2ilist

  • Para identificar a instância ativa

db2 get instance

  • Para trocar a instância ativa por outra no mesmo servidor

db2 set db2instance = xxxx          # necessário ter direitos sobre esta instância

  • Para listar configurações do DB2 ao nível de instância

db2 get dbm cfg

Exemplos de uso e solução de problemas

Problema 1

É preciso criar uma instância nova para o usuário myinst e depois o próprio usuário deve verificar quais são as instâncias disponíveis no servidor, verificar qual é a instância ativa e listar as configurações do DB2 nesta instância.

Solução: aqui é preciso criar duas sessões SSH usando o PUTTY, por exemplo. Os comandos executados em cada uma das sessões são listadas a seguir.

  • echo “sessão 1, logada com o usuário root”
  • useradd myinst –m –g db2grp1 –d /home/myinst
  • passwd myinst
  • Blo
  • echo “sessão 2, logada com o usuário myinst”
  • db2crt –u db2fenc1 myinst
  • db2ilist
  • db2 get instance
  • db2 get dbm cfg

Problema 2

Identificar todos os BDs de todas instâncias do seu servidor.

Solução: Este é um processo repetitivo e o usuário que executá-lo precisa de direito de conexão em todas as instâncias do servidor:

  • echo “listar todas as instâncias”
  • db2ilist
  • echo “ativar a 1a instância (xxx)”
  • db2 set db2instance = xxx
  • echo “listar os DBs desta instância”
  • db2 list database directory
  • echo “conectar-se na próxima instância e repetir”
  • …….

Problema 3

Ocorreu um erro num procedimento armazenado e isso derrubou o serviço da instância DB2 MyInst! Por que isso aconteceu e o que deve ser feito para que este problema não ocorra mais?

Solução: Este problema seríssimo aconteceu por causa de um encadeamento de erros. Um deles é o próprio erro da procedure de um dos bancos, que derrubou o serviço da instância e tirou do ar todos os bancos de dados daquela instância.

Mas este não é o problema mais grave. O principal problema aqui é que a instância MyInst foi criada sem especificar um usuário protegido no qual devem rodar todos os  procedimentos armazenados e funções definidas pelo usuário.

Isso quer dizer que não existe um serviço para estes objetos programados que seja independente do serviço da própria instância. E é por isso que existe o risco de derrubar toda instância por causa e um erro de execução de um procedimento armazenado ou função de usuário.

  • db2iupdt –u db2fenc1

Para resolver isso, é preciso atualizar a configuração da instância, incluindo o usuário protegido padrão no DB2: db2fenc1, que é criado com a instalação do DB2. O comando quer resolve isso é apresentado a seguir:

Referências

O leitor interessado encontrará informações mais detalhadas nas seguintes referências:

Até a próxima!

“A primeira qualidade de um bom DBA é ser um bom pesquisador”.