De acordo com as Leis 12.965/2014 e 13.709/2018, que regulam o uso da Internet e o tratamento de dados pessoais no Brasil, ao me inscrever na newsletter do portal DICAS-L, autorizo o envio de notificações por e-mail ou outros meios e declaro estar ciente e concordar com seus Termos de Uso e Política de Privacidade.
Colaboração: Rafael Moraes da Costa
Data de Publicação: 24 de novembro de 2010
O DB2 é um RDBMS ( Relational DataBase Management System ) ou SGBDR ( Sistema Gerenciador de Bancos de Dados Relacionais ) criado pela IBM em 1983, inicialmente utilizado apenas em MainFrames, hoje trabalha com as mais variadas plataformas, incluindo Linux e Windows®. Não vamos nos prolongar muito nas história e utilização do DB2 e iremos direto à prática. Este artigo visa auxiliar novos administradores de bancos de dados DB2 em tarefas simples como a criação de instâncias, bases de dados e também dicas sobre os principais problemas encontrados por um aspirante a DBA. Partiremos do princípio de que o DB2 já está instalado, seja qual for a versão. Ao final do artigo você encontrará um link que traz um passo a passo para a instalação da versão gratuita, DB2 Express-C.
Ao se deparar com um banco de dados DB2, uma das primeiras coisas que o administrador precisa fazer é saber qual versão está em produção naquele ambiente.
Mostrar versão atual instalada:
$ db2level DB21085I Instance "db2inst1" uses "64" bits and DB2 code release "SQL09072" with level identifier "08030107". Informational tokens are "DB2 v9.7.0.2", "s100514", "IP23089", and Fix Pack "2". Product is installed at "/opt/ibm/db2/V9.7.2".
Se o DB2 está sendo utilizado apenas para fins educacionais, é aconselhável criar uma base de dados de exemplo, que possibilitará a execução de queries e outros comandos SQL.
Criar Base de Exemplo:
$ db2fs
Como já dito, bastante útil para fins de aprendizado, este comando abrirá o First Steps no seu browser, o que permitirá criar uma base de dados chamada SAMPLE.
O DB2 cria instâncias que gerenciam os bancos de dados, em um único servidor é possível que diversas instâncias coexistam, porém não existe interferência entre elas. É possível por exemplo, criar a base de dados "abcd" na "db2inst1" e uma base com o mesmo nome em "db2inst2".
Para listar todas as instâncias existentes:
$ db2ilist db2inst1 db2inst2
No DB2 cada instância está ligada a um usuário do sistema, até mesmo no momento da criação de uma nova instância é necessário declarar o usuário responsável por aquela instância. O usuário responsável pela instância não precisa ter necessariamente o nome da instância, contudo só é possível criar uma instância se existir um usuário com o nome da instância em questão. É claramente mais simples alinhar o usuário com o nome da instância para evitar desencontros de informação.
Criar nova instância:
db2icrt -u < usuario> < instancia> # db2icrt -u ninst ninst DBI1070I Program db2icrt completed successfully.
É possível que um usuário ainda sem experiência com o DB2 encontre alguns problemas ao criar uma instância, os erros normalmente estarão ligados ao nome de usuário e instância.
# db2icrt -u dba instancia03 DBI1101E The user name instancia03 is invalid. Explanation: The given user name must be the login name of an existing user and cannot: 1. be more than 8 characters long. 2. start with "sql", "ibm" or "sys". 3. start with a numeral or contain characters other than a-z, _, or 0-9.
Neste caso o usuário "dba" existe, assim como o usuário "instancia03" entretanto o nome da instância tem mais de 8 caracteres. Na saída do erro é possível visualizar outras possíveis causas de erros por nome. Nomes que iniciam com "sql", "ibm" e "sys" até mesmo nomes que começam com números ou contenham caracteres diferentes de "a-z", "_", ou "0-9". Novas instâncias só podem ser criadas pelo usuário root, portanto se o DB2 foi instalado com um usuário comum, existirá uma única instância.
Um usuário pode ter até 32 caracteres em um sistema Linux com libc6, mas para usá-lo com DB2 ele deve ter um máximo de 8 caracteres. Caso contrário será gerado um erro.
# db2icrt -u instancia04 db2t1 ERROR: The length of the fenced user name instancia04 is invalid. It must not be longer than 8
Conforme citado anteriormente, os erros são provenientes da falta de usuários, seja o usuário responsável pela instância ou o usuário que possui o mesmo nome da instância ( Caso já não seja o mesmo ):
# db2icrt -u ninst2 ninst DBI1131E The user ID ninst2 is invalid. Explanation: An attempt to access the given user ID failed. One of the following situations has occurred: * This user ID does not exist on the system. * The home directory of this user is not set up properly. * One of the user attributes needed by DB2 is unset. * The UID of this user is 0 User response: Make sure a valid user ID with valid home directory, shell, primary group and secondary group has been used. Create a new user if necessary. DBI1079I Output is saved in the log file /tmp/db2icrt.log.9942. Explanation: All processed and failed operations have been saved into this log file. User response: Do not modify this file in any way. This file is for IBM Technical Support reference. # db2icrt -u ninst ninst2 DBI1131E The user ID ninst2 is invalid. Explanation: An attempt to access the given user ID failed. One of the following situations has occurred: * This user ID does not exist on the system. * The home directory of this user is not set up properly. * One of the user attributes needed by DB2 is unset. * The UID of this user is 0 User response: Make sure a valid user ID with valid home directory, shell, primary group and secondary group has been used. Create a new user if necessary.
Após a criação bem sucedida de uma instância, liste novamente para verificar a aparição na lista com "db2ilist". Para usar uma instância deve-se efetuar o login com o usuário responsável pela instância ou declarar a variável DB2INSTANCE com o nome da instância.
# export DB2INSTANCE=db2inst2
Para verificar a instância atual:
# db2 get instance The current database manager instance is: db2inst3
Parar e iniciar uma instância:
Este conjunto de comandos é normalmente utilizado para que algumas mudanças realizadas na instância tenham efeito.
# db2stop SQL1064N DB2STOP processing was successful. # db2start SQL1063N DB2START processing was successful.
As instâncias são criadas com um conjunto de parâmetros pré-configurados, é possível visualizá-los através do comando:
#db2 get dbm cfg Database Manager Configuration Node type = Database Server with local and remote clients Database manager configuration release level = 0x0d00 CPU speed (millisec/instruction) (CPUSPEED) = 6,258561e-07 Max number of concurrently active databases (NUMDB) = 8 Federated Database System Support (FEDERATED) = NO Transaction processor monitor name (TP_MON_NAME) = Default charge-back account (DFT_ACCOUNT_STR) = Java Development Kit installation path (JDK_PATH) = /home/ninst/sqllib/java/jdk64
A nova instância será usada para a criação de uma base de dados e algumas alterações.
Para tal logue com o usuário "ninst"
# su - ninst
Inicie o Database Manager:
$ db2start SQL1063N DB2START processing was successful.
A criação de uma base de dados é simples, porém demora um pouco:
$ db2 create database banco01 DB20000I The CREATE DATABASE command completed successfully.
Com a base de dados pronta, é posível verificar as bases de dados ativas:
$ db2 list active databases Active Databases Database name = BANCO01 Applications connected currently = 1 Database path = /home/ninst/ninst/NODE0000/SQL00001/
Assim como as instâncias as bases de dados são criadas com uma série de parâmetros pré-configurados;
Para visualizá-los é necessário conectar-se a base de dados em questão:
$ db2 connect to banco01 Database Connection Information Database server = DB2/LINUXX8664 9.7.2 SQL authorization ID = NINST Local database alias = BANCO01
Só então use o comando para listar:
$ db2 get db cfg Database Configuration for Database Database configuration release level = 0x0d00 Database release level = 0x0d00 Database territory = BR Database code page = 1208 Database code set = UTF-8 Database country/region code = 55 Database collating sequence = IDENTITY Alternate collating sequence (ALT_COLLATE) = Number compatibility = OFF Varchar2 compatibility = OFF Date compatibility = OFF Database page size = 4096
Exclusão de Bases de Dados e Instâncias:
A exclusão de bases de dados e instâncias é tão simples quanto a criação.
$ db2 drop db banco01 SQL1035N The database is currently in use. SQLSTATE=57019
Repare que mais acima foi feito uma conexão a esta base de dados, sendo assim o DB2 acusa que está sendo usada e não exclui.
Listagem de aplicações conectadas:
$ db2 list applications Auth Id Application Appl. Application Id DB # of Name Handle Name Agents -------- ------ -------- ---------- ------ ------ ------ ------ ------ ------ ------ ------ ------ -------- -------- ----- NINST db2bp 17 *LOCAL.ninst.100928182533 BANCO01 1
Listará todas as aplicações conectadas e neste caso é a "db2bp" que se trata do processo que se conecta à base de dados.
Para finalizar a conexão usamos o comando:
$ db2 force application all DB20000I The FORCE APPLICATION command completed successfully. DB21024I This command is asynchronous and may not be effective immediately.
Força a finalização das conexões de aplicativos. Mas não se assustem, ele não irá finalizar tudo e todos, usuários que estão criando bases de dados e aplicações do sistema não podem ser derrubados desta maneira. Apenas usuários inativos e processos ininterruptos.
Mais detalhes em "Usage Notes" http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0001939.htm
Agora a base de dados será excluída sem erros:
$ db2 drop db banco01 DB20000I The DROP DATABASE command completed successfully.
Com a base excluída é hora de excluir a instância:
Pare a instância:
$ db2stop SQL1064N DB2STOP processing was successful.
Exclua a instância:
# db2idrop ninst DBI1070I Program db2idrop completed successfully.
Liste as instâncias:
# db2ilist db2inst3
Como é possível ver, apenas a instância db2inst3 é listada, pois "ninst" foi removida.
O que foi abordado até aqui é apenas uma introdução à Administração de Bancos de Dados DB2, o futuro administrador já é capaz de criar e remover instâncias e bases de dados e também levantar algumas informações básicas sobre a pré-configuração de bases de dados e instâncias.
Rafael Moraes, é Analista de Suporte e Infraestrutura para sistemas Linux e também Instrutor em cursos preparatórios LPI. Possui as certificações LPIC-1, LPIC-2, ITIL Foundations e CISCO CCDA.
This policy contains information about your privacy. By posting, you are declaring that you understand this policy:
This policy is subject to change at any time and without notice.
These terms and conditions contain rules about posting comments. By submitting a comment, you are declaring that you agree with these rules:
Failure to comply with these rules may result in being banned from submitting further comments.
These terms and conditions are subject to change at any time and without notice.
Comentários