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:
- DBA 101: administrando estruturas de dados do DB2: http://www.ibm.com/developerworks/br/local/data/dba_101_administrando_estruturas_dados_db2/index.html
- DB2 Essential Training I: http://bigdatauniversity.com/courses/course/view.php?id=121
- DB2 Essential Training II: http://bigdatauniversity.com/courses/course/view.php?id=243
- DB2 Academic Training – 302A Exam preparation: http://bigdatauniversity.com/courses/course/view.php?id=272
Até a próxima!
“A primeira qualidade de um bom DBA é ser um bom pesquisador”.