1 - Livro - DB2
1 - Livro - DB2
1 - Livro - DB2
DB2 Express-C
Um livro da comunidade para a comunidade
TERCEIRA EDIÇÃO
4 Primeiros passos com o DB2 Express-C
2.5 Resumo.................................................................................................................. 42
Capítulo 3 – Instalação do DB2 ..................................................................................... 43
3.1 Pré-requisitos de instalação .................................................................................. 43
3.2 Autoridade de instalação do sistema operacional ................................................. 43
3.3 Assistente de instalação ........................................................................................ 44
3.4 Validação da instalação ......................................................................................... 51
3.5 Instalação silenciosa .............................................................................................. 53
3.6 Resumo.................................................................................................................. 54
3.7 Exercícios .............................................................................................................. 54
Capítulo 4 – Ambiente do DB2....................................................................................... 59
4.1 Configuração do DB2 ............................................................................................ 67
4.1.1 Variáveis de ambiente .................................................................................... 68
4.1.2 Arquivo de configuração de gerenciador de banco de dados (dbm cfg)........ 69
4.1.3 Arquivo de configuração de banco de dados (db cfg) .................................... 71
4.1.4 Registro de perfil do DB2................................................................................ 72
4.2 O DB2 Administration Server (obsoleto) ............................................................... 73
4.3 Resumo.................................................................................................................. 74
4.4 Exercícios .............................................................................................................. 74
Capítulo 5 – Ferramentas do DB2 ................................................................................. 79
5.1 IBM Data Studio ..................................................................................................... 81
5.2 Control Center (obsoleto) ...................................................................................... 82
5.2.1 Como iniciar o Control Center ........................................................................ 85
5.3 Command Editor (obsoleto) ................................................................................... 86
5.3.1 Inicialização do Command Editor ................................................................... 86
5.3.2 Como adicionar uma conexão com banco de dados ..................................... 87
5.4 Assistente SQL Assist (obsoleto) .......................................................................... 88
5.5 Botão Show SQL (obsoleto) .................................................................................. 89
5.6 Task Center (obsoleto) .......................................................................................... 90
5.6.1 O banco de dados Tools Catalog (obsoleto) .................................................. 90
5.7 Journal (obsoleto) .................................................................................................. 92
5.7.1 Inicialização do Journal .................................................................................. 93
5.8 Health Monitor (obsoleto) ...................................................................................... 93
5.8.1 Health Center (obsoleto)................................................................................. 94
5.9 Gerenciador de memória autoajustável ................................................................. 96
5.10 Criação de scripts ................................................................................................ 96
5.10.1 Scripts SQL ................................................................................................... 96
5.10.2 Scripts de sistema operacional (shell). ......................................................... 98
5.11 Considerações sobre o Windows Vista ............................................................... 98
5,12 Resumo................................................................................................................ 99
5,13 Exercícios ............................................................................................................ 99
PART II – APRENDENDO O DB2: ADMINISTRAÇÃO DO BANCO DE DADOS ........ 105
Capítulo 6 – Arquitetura do DB2.................................................................................. 106
6.1 O modelo de processo do DB2............................................................................ 106
6.2 O modelo de memória do DB2 ............................................................................ 108
6.3 O modelo de armazenamento do DB2 ................................................................ 109
Índice 7
A IBM não oferece nenhuma representação ou garantia no que diz respeito ao conteúdo deste livro,
e nega especificamente quaisquer garantias de comerciabilidade ou adequação para um propósito
específico. A IBM não assume a responsabilidade por qualquer erro que possa aparecer neste
documento. As informações contidas neste documento estão sujeitas a alterações sem aviso prévio.
A IBM se reserva o direito de fazer qualquer alteração sem a obrigação de notificar qualquer pessoa
sobre tais revisões ou alterações. A IBM não assume qualquer compromisso de manter atualizadas
as informações aqui contidas.
As informações neste documento sobre produtos não pertencentes à IBM foram obtidas dos
fabricantes desses produtos. A IBM não testou esses produtos e não pode confirmar a precisão dos
dados sobre desempenho, compatibilidade ou qualquer outra afirmação relacionada a tais produtos
não pertencentes à IBM. As dúvidas sobre os recursos dos produtos não pertencentes à IBM devem
ser encaminhadas aos fornecedores desses produtos.
IBM, o logotipo IBM e ibm.com são marcas comerciais ou registradas da International Business
Machines Corp., registradas em muitas jurisdições em todo o mundo. Outros nomes de produtos e
serviços podem ser marcas comerciais da IBM ou de outras empresas. Uma lista atual das marcas
comerciais da IBM está disponível na Web em “Copyright and trademark information” (Informações
sobre direitos autorais e marcas comerciais) em www.ibm.com/legal/copytrade.shtml (em
inglês).www.ibm.com/legal/copytrade.shtml.
Java e todas as marcas comerciais baseadas em Java e os logotipos são marcas comerciais da Sun
Microsystems, Inc. nos Estados Unidos e/ou em outros países.
Microsoft e Windows são marcas registradas da Microsoft Corporation nos Estados Unidos, em
outros países ou ambos.
Linux é marca comercial registrada de Linus Torvalds nos Estados Unidos, em outros países e ou
em ambos.
UNIX é uma marca registrada de The Open Group nos Estados Unidos e/ou em outros países.
Outras empresas, nomes de serviços ou produtos podem ser marcas comerciais ou marcas de
serviço de terceiros.
As referências feitas nesta publicação a produtos ou serviços IBM não pressupõem uma intenção da
IBM de torná-los disponíveis em todos os países nos quais opera.
12 Primeiros passos com o DB2 Express-C
Observação:
Para obter mais informações sobre o programa DB2 on Campus, assista ao vídeo em:
http://www.channeldb2.com/video/video/show?id=807741:Video:3902
Agora em sua terceira edição, fizemos algumas alterações e adições. Para aqueles que
leram a segunda edição do livro, abrangendo o DB2 9.5, estamos facilitando a busca de
alterações no livro que correspondem às novas funções ou atualizações na versão 9.7 do
DB2. As alterações podem ser facilmente identificadas através deste ícone:
Sobre este livro 13
Autores e colaboradores
As pessoas abaixo forneceram conteúdo e outras contribuições significativas para este
livro.
Agradecimentos
Agradecemos imensamente aos indivíduos a seguir, por sua assistência e pelos materiais
de desenvolvimento mencionados neste livro:
Ted Wasserman, Clara Liu e Paul Yip do Laboratório da IBM em Toronto, que
desenvolveram materiais que serviram como a estrutura deste livro.
Don Chamberlin e Cindy Saracco por seus arquivos sobre XQuery no IBM
developerWorks e Matthias Nicola por suas apresentações sobre pureXML.
Kevin Czap e Grant Hutchison por desenvolver materiais de resumo técnico sobre
DB2.
Katherine Boyachok e Natasha Tolub pelo design da capa deste livro.
Susan Visser por revisar e fornecer assistência na publicação deste livro.
Sobre este livro 15
Prefácio
A inovação é a base do progresso tecnológico. Na IBM, inovação é uma parte integral da
evolução de nosso servidor de dados. Pioneira das técnicas de gerenciamento de dados
dos anos 1960 e 1970, a IBM continua a fornecer tecnologias inovadoras de
gerenciamento de informação, o que se reflete nos milhares de patentes de
gerenciamento de dados de autoria dos tecnólogos da IBM. Como resultado, algumas das
maiores organizações do mundo dependem de produtos IBM, incluindo o DB2, para
sustentar suas soluções de gerenciamento de dados mais exigentes e de missão crítica.
Entretanto, o DB2 não é mais apenas destinado a grandes empresas. Com o lançamento
do DB2 Express-C, a premiada tecnologia DB2 agora está disponível para pequenas e
médias empresas – e sem custo! Embora haja outros servidores de dados gratuitos ou de
código aberto disponíveis, o DB2 Express-C oferece vantagens exclusivas sobre essas
alternativas.
Há muitos avanços tecnológicos presentes no DB2 Express-C. Estas inovações fornecem
novas capacidades, reduzem os encargos administrativos, aumentam o desempenho e
reduzem o custo com infraestrutura.
A tecnologia híbrida do DB2 Express-C é capaz de gerenciar dados relacionais e XML em
seus formatos nativos. Isto torna o DB2 ideal para estruturar a nova geração de aplicativos
SOA e Web 2.0, na qual os dados XML fluem em abundância. Diferente de outros
servidores de dados “gratuitos”, o DB2 Express-C não limita a quantidade de dados que
podem ser armazenados em um banco de dados, ou o número de bancos de dados que
podem ser criados em um sistema. E, é claro, se você precisar de suporte ou assistência
da IBM, a ajuda está à distância de um clique.
Este livro serve como guia de primeiros passos e utilização do DB2 Express-C. Ele irá
ajudá-lo a compreender os conceitos do DB2 e possibilitar que você desenvolva
habilidades de administração e desenvolvimento de aplicativos do DB2. As habilidades e
conhecimentos que você irá obter são relevantes para as outras edições avançadas de
DB2 em Linux, UNIX e Windows.
Embora o DB2 Express-C não seja um produto de código aberto, a IBM acredita muito em
fornecer suporte e promover as iniciativas comunitárias. Estou encantado por este livro ser
desenvolvido pelos membros da comunidade de DB2 Express-C e estar disponível
gratuitamente para qualquer pessoa da comunidade. Encorajo você a enriquecer e
atualizar este livro com seus próprios conhecimentos e experiências, e também a auxiliar
na tradução deste livro para outros idiomas, para que outras pessoas possam se
beneficiar também.
Arvind Krishna
Gerente geral
Gerenciamento de informação, IBM Software Group
PARTE I – VISÃO GERAL E
CONFIGURAÇÃO
Capítulo 1 – O que é o DB2 Express-C?
1
O software de servidor de dados DB2 Express-C (“DB2 Express-C”) é membro da família
IBM DB2, um poderoso software de servidor de dados para gerenciar dados relacionais e
XML. O DB2 Express-C é uma edição gratuita, ilimitada e fácil de usar do DB2. O ‘C’ em
DB2 Express-C significa Comunidade. Uma comunidade de usuários do DB2 Express-C
que se une para ajudar uns aos outros, seja on-line ou off-line. A comunidade do DB2
Express-C consiste em todo tipo de pessoas e empresas que projetam, desenvolvem,
implementam ou utilizam soluções de bancos de dados. Os membros da comunidade
incluem:
Desenvolvedores de aplicativos que necessitam de um software de banco de
dados com padrões abertos para construir aplicativos independentes, cliente-
servidor, baseados na web e corporativos
ISVs, fornecedores de hardware, fornecedores de pilha de infraestrutura e
fornecedores de outros tipos de solução que desejam montar um pacote ou
incorporar um servidor de dados completo como parte de suas soluções
Consultores, administradores de bancos de dados e arquitetos de TI que
necessitam de um servidor de dados robusto para treinamento, capacitação,
avaliação e prototipagem
Empresas recém-iniciadas, pequenas e médias que necessitam de um servidor de
dados confiável para suas aplicações e operações
Hobistas de bancos de dados e entusiastas de tecnologia de ponta que desejam
um servidor de dados fácil de usar para construir aplicativos Web 2.0 e de próxima
geração
Estudantes, professores e outros usuários acadêmicos que desejam um servidor
de dados altamente versátil para ensinar, material de curso, projetos e pesquisa
O DB2 Express-C compartilha a mesma funcionalidade principal e base de código das
outras edições pagas do DB2 para Linux, UNIX e Windows. O DB2 Express-C pode ser
executado em sistemas de 32 ou 64 bits com os sistemas operacionais Linux ou Windows.
Ele também está disponível em Solaris (x64) e como versão beta em Mac OS X (x64).
Pode ser executado em sistemas com qualquer quantidade de processadores e memória,
e não tem qualquer requisito especial de armazenamento ou configuração de sistema. O
DB2 Express-C também inclui pureXML sem qualquer custo. O pureXML é uma tecnologia
exclusiva do DB2 que armazena e processa documentos XML na forma nativa.
20 Primeiros passos com o DB2 Express-C
DB2 Express-C
Extra Extra Extra
+ functionality + functionality + functionality
A Figura 1.1 também explica porque a atualização do DB2 Express-C é tão fácil. Se você desejar
atualizar para qualquer um dos servidores DB2 no futuro, todos os servidores DB2 têm os
mesmos componentes principais. Isto também significa que qualquer aplicativo desenvolvido
para uma edição funcionará, sem modificações, nas outras edições. E qualquer habilidade que
você aprender em uma edição poderá ser aplicada às outras edições.
No lado esquerdo da Figura 1.2 são mostrados todos os clientes e drivers do DB2.
Embora todos os clientes do DB2 incluam os drivers necessários, a partir do software de
servidor de dados DB2 (“DB2”) v.9 fornecemos os drivers individuais também. Todos os
clientes e drivers do DB2 são gratuitos e estão disponíveis para download do site do DB2
Express-C. Os clientes e drivers podem ser usados para se conectar a um servidor DB2
em Linux, UNIX ou Windows. Para se conectar a um DB2 para z/OS® ou DB2 para
servidor i5/OS®, será necessário passar por um servidor DB2 Connect™ (mostrado no
meio da Figura 1.2). Discutiremos o software DB2 Connect (“DB2 Connect”) no Capítulo 2.
Observação:
Embora o foco deste livro seja sobre o servidor de dados DB2, os clientes do IBM Data
Server também podem se conectar a outros servidores de dados da família IBM, como o
Informix. Daí o nome genérico “IBM Data Server client” (cliente de servidor de dados da
IBM) em vez do mais específico “DB2 client” (cliente DB2).
Observação:
Embora as capacidades espaciais com o DB2 já estejam disponíveis há quase 10 anos,
poucos usuários as conhecem. Você pode tirar proveito do DB2 Spatial Extender
gratuitamente em todas as edições do DB2, incluindo o DB2 Express-C. O Spatial
Extender permite trabalhar com dados espaciais e geodéticos usando SQL. Por exemplo,
esta capacidade pode ajudar a responder perguntas como “Qual é a loja de varejo mais
próxima de cada cliente que reside em Toronto e gastou mais de US$ 3000 no ano
passado conosco?” Você pode até mesmo usar o DB2 Spatial Extender em aplicações de
saúde. Por exemplo, ele poderia ajudar a responder à pergunta “Quais são os padrões de
células malignas em uma ressonância magnética do cérebro?”
Para obter mais informações, consulte o tópico Sobre o DB2 Spatial Extender no Centro
de Informações do IBM DB2 Database para Linux, UNIX e Windows Information.
1.11 Resumo
A edição DB2 Express-C oferece gratuitamente um produto que está entre os melhores do
mercado. Ele oferece a liberdade de desenvolver, implementar e distribuir sem qualquer
limitação de tamanho de banco de dados, enquanto ainda inclui a mesma funcionalidade
principal e tecnologia pureXML das outras edições do DB2. O DB2 Express-C suporta uma
ampla variedade de clientes, drivers e linguagens de desenvolvimento e fornece um
caminho de atualização simples para as outras edições do DB2.
Capítulo 2 – Funções e produtos relacionados
2
Este capítulo descreve as funções do DB2 incluídas na compra de uma licença de
assinatura anual (Licença por período fixo ou FTL) do DB2 Express. Ele também descreve
as funções incluídas nas outras edições do DB2, em alguns casos por um valor adicional.
* As funções incluídas na assinatura estão disponíveis somente durante a validade das assinaturas.
** O preço da assinatura é para os Estados Unidos e sujeito a alterações sem aviso prévio. O preço em outros
países pode variar.
*** A assistência gratuita baseada em comunidade está disponível através do fórum on-line.
A Tabela 2.2 lista as funções do produto e indica se estão incluídas nas diferentes edições
do DB2 9.7. As funções adquiridas separadamente são listadas por nome na edição
correspondente do DB2 e realçadas com fundo cinza claro.
Paralelismo de consulta
Concentrador de conexão
Governador
Recursos do DB2 Enterprise Edition passíveis de cobrança
Recurso de otimização de armazenamento (inclui compactação)
Controle avançado de acesso (refinado e segurança avançada)
Otimização de desempenho (Gerenciamento de carga de trabalho, Performance
Expert, Query Patroller)
Gerenciamento de dados geodéticos (análise de localização geográfica)
Produtos relacionados ao DB2 com taxa:
DB2 Connect
InfoSphere Warehouse Editions
InfoSphere Balanced Warehouse
WebSphere Federation Server
WebSphere Replication Server
recebidos os logs do banco de dados principal, eles são repetidos e aplicados ao banco de
dados secundário. Através de uma repetição contínua dos registros de log, o banco de
dados secundário mantém uma réplica sincronizada do banco de dados principal, que
pode assumir caso ocorra uma falha do banco de dados principal.
Uma solução HADR com suporte a DB2 completa oferece:
Capacidade de failover ultra-rápida, com transparência completa para clientes e
aplicativos cliente
Atomicidade completa de transações para evitar a perda de dados
A capacidade de atualizar sistemas ou aplicativos sem interrupção visível dos
serviços
Failover remoto do sistema, fornecendo recuperação completa de desastres locais
que tenham atingido o centro de dados
Gerenciamento simples com as ferramentas gráficas do DB2
Tudo isso com um impacto desprezível sobre o desempenho geral do sistema
Observação:
Para assistir a uma demonstração do funcionamento do HADR, visite:
http://www.ibm.com/software/data/db2/express/demo.html
O DB2 9.7 terá a nova capacidade de permitir que os clientes leiam o servidor de reserva.
Esta capacidade de "leitura de reserva" deverá estar disponível com o DB2 9.7 Fixpack 1.
cada partição de banco de dados possui um subconjunto dos dados gerais em seus
próprios discos independentes.
À medida que é adicionado ao cluster de bancos de dados, cada computador traz poder
de processamento de dados adicional com suas próprias CPUs, memória e discos,
permitindo que tarefas grandes e consultas complexas sejam divididas em pedaços
menores e distribuídas pelos diversos nós de bancos de dados para serem executadas em
paralelo. Isto resulta em uma concorrência mais alta e tempos de resposta mais rápidos
do que seria possível se o banco de dados residisse em um único servidor. O DPF é
particularmente útil em grandes ambientes de depósito de dados e cargas de trabalho de
inteligência de negócios envolvendo qualquer valor de uma centena de gigabytes até
diversas centenas de terabytes de dados.
O WLM foi aperfeiçoado ainda mais no DB2 9.7 e fornece capacidades mais poderosas
que o Query Patroller e as ferramentas DB2 Governor disponíveis com as versões
anteriores do DB2.
2.5 Resumo
O DB2 Express-C fornece uma base gratuita e fácil de usar para o desenvolvimento de
aplicativos de bancos de dados, sua implementação na produção, e até mesmo
incorporação e distribuição dos aplicativos em soluções de terceiros. É ideal caso você
fique à vontade com assistência baseada em comunidade e não tenha necessidade das
correções mais recentes ou de recursos avançados. Entretanto, se você necessita de
suporte técnico formal da IBM, atualizações de software (fixpacks) regulares ou utilização
de recursos adicionais e suporte a clustering de alta disponibilidade, a IBM oferece uma
licença de assinatura (FTL) do DB2 Express por uma taxa anual baixa. Se necessitar de
recursos ainda mais avançados para cargas de trabalho de missão crítica e aplicações de
banco de dados em larga escala, a IBM oferece edições do DB2 mais redimensionáveis e
produtos relacionados. Isto permite que você comece pequeno com o DB2 Express-C e
possa expandir para novos patamares de acordo com a demanda dos seus negócios.
Capítulo 3 – Instalação do DB2
3
A instalação do DB2 é razoavelmente simples e, em uma instalação típica, basta
selecionar as opções padrão para ter o servidor DB2 instalado e funcionando em pouco
tempo.
Primeiro, faça o download da imagem do DB2 Express-C apropriada à sua plataforma no
site do DB2 Express-C (www.ibm.com/db2/express).
sem acesso root, não é possível criar mais instâncias do que a única instância padrão
criada no momento da instalação.
No Windows, a conta de usuário deve pertencer ao grupo dos Administradores na
máquina onde a instalação será realizada. Como alternativa, no Windows 2008, Windows
Vista ou posterior, um não administrador pode realizar uma instalação, mas as credenciais
de administrador serão solicitadas pelo Assistente de configuração do DB2.
O ID do usuário de instalação deve pertencer ao grupo dos Administradores de domínio
caso a instalação exija a criação ou confirmação de uma conta de domínio.
Você também pode usar a conta integrada do sistema local para executar a instalação,
embora não seja recomendado. A conta de sistema local não exige senha, mas não pode
acessar os recursos de rede.
A conta de usuário também deve ter a permissão “Acessar este computador através da
rede”.
Observação:
Assista a uma apresentação em vídeo sobre a instalação do DB2 Express-C neste link.
Embora esta apresentação esteja demonstrando o DB2 9.5, a única diferença de uma
instalação do DB2 9.7 está na cor dos painéis de instalação:
http://www.channeldb2.com/video/video/show?id=807741:Video:4442
A Figura 3.1 mostra o DB2 Setup Launchpad. Clique em Install a Product (Instalar um
produto) e selecione Install New (Instalar novo) para instalar uma nova cópia do DB2
Express-C em seu sistema. Se você já instalou o DB2 Express-C ou outra edição do DB2
anteriormente, poderá haver um botão com o nome “Work with Existing” (Trabalhar com o
existente). No DB2, você pode instalar o produto diversas vezes, e essas instalações
podem ser de versões ou níveis de atualização diferentes.
Na próxima etapa, como mostrado na Figura 3.3, você pode optar por instalar o produto,
criar um arquivo de resposta ou ambos. Os arquivos de resposta são discutidos na seção
3.4, Instalação silenciosa. Escolha a opção padrão (“Install IBM DB2 Express Edition on
this computer and save my settings in a response file”) (Instalar o IBM DB2 Express
Edition neste computador e salvar minha configuração em um arquivo de resposta).
Selecione os valores padrão das próximas telas. Ao chegar no painel mostrado na Figura
3.4, você precisará digitar um ID de usuário, que será usado para configurar e executar a
instância e outros serviços.
Se usar um ID de usuário existente, este deve fazer parte do grupo Administrador local do
Windows.
Se o ID de usuário não pertencer a um usuário existente, ele será criado como
Administrador local. Você pode deixar o campo domínio em branco se o ID de usuário não
pertencer a um domínio.
O nome do ID de usuário padrão do Windows é db2admin. No caso do Linux, o ID de
usuário padrão criado é denominado db2inst1.
db2val: Este é um novo comando disponível no DB2 9.7. Ele valida sua instalação
através da verificação da funcionalidade principal de sua cópia do DB2. Isto
assegura que suas instâncias estejam consistentes e que a criação de banco de
dados e as conexões de banco de dados funcionem.
A Figura 3.8 abaixo mostra um exemplo da saída destes três comandos.
Figura 3.8 – Os comandos db2level, db2licm e db2val para validar sua instalação
Na figura, a saída do comando db2level indica que o DB2 9.7 (DB2 v9.7.0.441) com Fix
Pack 0 está sendo executado, o que significa que seu código do DB2 está no nível básico
(GA) sem nenhuma correção aplicada. O comando db2licm -l indica que você instalou
a edição DB2 Express-C, que possui uma licença permanente e sem garantia permitindo o
uso de até dois núcleos e até 2GB de memória. A saída do comando db2val explica-se
por si mesma.
Observação:
Se desejar validar a consistência de um banco de dados a qualquer momento, use o
utilitário INSPECT.
Capítulo 3 – Instalação do DB2 53
PROD=UDB_EXPRESS_EDITION
LIC_AGREEMENT=ACCEPT
FILE=C:\Program Files\IBM\SQLLIB\
INSTALL_TYPE=TYPICAL
LANG=EN
INSTANCE=DB2
DB2.NAME=DB2
DEFAULT_INSTANCE=DB2
DB2.SVCENAME=db2c_DB2
DB2.DB2COMM=TCPIP
...
Listagem 3.1 – Uma amostra de arquivo de resposta
Há diversas maneiras de gerar um arquivo de resposta:
Instale o DB2 Express-C uma vez em um computador usando o assistente de
instalação do DB2. Uma das primeiras opções do assistente (como mostrado na
Figura 3.3) permite selecionar a opção de salvar suas respostas de instalação em
um arquivo de respostas. Ao final da instalação, o assistente gera um arquivo de
resposta em um diretório e com um nome de arquivo especificados. Este é um
arquivo de texto que pode ser editado manualmente mais tarde.
Edite a amostra de arquivo de resposta fornecido com a imagem do DB2 Express-
C. Esta amostra de arquivo (indicado pela extensão de arquivo .rsp) está localizada
no diretório db2/platform/samples/
No Windows, você também pode usar o comando gerador de arquivo de resposta:
db2rspgn –d <output directory>
Finalmente, para instalar o DB2 silenciosamente usando um arquivo de resposta, execute
o comando abaixo no Windows:
setup -u <response filename>
No Linux, execute o comando:
db2setup -r <response filename>
54 Primeiros passos com o DB2 Express-C
3.6 Resumo
Este capítulo cobriu os detalhes da instalação do DB2 Express-C. Esta edição do DB2
está disponível em Linux, Solaris e nas diversas versões do Windows, e pode ser
executada nas arquiteturas de 32 bits, 64 bits e Power PC. Após discutir a autoridade de
usuário necessária para instalar o DB2 em um sistema, apresentamos uma descrição de
uma instalação simples usando a GUI do assistente de instalação do DB2. Em seguida,
discutimos as atividades posteriores à instalação, incluindo a execução do DB2 First Steps
e a validação da instalação. Finalmente, examinamos como criar e executar uma
instalação silenciosa usando os arquivos de resposta do DB2.
3.7 Exercícios
Neste exercício, você instalará o DB2 Express-C e criará o banco de dados SAMPLE
(AMOSTRA)
Objetivo
Antes de começar a explorar as funções e ferramentas fornecidas com o DB2 Express-C,
você deve instalá-lo em seu sistema. Neste exercício, você irá executar uma instalação
básica do DB2 Express-C em Windows. O mesmo assistente de instalação está disponível
para Linux, portanto as etapas são muito parecidas nesta outra plataforma.
Procedimento
1. Obtenha as imagens do DB2 Express-C: Faça o download da imagem do DB2
Express-C no site do DB2 Express-C (www.ibm.com/db2/express). Descompacte
os arquivos em qualquer diretório que desejar.
2. Localize os arquivos: Navegue até o diretório (ou unidade) contendo os arquivos
de instalação do produto DB2.
3. Execute o DB2 Setup Launchpad: Para iniciar o DB2 Setup Launchpad, dê um
clique duplo no arquivo setup.exe. No Linux, execute o comando db2setup na
raiz. No Launchpad, clique na opção Install Product (Instalar produto) no painel
esquerdo da janela.
4. Execute o assistente de configuração do DB2: O assistente de configuração do
DB2 verifica se todos os requisitos de sistema foram atendidos e se há alguma
instalação do DB2 anterior. Clique em Install New (Instalar novo) para iniciar o
assistente e clique em Next (Avançar).
5. Leia o contrato de licença: Leia e aceite o contrato de licença (selecione o botão
“I Accept...” (Eu aceito)) e clique no botão Next para continuar.
6. Selecione o tipo de instalação: Neste exercício, selecione a opção Typical (Típica,
esta é a opção padrão). A opção Compact (Compacta) realiza uma instalação
básica, enquanto a opção Custom (Personalizada) permite personalizar as
funções específicas que você deseja instalar. Clique no botão Next para continuar.
Capítulo 3 – Instalação do DB2 55
Drive: C:
13. O banco de dados SAMPLE é um banco de dados que você poderá usar para fins
de teste. Ele pode ser criado através do First Steps, clicando no botão Create
SAMPLE database (Criar banco de dados SAMPLE). Clique neste botão e a
janela abaixo será aberta. Selecione a segunda opção (XML and SQL objects and
data) (Objetos e dados XML e SQL). O banco de dados SAMPLE também pode
ser criado com o comando db2sampl -xml -sql.
14. Após alguns minutos, você pode confirmar a criação do banco de dados. Abra a
ferramenta DB2 Control Center, selecionando: Iniciar -> Programas -> IBM DB2 ->
DB2COPY1 (Default) -> General Administration Tools -> Control Center . Você
também pode iniciar o Control Center com o comando db2cc. Na primeira vez em
que abrir o Control Center, uma janela pop-up solicitará que você escolha a
visualização do Control Center que deseja usar. Deixe no padrão (Advanced) e
clique em OK. No painel da esquerda, vá até a pasta All Databases (Todos os
bancos de dados). Se não conseguir ver o banco de dados SAMPLE nesta pasta,
atualize a visualização, selecionando View -> Refresh (Visualização -> Atualizar).
15. Reinicie o computador. Esta etapa é opcional. Embora esta etapa não seja
mencionada na documentação oficial de instalação do DB2, recomendamos
reiniciar o sistema (se possível, pelo menos no Windows) para assegurar que
Capítulo 3 – Instalação do DB2 57
todos os processos sejam iniciados com sucesso e para liberar qualquer recurso
de memória que não tenha sido liberado corretamente.
16. Valide sua instalação do DB2, executando os comandos: db2level, db2licm e
db2val. No menu Iniciar do Windows, abra a Janela de comando do DB2: Iniciar
-> Programas -> IBM DB2 -> DB2COPY1 (Default) -> Command Line Tools ->
Command Window. Na Command Window (Janela de commando) (ou no shell do
Linux) digite db2level e examine a saída. Faça o mesmo com o comando
db2licm -l. Em seguida, execute o comando db2val. Se o comando db2val
for executado com sucesso, sua instalação está correta! Se houver algum erro,
verifique os detalhes no arquivo de log especificado na mensagem de erro. A
saída dos três comandos deve ser semelhante às mostradas anteriormente na
Figura 3.8.
Capítulo 4 – Ambiente do DB2
4
O ambiente do DB2 inclui objetos de bancos de dados e arquivos de configuração
diferentes. A Figura 4.1 fornece uma visão geral dos diversos comandos e ferramentas
para trabalhar com o DB2, e também destaca o ambiente do DB2 no lado direito. Esta é a
área de foco deste capítulo. O lado esquerdo da figura mostra os diversos comandos do
DB2 e as instruções SQL, SQL/XML e XQuery que podem ser executadas para interagir
com um servidor de dados DB2. O meio da figura mostra os nomes das diferentes
ferramentas usadas para interagir com um servidor de dados DB2.
Observação:
Assista às apresentações em vídeo sobre o Ambiente do DB2 nestes links:
http://www.channeldb2.com/video/video/show?id=807741:Video:4029
http://www.channeldb2.com/video/video/show?id=807741:Video:4042
Para descrever o ambiente do DB2, vamos descrever cada elemento componente passo a
passo. A Figura 4.2 mostra uma representação de um servidor de dados DB2 após a
instalação do DB2 Express-C 9.7.
Figura 4.2 – Representação de um servidor DB2 após instalar o DB2 Express-C 9.7
Como parte da instalação no Windows, é criada uma instância padrão denominada DB2
(db2inst1 no Linux). Esta é representada pela caixa verde no lado esquerdo da Figura
4.3. Uma instância é simplesmente um ambiente independente onde se pode executar
aplicativos e criar bancos de dados. Você pode criar diversas instâncias em um servidor
de dados e usá-las para finalidades diferentes. Por exemplo, uma instância pode ser
usada para conter bancos de dados para uso em produção, outra instância pode ser
usada como ambiente de teste de bancos de dados e outra como ambiente de
desenvolvimento. Todas estas instâncias são independentes, ou seja, executar operações
em uma instância não afeta as outras.
Para criar uma nova instância do DB2, use o comando db2icrt <instance name>,
onde <instance name> é substituído por qualquer nome com 8 caracteres. Por
exemplo, para criar a instância myinst, usamos este comando: db2icrt myinst.
A Figura 4.4 mostra uma nova instância denominada myinst como uma caixa verde
separada no lado direito.
Comando Descrição
Para criar um banco de dados na instância ativa, execute este comando na Janela de
comando do DB2:
db2 create database mydb1
Para listar todos os bancos de dados, execute o comando:
db2 list db directory
É possível criar diversos bancos de dados dentro de qualquer instância. Um banco de
dados é uma coleção de objetos como tabelas, visualizações, índices e assim por diante.
Os bancos de dados são unidades independentes, portanto não compartilham objetos com
outros bancos de dados. A Figura 4.6 mostra a representação do banco de dados MYDB1
criado dentro da instância DB2.
Se desejarmos criar outro banco de dados com o mesmo nome (MYDB1) porém na
instância myinst, é necessário executar os seguintes comandos na Commad Window
(Janela de commando) do DB2:
db2 list db directory
set db2instance=myinst
db2 create database mydb1
set db2instance=db2
A Figura 4.7 mostra o novo banco de dados MYDB1 criado na instância myinst.
Figura 4.8 – Tablespaces criados como padrão quando um banco de dados é criado
O tablespace SYSCATSPACE contém as tabelas do Catálogo do sistema. O Catálogo do
sistema é denominado dicionário de dados em outros sistemas de gerenciamento de
banco de dados relacional. Basicamente, ele contém as informações de sistema que não
devem ser modificadas ou excluídas; caso contrário, o banco de dados não funcionará
corretamente. O tablespace TEMPSPACE1 é usado pelo DB2 quando necessita de espaço
adicional para executar algumas operações, como as classificações. O tablespace
USERSPACE1 normalmente é usado para armazenar as tabelas de banco de dados do
usuário, caso não seja especificado nenhum espaço em tabela ao criar uma tabela.
Você também pode criar seus próprios tablespaces usando a instrução CREATE
TABLESPACE. A Figura 4.9 mostra o tablespace MYTBLS1 criado dentro do banco de
dados MYDB1 na instância DB2. Ao criar um tablespace, você especifica os discos que
serão usados e a memória (bufferpool) a ser usada. Portanto, se tiver uma tabela
“importante”, ou seja, uma tabela usada com muita frequência, você pode alocar os discos
mais rápidos e a maior quantidade de memória, atribuindo um tablespace com estas
características.
Na Figura 4.9 mostramos mais dois objetos que são criados como padrão: Um bufferpool
denominado IBMDEFAULTBP e os arquivos de log.
Um bufferpool é basicamente um cache de memória usado pelo banco de dados. Você
pode criar um ou mais bufferpools, mas sempre deve haver um bufferpool com tamanho
de página que corresponda ao tamanho de página dos tablespaces existentes. As páginas
e tamanhos de página serão discutidos em mais detalhes no Capítulo 6, Arquitetura do
DB2.
Os arquivos de log são usados para recuperação. Ao trabalhar com um banco de dados,
as informações não são apenas armazenadas nos discos do banco de dados; durante o
66 Primeiros passos com o DB2 Express-C
exemplo, para definir a instância ativa para myinst no Windows, execute este comando
de sistema operacional:
set db2instance=myinst
Comando Descrição
A Tabela 4.4 mostra alguns comandos úteis para gerenciar o db cfg a partir da linha de
comando.
Comando Descrição
Comando Descrição
DB2_COPY_NAME Para alternar para uma outra cópia do DB2 instalada, execute o
comando installpath\bin\db2envar.bat. Esta variável não
pode ser usada para esta finalidade.
Por exemplo, para permitir a comunicação usando TCP/IP, defina a variável de registro
DB2COMM para TCPIP, como mostrado abaixo:
db2set db2comm=tcpip
4.3 Resumo
Finalmente, discutimos a estrutura de configuração do DB2 e como ela pode ser alterada
em quatro locais diferentes, através de: variáveis de ambiente; arquivo de configuração
de gerenciador de banco de dados; arquivo de configuração de banco de dados, e
registro de perfil do DB2.
4.4 Exercícios
Os exercícios desta seção permitirão que você explore os conceitos discutidos neste
capítulo e apresentarão a você algumas ferramentas do DB2.
Parte 1: Criar um novo banco de dados usando o assistente Create Database
Nesta parte, você criará um banco de dados usando o assistente Create Database no
Control Center.
Procedimento
1. No painel Object View (Visualização de objeto) no lado esquerdo do Control
Center, clique com o botão direito na pasta All Databases (Todos os bancos de
dados) e selecione Create Database -> With Automatic Maintenance (Criar banco
de dados -> Com manutenção automática). Isto inicia o assistente Create
Database.
2. Especifique o nome e local do banco de dados na página Name (Nome) do
assistente. Use os valores abaixo:
Database Name: EXPRESS
Default Drive (Windows): C:
Default Path: (Linux): /home/db2inst1
Alias: This will default to EXPRESS if left blank
Comment: This is optional and can be left blank
4. Crie um banco de dados newdb com valores padrão na instância newinst. Isto
demora alguns minutos, pois o DB2 cria objetos internos no banco de dados e
realiza algumas configurações iniciais.
db2 create database newdb
76 Primeiros passos com o DB2 Express-C
10. Encontre o valor atual do parâmetro FEDERATED do dbm cfg. Ele deve ter valor
NO como padrão
db2 get dbm cfg
Dica: No Linux, você pode usar: db2 get dbm cfg | grep FEDERATED
11. Altere o valor do parâmetro FEDERATED de dbm cfg para YES e confirme se a
alteração ocorreu.
db2 update dbm cfg using FEDERATED YES
12. Conecte-se ao banco de dados SAMPLE com o ID de usuário e senha que está
usando no sistema operacional
db2 connect to sample user <userID> using <password>
Capítulo 4 – Ambiente do DB2 77
13. Verifique quantos aplicativos estão sendo executados em sua instância atual
db2 list applications
15. Force a desconexão de uma das janelas de comando do DB2. Isto fornece um
exemplo de como um DBA pode encerrar à força o trabalho de um determinado
usuário (que provavelmente está sobrecarregando os recursos do sistema)
db2 force application (<application handle for db2bp.exe>)
A Janela de comando do DB2 que foi encerrada deve retornar uma mensagem de
erro com o código SQL1224N. A outra Janela de comando do DB2 deve retornar a
saída (resultado) da consulta.
20. Defina a variável DB2COMM do registro do DB2 para tcpip e npipe em sua
instância, e confirme o novo valor
db2set db2comm=tcpip,npipe
db2stop
db2start
db2set -all
21. Verifique o valor atual do parâmetro LOGSEND db cfg e o altere para um valor de
5, confirmando o novo valor
db2 connect to sample
db2 get db cfg
db2 update db cfg using LOGSECOND 5
db2 get db cfg
Capítulo 5 – Ferramentas do DB2
5
Neste capítulo, descrevemos algumas ferramentas que podem ser usadas com o DB2. A
partir do DB2 9.7, a maioria das ferramentas descritas neste capítulo passa a ser obsoleta,
portanto ainda são suportadas. mas não serão mais aperfeiçoadas, e podem não ser
incluídas no produto em versões futuras. O IBM Data Studio é a substituição dessas
ferramentas.
O círculo vermelho na Figura 5.1 mostra a área de foco deste capítulo.
Observação:
Assista às apresentações em vídeo sobre as Ferramentas do DB2 nestes links:
http://www.channeldb2.com/video/video/show?id=807741:Video:4202
http://www.channeldb2.com/video/video/show?id=807741:Video:4182
A Figura 5.2 lista todas as Ferramentas do DB2 disponíveis nos atalhos do menu Iniciar do
IBM DB2. A maioria dessas ferramentas é a mesma em Linux ou Windows.
Observação:
Para obter mais informações sobre o Data Studio, consulte o e-book gratuito Getting
Started with IBM Data Studio for DB2 (Primeiros passos com o IBM Data Studio para
DB2), que é parte desta série de livros.
Na primeira vez em que inicializar o Control Center, você será solicitado a escolher que
visualização deseja usar. A escolha da visualização determina quais tipos de opções e
objetos de banco de dados são expostos. A Figura 5.5 exibe a caixa de diálogo Control
Center View (Visualização do Control Center).
Um script SQL pode ser executado no Command Editor ou na Janela de comando do DB2
no Windows, ou através de um shell no Linux. Para executar o script da Listagem 5.1 na
Janela de comando do DB2 ou em shell no Linux, use o comando abaixo:
db2 -t -v -f script1.db2 -z script1.log
ou o equivalente:
db2 –tvf script1.db2 –z script1.log
Neste comando:
-t indica que as instruções usam o caractere padrão de terminação (um ponto-e-
vírgula)
-v indica modo detalhado, fazendo o db2 ecoar o comando sendo executado
-f indica que o nome de arquivo especificado após este sinalizador é o arquivo de
script
-z indica que o nome de arquivo especificado após este sinalizador é usado para
anexar a saída de tela para análise posterior (isto é opcional, mas recomendado)
Quando o sinalizador -t é usado sem a especificação de um delimitador de linha, supõe-se
que o ponto-e-vírgula será o delimitador das instruções. Pode haver situações em que seja
necessário outro delimitador. Por exemplo, um script contendo código SQL PL necessita
usar um caractere de terminação de instrução diferente do padrão (ponto-e-vírgula),
porque estes são usados dentro das definições de objetos SQL PL para terminar as
instruções processuais.
Por exemplo, no arquivo de script functions.db2 mostrado na Listagem 5.2 abaixo,
você pode ver a instrução que ele contém para criar uma função, sendo necessário um
ponto-e-vírgula ao final da instrução SELECT porque ela faz parte da sintaxe necessária
dentro da função. Como terminador da instrução CREATE FUNCTION, estamos usando
um ponto de exclamação (!). Se usássemos um ponto-e-vírgula como delimitador da
instrução, haveria um conflito no script em relação ao usado na instrução SELECT,
resultando em um relatório de erro emitido pelo DB2.
CREATE FUNCTION f1()
SELECT … ;
…
END!
Listagem 5.2 – Conteúdo do arquivo de script functions.db2
Para informar ao DB2 o uso de um caractere de terminação de instrução diferente, use o
sinalizador -d, seguido pelo caractere de terminação desejado, como mostrado abaixo:
db2 –td! –v –f functions.db2 –z functions.log
98 Primeiros passos com o DB2 Express-C
Para saber mais sobre os outros sinalizadores que podem ser usados na Janela de
comando ou no shell do Linux, use este comando:
db2 list command options
encontre a ferramenta do DB2 que você deseja iniciar, clique nela com o botão direito do
mouse e selecione a opção Executar como administrador.
Se a segurança estendida do DB2 estiver ativada, o que é o padrão (consulte o
Capítulo 10, Segurança de banco de dados para obter mais detalhes), você também deve
assegurar que seu ID de usuário seja membro do grupo DB2ADMNS para poder iniciar
ferramentas gráficas como o Control Center.
5,12 Resumo
Neste capítulo, examinamos a grande variedade de ferramentas disponíveis para a
administração, configuração e gerenciamento do servidor de dados DB2.
A chegada do IBM Data Studio no DB2 9.7 como principal ferramenta de administração
fornece uma nova dimensão ao trabalho de administração e desenvolvimento de banco de
dados.
Também discutimos diversas ferramentas de GUI, agora obsoletas: o Control Center, o
assistente SQL Assist, o Task Center e o Journal, e o Health Agent e Monitor. Entretanto,
as ferramentas Command Line Processor e Command Window continuarão fazendo parte
do aplicativo em versões posteriores do DB2 9.7. Além disso, a ferramenta STMM
permanece sendo uma parte importante do processo de otimização de banco de dados.
Um componente essencial da caixa de ferramentas de qualquer administrador de banco
de dados é o uso de scripts para executar comandos e funções do DB2. Neste capítulo,
examinamos em detalhes os scripts SQL e de sistema operacional (shell), particularmente
como são compostos, armazenados e executados.
Finalmente, concluímos com um aviso sobre como assegurar que as ferramentas DB2
funcionem sem problemas no Windows Vista.
5,13 Exercícios
Os exercícios desta seção permitirão praticar o trabalho com scripts no DB2.
Parte 1: Como popular o banco de dados EXPRESS usando scripts
Nesta parte, você irá popular o banco de dados EXPRESS (criado anteriormente) usando
o Command Editor e dois scripts fornecidos.
Procedimento
1. Popular o banco de dados EXPRESS com algumas tabelas e dados. Para sua
conveniência, foram criados dois scripts, Lab_Chpt5.db2 e Lab_Chpt5.dat
para fazer isso para você. O script Lab_Chpt5.db2 contém os comandos usados
para criar as tabelas, e portanto, deve ser executado primeiro. O script
Lab_Chpt5.dat contém instruções que inserem os dados nas tabelas. Ambos os
scripts podem ser encontrados no arquivo
expressc_book_exercises_9.7.zip que acompanha este livro. Para
executá-los, abra o Command Editor. Verifique se o novo banco de dados que
você criou está selecionado na lista suspensa da barra de ferramentas. Se o novo
100 Primeiros passos com o DB2 Express-C
banco de dados não aparecer na lista, use o botão Add (Adicionar) para adicionar
uma conexão a ele.
2. Clique no menu Selected Open no Command Editor e navegue até a pasta
onde estão armazenados os scripts. Selecione o arquivo Lab_Chpt5.db2 e
clique no botãoOK. Agora, o conteúdo do arquivo deve estar sendo exibido na
área de entrada do Command Editor. Clique no botão Run (Executar) para
executar o script. Confirme se não houve mais erros ao executar o script.
3. Repita a etapa (2) para o arquivo Lab_Chpt5.dat.
O novo banco de dados criado é para uma livraria bem simples na Internet. A tabela
BOOKS contém todas as informações sobre os livros do estoque da loja. A tabela
CUSTOMERS contém informações sobre cada um dos clientes da loja. Finalmente, a tabela
SALES contém dados de vendas. Sempre que um cliente compra um livro, é feito um
registro na tabela SALES. O diagrama abaixo mostra o design e o relacionamento entre as
tabelas.
Tabela BOOKS
Tabela CUSTOMERS
Tabela SALES
Windows. Se você prefere trabalhar com Linux, procure fazer as alterações apropriadas
nas instruções abaixo.
Procedimento
1. Abra um editor de texto e insira as informações mostradas abaixo. A maioria das
pessoas apresenta erros ao digitar as linhas abaixo. Propositalmente, não
fornecemos isto como um arquivo separado, para que você erre e aprenda a
corrigi-los por si mesmo!
Observe também que pode ser necessário especificar os caminhos corretos para
os arquivos schema.ddl, triggers.ddl e app_objects.ddl, que também
são fornecidos com o arquivo expressc_book_exercises_9.7.zip que
acompanha este livro.
3. Para executar scripts que interagem com o DB2, é necessário ter um ambiente de
linha de comando do DB2. Para abrir a Janela de comando, vá para Iniciar ->
Programas -> IBM DB2 -> DB2COPY1 (Default) -> Command Line Tools ->
Command Window. Como alternativa, você pode usar Iniciar-> Executar, digitar
db2cmd e pressionar enter, como mostrado abaixo.
5. Faça uma pausa para se familiarizar com o script que acabou de criar. Você
compreende o que está ocorrendo em cada linha?
6. Tente responder as perguntas a seguir:
A. Onde a conexão com o banco de dados está sendo estabelecida?
B. O que %1 e %2 significam?
C. O que a linha de código abaixo faz? Onde ela é usada? Para quê?
set DBPATH=C:
D. O que a linha de código abaixo faz?
del schema.log, triggers.log, app_objects.log
E. O que ocorre quando o script é chamado sem qualquer parâmetro?
F. Por que os scripts SQL não contêm instruções CONNECT TO? Como eles se
conectam ao banco de dados?
PART II – APRENDENDO O DB2:
ADMINISTRAÇÃO DO BANCO DE
DADOS
Capítulo 6 – Arquitetura do DB2
6
Neste capítulo, discutiremos rapidamente a arquitetura do DB2. Você aprenderá sobre:
O modelo de processo do DB2
O modelo de memória do DB2
O modelo de armazenamento do DB2
Observação:
Para obter mais informações sobre a arquitetura do DB2, assista ao vídeo:
http://www.channeldb2.com/video/video/show?id=807741:Video:4482
Nome do
Descrição
processo
O principal controlador ou mecanismo do sistema DB2. A partir do
db2sysc (Linux) DB2 9.5, há apenas um único processo de mecanismo principal
multithread para a partição inteira. Todas as EDUs (Engine
db2syscs (Win) Dispatchable Units) são threads dentro deste processo. Sem este
processo, o servidor de banco de dados não pode funcionar.
6.3.2 Bufferpools
Um bufferpool é um cache de memória real para dados de tabela e de índice. Ele aumenta
o desempenho, reduzindo as E/S sequenciais diretas, e promovendo a leitura (busca
prévia) e gravação assíncronas. Isto é, o DB2 antecipa quais páginas serão necessárias e
realiza uma pesquisa prévia no disco para o bufferpool, para que fiquem prontas para o
uso.
Os bufferpools são alocados em unidades de memória de páginas com 4K, 8K, 16K e 32K.
Deve haver pelo menos um bufferpool por banco de dados, e pelo menos um bufferpool
correspondente para um tablespace de um dado tamanho de página.
6.3.2.1 Como criar um bufferpool
Para criar um bufferpool, use a instrução CREATE BUFFERPOOL. Como alternativa, use o
Control Center para clicar com o botão direito do mouse na pasta Buffer Pool dentro de um
determinado banco de dados e selecioneCreate, (Criar) como mostrado na Figura 6.3
6.3.3 Tablespaces
Os tablespaces são uma interface lógica entre as tabelas lógicas e a memória física do
sistema (bufferpool) e contêineres (discos). Use a instrução CREATE TABLESPACE para
criar um tablespace onde você pode especificar:
O tamanho de página do tablespace (4KB, 8KB, 16KB ou 32KB). O tamanho de
página deve corresponder a um bufferpool com o mesmo tamanho de página.
O nome do bufferpool associado a este tablespace.
Um tamanho de extensão.
Um tamanho de busca prévia.
6.3.3.1 Tipos de tablespace
Há três tipos de tablespaces:
Regular
Esses são para tabelas de usuário. Por exemplo, o tablespace USERSPACE1
criado como padrão é um tablespace regular.
Grande
Capítulo 6 – Arquitetura do DB2 113
Esses são usados opcionalmente para separar os dados de LOB em seus próprios
tablespaces. Ele também é usado para armazenar dados XML para os bancos de
dados criados com suporte a pureXML usando o tipo de dados XML nas colunas.
O padrão é tablespaces grandes.
Temporário
Há dois tipos de tablespaces temporários:
- Temporários do sistema
Estes são usados pelo DB2 para operações internas, como classificações.
Por exemplo, o tablespace TEMPSPACE1, criado como padrão quando se
cria um banco de dados, é um tablespace temporário do sistema. É
necessário que haja pelo menos um tablespace temporário do sistema.
- Temporários do usuário
Estes são usados para criar DGTTs (Tabelas temporárias globais declaradas)
e CGTTs (Criar tabelas temporárias globais) definidas pelo usuário, que são
tabelas temporárias na memória. Elas frequentemente são confundidas com
os tablespaces temporários do sistema. Os usuários devem criar um
tablespace temporário do usuário antes de poder usar DGTTs ou CGTTs.
Observe que o primeiro item da lista é uma unidade, pois ela representa um
caminho de banco de dados que só poderá ser uma unidade e não um caminho no
Windows. Este item também será usado como um dos caminhos de
armazenamento. Assim, o caminho do banco de dados é C:, e os caminhos de
armazenamento consistem em C:, C:\storagepath1 e D:\storagepath2, onde os dois
últimos diretórios devem ser criados previamente.
Exemplo no Linux:
CREATE DATABASE DB1 ON /data/path1, /data/path2
6.4 Resumo
Neste capítulo exploramos os três aspectos principais da arquitetura do DB2: o modelo de
processo, o modelo de memória e o modelo de armazenamento. No modelo de processo,
examinamos os processos e threads comuns, incluindo o db2sysc, sem o qual o DB2 não
poderia funcionar.
O modelo de armazenamento foi discutido em detalhes, abrangendo os três aspectos mais
importantes: páginas e extensões, o bufferpool (incluindo detalhes de criação) e os
tablespaces. Finalmente, analisamos os diversos tipos de tablespaces, juntamente com
detalhes sobre como são gerenciados (SMS, DMS, automático) e como criar um novo
tablespace usando o Control Center (Centro de Controle).
6.5 Exercícios
Este exercício o ajudará a compreender o modelo de processo, modelo de memória e
modelo de armazenamento do DB2 no Windows. Você irá analisar os diferentes processos
e threads, monitorar o uso de memória e praticar a criação de banco de dados usando
armazenamento automático e caminhos de armazenamento no Windows. De um modo
ideal, os caminhos de armazenamento devem ser criados em todos os discos (unidades),
mas como seu computador pode não estar configurado com diversos discos, este
exercício usa somente sua unidade C:\.
118 Primeiros passos com o DB2 Express-C
Procedimento:
1. Vejamos alguns processos no Windows. Primeiramente, abra a Janela de
comando do DB2 (Iniciar -> Executar -> db2cmd) e assegure que sua instância
seja interrompida, usando este comando: db2stop force
2. Abra o Gerenciador de Tarefas do Windows, selecione a guia Processos; verifique
se a caixa Mostrar processos de todos os usuários está selecionada. Clique na
coluna Nome da imagem para classificar segundo esta coluna; em seguida,
procure o processo db2sysc.exe, como mostrado na figura abaixo.
6. Repita a etapa anterior; desta vez, entretanto, monitore o que ocorre após
conectar-se ao banco de dados SAMPLE. Execute estes comandos na Janela de
comando do DB2:
db2start
db2 connect to sample
Logo que se conectar ao banco de dados SAMPLE, você verá uma redução na
quantidade de memória física disponível. Isto se deve ao fato de que, logo ao se
conectar a um banco de dados, a memória global do banco de dados (bufferpool,
cache de catálogo, etc.) é alocada.
7. Repita a etapa anterior mas, desta vez, monitore o que ocorre após criar um
bufferpool de qualquer tamanho. Procure não exceder a memória física do seu
computador. Se o fizer, o DB2 não alocará o bufferpool imediatamente, mas
adiará a criação até a desativação do banco de dados. Além disso, um pequeno
bufferpool de sistema será usado, e o DB2 continuará usando-o até haver
memória suficiente. Por exemplo, para criar um bufferpool de cerca de 160 MB,
execute este comando enquanto estiver conectado ao banco de dados SAMPLE:
db2 create bufferpool mybp immediate size 5000 pagesize 32k
7.1.3 Diretório do nó
Este diretório inclui informações sobre como se conectar a um dado banco de dados
remoto. Por exemplo, se for usado o protocolo TCP/IP, uma entrada de nó TCP/IP incluiria
o endereço IP do servidor no qual reside o banco de dados DB2 ao qual você está
tentando se conectar, e a porta da instância onde este banco de dados reside. Para
verificar o conteúdo deste diretório, execute o comando:
list node directory
2) SVCENAME
Capítulo 7 – Conectividade com o cliente do DB2 125
Pode haver circunstâncias onde um administrador não deseje que os clientes pesquisem a
rede em busca de bancos de dados com informações confidenciais. Isto pode ser evitado
no nível de DAS, da instância ou do banco de dados. A Figura 7.9 fornece detalhes sobre
isto.
padrão, a autenticação é realizada no servidor DB2 com o qual você está tentando se
conectar; portanto, é necessário fornecer um ID de usuário e uma senha definidos neste
servidor.
7.3 Resumo
A conexão de um cliente de dados a um servidor é um aspecto essencial do
gerenciamento de bancos de dados relacionais. Neste capítulo, examinamos a
conectividade de cliente, começando pela finalidade e conteúdo do banco de dados e
diretórios de nó associados ao DB2.
Em seguida, discutimos o uso da GUI do Configuration Assistant para configurar a
conexão entre cliente e servidor, incluindo o que necessita ser configurado em ambos os
lados da conexão.
Além disso, analisamos como o assistente Add Database também pode ser usado para
fazer uma conexão ao servidor através de um de três métodos: usar um perfil
armazenado, pesquisar a rede (também conhecido por Descoberta) ou manualmente,
digitando as informações do servidor. Em seguida, a criação de perfil de cliente e servidor
foi abordada em mais detalhes.
7.4 Exercícios
O Configuration Assistant pode ser usado para configurar de forma fácil e rápida as
conexões com os bancos de dados remotos. Neste exercício, você irá catalogar um banco
de dados residente em um servidor DB2 remoto (representado pela estação de trabalho
do seu colega, usando ambos os modos Search e Discover). Após o banco de dados ser
catalogado, você será capaz de acessá-lo como se estivesse em seu sistema local. O DB2
realiza todos os processos de comunicação de maneira oculta.
Este exercício supõe que você está trabalhando dentro de uma rede. Se este não for o
caso, você sempre pode usar seu próprio computador como ambas as máquinas cliente e
servidor, e seguir as instruções de configuração abaixo para conectar-se ao seu próprio
sistema.
Procedimento
1. Solicite ao seu colega de grupo de trabalho (ou instrutor) as informações a seguir:
2. Informações do banco de dados remoto:
(PR) Protocolo __TCPIP____
(IP) Endereço IP ou nome do host ___________
(PN) Número da porta da instância ____________
(DB) Nome do banco de dados: _ SAMPLE __
Dicas:
Para obter o nome do host no Windows, digite hostname em uma janela de
comando
Para obter o endereço IP no Windows, digite ipconfigem uma janela de
comando
3. Abra o Configuration Assistant. (Dica: ele é acessível através do menu Iniciar).
134 Primeiros passos com o DB2 Express-C
8.1 Esquemas
Os esquemas são espaços de nome para diversos objetos de banco de dados. Eles são
usados principalmente para:
Fornecer uma indicação da propriedade do objeto ou seu relacionamento com um
aplicativo
Agrupar de maneira lógica os objetos relacionados
Todos os objetos do DB2, exceto os sinônimos públicos, têm um nome completamente
qualificado em duas partes; o esquema é a primeira metade deste nome, como mostrado
abaixo:
<schema_name>.<object_name>
Você pode usar a instrução set schema para definir o esquema de uma sessão. A
Listagem 8.1 fornece um exemplo.
connect to sample user arfchong using mypsw
select * from staff ## This looks for arfchong.staff
set schema db2admin
select * from staff ## This looks for db2admin.staff
Listagem 8.1 – Um exemplo de como usar a instrução set schema
Um “sistema de concurso” pode ser usado para ilustrar o uso dos esquemas. Digamos que
uma empresa está promovendo um concurso no qual os participantes precisam criar suas
próprias tabelas e executar algumas operações em SQL. Todos os participantes recebem
o mesmo ID de usuário para se conectar ao banco de dados e o mesmo script para criar
tabelas, onde todos os objetos não estão qualificados, ou seja, não possuem um nome de
esquema. Após os concorrentes entrarem no sistema do concurso, o sistema gera o nome
do esquema com base em um carimbo de data/hora após a conexão. Dessa forma, o
concorrente A trabalhará em uma tabela com o mesmo nome que o concorrente B, mas
com esquemas diferentes, e assim não haverá um conflito em seus trabalhos.
8.3 Tabelas
Uma tabela é uma coleção de dados relacionados organizados de maneira lógica em
colunas e linhas. A Listagem 8.4 abaixo fornece um exemplo de como criar uma tabela
usando a instrução CREATE TABLE.
Tipo linha
Tipo cursor
Os tipos referência, matriz, linha e cursor são novos no DB2 9.7 e são usados com as
rotinas SQL PL. Os tipos de dados distintos definidos pelo usuário são baseados nos tipos
de dados internos. Estes UDTs são úteis quando:
Existe uma necessidade de estabelecer contexto para os valores
Existe uma necessidade de que o DB2 reforce o uso de tipos de dados, usando
“strong typing”
As instruções SQL na Listagem 8.5 ilustram um exemplo de como e quando se deve usar
UDTs distintos:
CREATE DISTINCT TYPE POUND AS INTEGER WITH COMPARISONS
CREATE DISTINCT TYPE KILOGRAM AS INTEGER WITH COMPARISONS
CREATE TABLE person
(f_name VARCHAR(30),
weight_p POUND NOT NULL,
weight_k KILOGRAM NOT NULL )
Listagem 8.5 – Um exemplo dos tipos de dados distintos
Neste exemplo, são criados dois UDTs distintos: POUND e KILOGRAM. Ambos são
construídos com base no tipo de dado interno INTEGER. As cláusulas WITH
COMPARISONS definidas como parte da sintaxe indicam que também são criadas
funções de conversão com o mesmo nome dos tipos de dados.
A tabela person utiliza dois novos UDTs nas colunas weight_p e weight_k,
respectivamente. Se agora executarmos a instrução abaixo:
SELECT F_NAME FROM PERSON
WHERE weight_p > weight_k
Você receberá uma mensagem de erro, pois estão sendo comparadas duas colunas com
tipos de dados diferentes. Mesmo que weight_p e weight_k usem respectivamente os tipos
de dados POUND e KILOGRAM, ambos criados com base no tipo de dados INTEGER,
este tipo de comparação torna-se impossível com a criação dos UDTs. É exatamente isso
que se deseja pois, na vida real, não faria sentido uma comparação entre libras e
quilogramas.
No próximo exemplo, desejamos comparar a coluna weight_p com um inteiro; entretanto,
estes dois tipos de dados são diferentes, e portanto você irá receber um erro, a menos
que use uma função de conversão.
Como pode ver na instrução abaixo, usamos a função de conversão POUND() para tornar
possível esta comparação. Como já indicamos antes, a função de conversão POUND() foi
criada com o UDT ao usar a cláusula WITH COMPARISONS na instrução CREATE
DISTINCT TYPE.
Capítulo 8 – Como trabalhar com objetos de banco de dados 143
Após ativar esta variável de registro, os novos bancos de dados poderão suportar esses
tipos de dados. Alguns desses tipos podem ser usados somente no contexto onde é usado
SQL PL.
Observação:
Se você for usar uma edição do DB2 que suporte o recurso de compatibilidade com SQL
(descrito no Capítulo 2), você também pode usar esses tipos de dados onde o PL/SQL é
usado. Se for este o caso, o valor a ser definido para a variável de registro
DB2_COMPATIBILITY_VECTOR deverá ser 'FFF' em vez de 'FF', como mostrado no
exemplo acima.
No exemplo, a cadeia '42' agora pode ser comparada à coluna do tipo inteiro col1.
Além disso, com o DB2 9.7, você também pode especificar marcadores de parâmetros
sem tipo e NULLs sem tipo em mais situações. Antes, era necessário convertê-los
explicitamente para um determinado tipo de dados. Por exemplo, a instrução abaixo agora
funcionará:
select ?, NULL, myUDF(?, NULL) from t1
144 Primeiros passos com o DB2 Express-C
SELECT * FROM t1
SALARY
-----------
10
11
12
3 record(s) selected.
1
-----------
12
1 record(s) selected
Listagem 8.6 – Um exemplo de sequências
PREVVAL fornece o valor atual da sequência, enquanto NEXTVAL fornece o valor
seguinte. O exemplo acima também usa SYSIBM.SYSDUMMY1. Esta é uma tabela de
catálogo de sistema contendo uma coluna e uma linha. Ela pode ser usada em situações
onde a consulta requer a saída de um único valor. As tabelas de catálogo de sistema são
descritas na próxima seção.
estas tabelas de sistema forem corrompidas, seu banco de dados ficará inutilizado. Você
pode consultar estas tabelas como se fossem qualquer tabela comum de banco de dados.
São usados três esquemas para identificar as tabelas de catálogo do sistema:
SYSIBM: tabelas básicas, otimizadas para uso pelo DB2
SYSCAT: visualizações baseadas nas tabelas SYSIBM, otimizadas para facilitar o
uso
SYSSTAT: estatísticas do banco de dados
A seguir, alguns exemplos de visualização de catálogo:
SYSCAT.TABLES
SYSCAT.INDEXES
SYSCAT.COLUMNS
SYSCAT.FUNCTIONS
SYSCAT.PROCEDURES
COL1 COL2
----------- ----------
1 hello1
2 hello2
3 hello3
3 record(s) selected.
148 Primeiros passos com o DB2 Express-C
COL1 COL2
----------- ----------
1 hello1
2 hello2
3 hello3
3 record(s) selected.
COL1 COL2
----------- ----------
0 record(s) selected.
8.4 Visualizações
Uma visualização é uma representação dos dados nas tabelas. Os dados da visualização
não são armazenados separadamente, mas são obtidos quando a visualização é
chamada. São suportadas visualizações aninhadas, ou seja, visualizações criadas com
base em outras visualizações. Todas as informações sobre a visualização são mantidas
nas seguintes visualizações de catálogo do DB2: SYSCAT.VIEWS, SYSCAT.VIEWDEP e
SYSCAT.TABLES. A Listagem 8.10 fornece um exemplo de como criar e usar uma
visualização.
CONNECT TO MYDB1;
Output:
8.5 Índices
Um índice é um conjunto ordenado de chaves que apontam, cada uma, para uma linha de
uma tabela. Um índice permite a exclusividade, e isso também aumenta o desempenho.
Algumas das características que podem ser definidas nos índices:
A ordem do índice pode ser crescente ou decrescente
As chaves de índice podem ser exclusivas ou não
Diversas colunas podem ser usadas no índice (isto é chamado de índice composto)
150 Primeiros passos com o DB2 Express-C
Com esta sintaxe, se um objeto (por exemplo, o procedimento P1) não existisse, ele seria
criado. Se ele existisse anteriormente, seria substituído. Este segundo comportamento é o
que é importante para a dependência dos objetos. Quando P1 é substituído, os objetos
dependentes de P1 são revalidados automaticamente. Uma situação semelhante ocorre
154 Primeiros passos com o DB2 Express-C
para os recursos novos, como RENAME COLUMN, e para alterações de tipos de dados
com ALTER COLUMN, que também foi aprimorado para suportar mais alterações de tipos
de dados.
Um conceito relacionado conhecido como invalidação suave permite que os usuários
descartem um objeto mesmo que esteja sendo usado por outras transações sendo
executadas. Qualquer transação nova terá acesso negado ao objeto descartado.
8.8 Resumo
Neste capítulo, examinamos os objetos de banco de dados no DB2: o que são, como são
criados e como usá-los. Introduzimos os esquemas de banco de dados e os comparamos
aos novos sinônimos públicos, além de como os sinônimos públicos se comparam com os
privados.
Em seguida, discutimos as tabelas e seus elementos em detalhes: tipos de dados
(internos e definidos pelo usuário), colunas de identificação, objetos de sequência e
tabelas temporárias globais. A estes, seguiu-se um exame das visualizações, índices e do
uso da GUI do Design Advisor para aumentar a capacidade de acesso e recuperação dos
dados dentro de uma tabela.
Por fim, examinamos a integridade das referências para definir os relacionamentos entre
as tabelas, e o novo conceito de evolução de esquema, que permite que os objetos de
dados sejam alterados sem complicações desnecessárias.
8.9 Exercícios
Até aqui, você usou as tabelas existentes no banco de dados SAMPLE para ilustrar os
conceitos. Em algum momento, será necessário criar suas próprias tabelas em um banco
de dados. Neste exercício, você usará o assistente Create Table para criar duas novas
tabelas no banco de dados SAMPLE.
Procedimento
1. Inicie o assistente Create Table como mostrado anteriormente no capítulo.
(Control Center -> All Databases -> SAMPLE -> (clique com o botão direito)
Tables object -> Create …)
2. Defina o nome da tabela, as definições de coluna e quaisquer restrições. A tabela
será usada para armazenar informações sobre o material de escritório usado por
um projeto no banco de dados SAMPLE. A cada vez que for comprado material,
será adicionada uma linha a esta tabela. A tabela terá seis colunas:
- product_id: identificador exclusivo do item sendo comprado
- description: descrição do item
- quantity: a quantidade comprada
- cost: o custo do item
- image: uma imagem do item (se disponível)
- project_num: o projeto para o qual este produto foi comprado
Capítulo 8 – Como trabalhar com objetos de banco de dados 155
Após exportar os dados para um arquivo, o utilitário IMPORT pode ser usado para que os
dados do arquivo sejam importados por outra tabela. Para os formatos ASC, DEL e WSF,
a tabela deve existir previamente, o que não é necessário para o formato IXF. Outro
método para carregar os dados em uma tabela é usar o utilitário LOAD. O utilitário LOAD é
mais rápido, pois vai diretamente até as páginas do banco de dados sem interagir com o
mecanismo do DB2; entretanto, este método não verifica as restrições, e os disparadores
não são acionados. Para assegurar a consistência dos dados carregados usando LOAD,
frequentemente o comando SET INTEGRITY é usado logo em seguida.
As seções abaixo descrevem os utilitários EXPORT, IMPORT e LOAD em mais detalhes.
Observação:
Para obter mais informações sobre como trabalhar com utilitários de movimentação de
dados, assista ao vídeo:
http://www.channeldb2.com/video/video/show?id=807741:Video:4262
Sugerimos que você tente fazer o exemplo acima. A tabela de funcionários faz parte do
banco de dados SAMPLE; portanto, primeiro você precisa se conectar a este banco de
dados criado em um capítulo anterior.
Se você prefere trabalhar com ferramentas de GUI, o utilitário EXPORT também pode ser
chamado do Control Center, como mostrado na Figura 9.2.
Capítulo 9 – Utilitários de movimentação de dados 159
Após executar o comando acima, o tablespace onde a tabela reside pode ter sido
colocado em estado CHECK PENDING. Isto significa que é necessário executar o
Capítulo 9 – Utilitários de movimentação de dados 161
comando SET INTEGRITY para verificar a consistência dos dados. O exemplo a seguir
mostra como fazer isso:
SET INTEGRITY FOR employee_copy
ALL IMMEDIATE UNCHECKED
Se você prefere trabalhar no Control Center, você pode iniciar os utilitários LOAD e SET
INTEGRITY como mostrado na Figura 9.4 e 9.5, respectivamente.
O comando db2look tem opções demais para serem descritas neste livro. Entretanto,
você pode usar o sinalizador –h para obter uma descrição rápida das opções disponíveis:
db2look -h
O utilitário db2look também pode ser chamado do Control Center, como mostrado na
Figura 9.6
164 Primeiros passos com o DB2 Express-C
9.6 Resumo
Neste capítulo, discutimos as diversas funções de exportação e importação do DB2.
Começando com um exame dos diversos formatos de exportação (ASC, DEL, WSF e
IXF), passamos para uma análise aprofundada do utilitário EXPORT. Os utilitários de
importação IMPORT e LOAD foram discutidos em seguida, juntamente com a necessidade
da instrução SET INTEGRITY ao usar o LOAD.
O comando db2move fornece um meio de simplificar o processo de transferência de
exportação e importação. Um comando mais complexo, db2look, permite extrair e
armazenar todos os elementos de banco de dados necessários para recriar o banco de
dados inteiro de maneira independente, se desejado.
9.7 Exercícios
Ao clonar um banco de dados, sua meta deve ser recriar o banco de dados da maneira
direta e reproduzível possível. Isto normalmente é feito usando scripts SQL, que podem
ser executados imediatamente após o DB2 ser instalado. Neste exercício, você extrairá as
definições de objeto do banco de dados EXPRESS (criado em um exercício anterior)
usando o Control Center.
Procedimento
1. Abra o Control Center.
2. Clique com o botão direito do mouse no banco de dados EXPRESS na árvore de
objetos e selecione o item de menu Generate DDL (Gerar DDL). Isto abrirá a
janela de diálogo Generate DDL.
3. Na janela Generate DDL, especifique as opções para o DDL, como mostrado
abaixo. Se você tivesse criado objetos adicionais em seu ambiente, como
tablespaces, bufferpools, etc., iria selecioná-los aqui. Como você não criou esses
tipos de objeto, desmarque a caixa. As estatísticas de banco de dados não foram
incluídas porque o ambiente de produção provavelmente contém um conjunto de
estatísticas diferente do ambiente de desenvolvimento. Da mesma maneira, os
parâmetros de configuração provavelmente serão diferentes também. Em seu
próprio ambiente, se tudo for configurado exatamente da maneira que será
implementado, você pode incluir essas opções adicionais.
166 Primeiros passos com o DB2 Express-C
bob e pwd são passados ao sistema operacional ou recurso de autenticação externa para
realizar a aprovação de autenticação, confirmando que um usuário de nome bob já foi
definido e que a senha fornecida corresponde a esse usuário. Se esta parte for bem-
sucedida, o sistema operacional retornará o controle de segurança ao DB2. Em seguida,
quando o usuário bob executar uma instrução como:
SELECT * FROM mytable
Observação:
Para obter mais informações sobre como trabalhar com a segurança do DB2, assista ao
vídeo: http://www.channeldb2.com/video/video/show?id=807741:Video:4267
10.1 Autenticação
Embora a autenticação em si seja executada pelo sistema operacional através do plugin
de segurança padrão (ou outro recurso externo de segurança), o DB2 decide em que nível
esta autenticação ocorre.
O parâmetro AUTHENTICATION de configuração do banco de dados, definido no servidor
do DB2, apresenta vários valores possíveis. Por exemplo, quando o parâmetro é definido
como SERVER (o padrão), a autenticação é realizada pelo sistema operacional ou recurso
externo de segurança no servidor. Entretanto, se AUTHENTICATION for definido como
CLIENT, a autenticação é realizada pelo sistema operacional ou recurso externo de
segurança no cliente. Isto é mostrado na Figura 10.2.
O parâmetro AUTHENTICATION pode ser definido como qualquer um dos valores listados
na Tabela 10.1
Comando Descrição
10.2 Autorização
A autorização consiste nos privilégios, autoridades, funções e credenciais de controle de
acesso baseado em rótulo (LBAC), que são armazenados nas tabelas de sistema do DB2
e gerenciados pelo DB2.
Um privilégio permite que um usuário execute um único tipo de operação em relação ao
banco de dados, como CREATE, UPDATE, DELETE, INSERT, etc.
Uma função permite agrupar diferentes privilégios que você pode conceder a um usuário,
grupo ou outras funções.
Uma autoridade é uma função predefinida que consiste em diversos privilégios.
As credenciais de acesso baseado em rótulo (LBAC) incluem políticas e rótulos que
suportam acesso granular de determinados usuários a linhas e colunas específicas. O
LBAC não é incluído no DB2 Express-C, mas você pode ler mais a respeito no Capítulo 2.
10.2.1 Privilégios
A Figura 10.3 mostra alguns dos diferentes privilégios no DB2.
172 Primeiros passos com o DB2 Express-C
10.2.2 Autoridades
As autoridades estão classificadas em dois grupos:
Autoridades em nível de instância: Estas autoridades podem operar no nível de
instância. Por exemplo, SYSADM.
Autoridades em nível de banco de dados: Estas autoridades podem operar no nível
de banco de dados. Por exemplo, DBADM.
Capítulo 10 – Segurança de banco de dados 173
10.2.3 Funções
As funções permitem que um administrador de segurança atribua privilégios ou
autoridades a diversos usuários ou grupos. As funções são muito semelhantes aos
grupos, mas são definidas dentro do DB2 e, portanto, fornecem algumas vantagens. Por
exemplo, os privilégios e autoridades concedidos às funções são sempre usados ao criar
objetos como visualizações ou disparadores, o que não é o caso dos grupos. Por outro
lado, não é possível atribuir autoridades em nível de instância como o SYSADM a uma
função, somente privilégios e autoridades em nível de bancos de dados; enquanto para
um grupo, todos os privilégios e autoridades podem ser atribuídos.
Para trabalhar com funções, é necessário seguir diversas etapas:
1. Primeiro, um administrador de segurança (SECADM) deve criar uma função
usando um comando como
CREATE ROLE TESTER
178 Primeiros passos com o DB2 Express-C
Como alternativa, você pode consultar as visualizações de catálogo SYSCAT do DB2, que
contêm a informações de autorização. Por exemplo, se você deseja saber se o usuário
DB2ADMIN possui o privilégio SELECT sobre a tabela T2 e quem concedeu este privilégio,
execute uma consulta como esta:
SELECT grantor, grantee, selectauth
FROM syscat.tabauth
WHERE tabname = 'T2'
10.8 Resumo
Este capítulo cobriu os aspectos de segurança do DB2, começando com uma discussão
abrangente sobre as diferenças e a importância da autenticação e da autorização. A partir
daí, examinamos os diversos níveis de autoridade que fornecem segurança à instância e
ao banco de dados.
Em seguida, cobrimos o novo conceito de funções e como elas podem ser usadas para o
seu benefício, no que diz respeito à segurança e às limitações de estabelecer a segurança
através dos grupos. Foi discutido especificamente o grupo PUBLIC, junto com sugestões
sobre como protegê-lo para que os usuários gerais sejam bloqueados no servidor de
dados.
Além disso, as instruções GRANT e REVOKE foram analisadas e, finalmente, vimos como
usar o Control Center e as tabelas de catálogo do sistema para verificar a autorização e os
níveis de privilégio.
182 Primeiros passos com o DB2 Express-C
10.9 Exercícios
Até o momento, você vem usando a conta de administrador de instância (SYSADM) para
executar todos os comandos de banco de dados. Esta conta tem acesso amplo a todos os
utilitários, dados e objetos de banco de dados. Portanto, é muito importante proteger esta
conta para evitar a perda de dados acidental ou deliberada. Na maioria dos casos, basta
criar contas ou grupos de usuários diferentes, com um conjunto de permissões limitado.
Neste exercício, você irá criar uma nova conta de usuário e atribuir privilégios específicos
a ela.
Parte 1 – Como trabalhar com privilégios
Nesta parte do exercício, você irá praticar como conceder e revogar privilégios aos
usuários, usando o Control Center.
Procedimento
1. Abra o console de Gerenciamento do computador do Windows, clicando com o
botão direito no ícone Computador na área de trabalho e selecionando o item de
menu Gerenciar.
2. Expanda a seleção Ferramentas do sistema na árvore do painel esquerdo da
janela e, em seguida, expanda a pastaUsuários e grupos locais. Clique com o
botão direito na pasta Usuário e selecione o item Novo usuário.
3. Na caixa de diálogo Novo usuário, digite as informações abaixo: no campo Nome
de usuário, digite customer e no campo Nome completo, digite Customer1. No
campo Descrição, digite A typical bookstore customer (Um cliente típico
de livraria). Nos campos Senha e Confirmar senha, digite ibmdb2ibm. Remova a
marca da opção O usuário deve alterar a senha no próximo logon, clique no botão
Criar para criar o novo usuário e, em seguida, clique no botão Fechar para fechar
a janela.
Capítulo 10 – Segurança de banco de dados 183
tabela STAFF. Observe que é necessário usar o esquema correto, que foi usado
ao criar esta tabela. No exemplo abaixo, usamos arfchong como esquema.
db2 connect to sample user mysysadm using ibmdb2ibm
db2 select * from arfchong.staff
Você deve receber uma mensagem de erro como esta. Por quê? Você não é o
SYSADM?
SQL0551N "MYSYSADM" does not have the required authorization or
privilege to perform operation "SELECT" on object "ARFCHONG.STAFF".
SQLSTATE=42501
A partir do DB2 9.7, o SYSADM não possui autoridade DBADM como padrão, é
por isso que você recebeu a mensagem de erro.
5. Com o usuário do Windows que foi usado para criar o banco de dados SAMPLE,
conecte-se ao banco de dados. No exemplo, este usuário é ARFCHONG. Em
seguida, conceda DBADM sem DATAACCESS ao usuário mysysadm e tente usar
SELECT novamente em STAFF, como mysysadm. Funcionou? Por quê?
db2 connect to sample user arfchong using ibmdb2ibm
db2 grant dbadm without dataaccess on database to user mysysadm
db2 connect to sample user mysysadm using ibmdb2ibm
db2 select * from arfchong.staff
Como você viu, ainda receberá a mesma mensagem de erro, mesmo após
mysysadm receber a autoridade DBADM. este comportamento é esperado
porque incluímos a cláusula WITHOUT DATAACCESS, que significa que a
autoridade DATAACCESS não foi incluída e, portanto, mysysadm ainda não
possui autoridade para acessar os dados. Isso mostra a você um exemplo de
como é possível restringir o acesso do DBADM aos dados.
6. Agora, vamos conceder DATAACCESS ao mysysadm e tentar usar SELECT
novamente.
db2 connect to sample user arfchong using ibmdb2ibm
db2 grant DATAACCESS on database to user mysysadm
db2 connect to sample user mysysadm using ibmdb2ibm
db2 select * from arfchong.staff
É possível haver um número de arquivos de logs infinito caso LOGSECOND seja definido
com valor -1; entretanto, isto não é recomendado, pois você pode ficar sem espaço no
sistema de arquivos.
A maioria dos comandos e utilitários pode ser executada on-line ou off-line. On-line implica
que outros usuários podem estar conectados e realizando operações no banco de dados
enquanto você executa o comando. Off-line significa que não há nenhum outro usuário
conectado ao banco de dados enquanto você executa sua operação. Para permitir uma
operação on-line, adicione a palavra-chave ONLINE à sintaxe do comando; caso contrário,
o comando irá supor que está sendo executado off-line, como padrão.
Por exemplo, se deseja fazer backup do banco de dados SAMPLE no caminho
C:\BACKUPS, você pode executar este comando na Command Window (Janela de
comando) do DB2 ou no shell do Linux:
db2 BACKUP DB sample TO C:\BACKUPS
Observe que o diretório C:\BACKUPS deve existir antes de executar o comando. Verifique
também se não há conexões com o banco de dados ao executar o comando acima; caso
194 Primeiros passos com o DB2 Express-C
contrário, você receberá uma mensagem de erro, já que um backup off-line não pode ser
executado quando houver conexões.
Para descobrir se há conexões aos bancos de dados de uma instância, execute este
comando na janela de comando do DB2 ou no shell do Linux:
db2 list applications
Este último comando não deve ser executado em um ambiente de produção com muitos
usuários; caso contrário, você receberá muitas chamadas de colegas de trabalho irritados!
Além disso, lembre-se que o último comando é executado de forma assíncrona. Isto
significa que ao tentar executar o comando de backup logo a seguir, ele pode não
funcionar ainda. Aguarde alguns segundos e repita o comando de backup, caso tenha
recebido uma mensagem de erro da primeira vez.
Após uma execução bem-sucedida do comando de backup, é criado um novo arquivo
contendo a imagem de backup do banco de dados. O nome deste arquivo segue a
convenção mostrada na Figura 11.6.
11.9 Resumo
Neste capítulo, examinamos a função de log no DB2, incluindo os dois tipos de arquivo de
log (primário e secundário) e os dois tipos de log (circular e de arquivamento) e os
Capítulo 11 – Backup e recuperação 197
diversos parâmetros de banco de dados relacionados ao log. Para cada tipo de log,
discutimos quando e porque é usado, e como configurá-lo no Control Center.
Também vimos como executar as atividades de backup e recuperação usando a linha de
comando do DB2, incluindo uma visão detalhada dos três tipos de recuperação de banco
de dados: queda, versão e rolagem para a frente.
11.10 Exercícios
Embora o DB2 seja capaz de automatizar diversas atividades de manutenção de banco de
dados, às vezes você deseja personalizar o momento em que determinadas atividades
devem ocorrer. Neste exercício, você irá criar uma programação de backup noturno
personalizada para o banco de dados EXPRESS.
Procedimento
1. Na árvore de objetos do Control Center, navegue até Control Center -> All
Databases (Control Center -> Todos os bancos de dados). Clique com o botão
direito no banco de dados EXPRESS e selecione o item Backup. Isto inicia o
assistente de Backup.
2. A página Introduction (Introdução) do assistente resume o estado atual do banco
de dados, incluindo a hora do último backup e o método de log. Clique no botão
Next para passar para a próxima página do assistente.
3. Na página Image (Imagem) do assistente, selecione o destino da imagem de
backup. Normalmente, você deve selecionar uma unidade física diferente daquela
onde o banco de dados existente está armazenado. Por enquanto, crie uma nova
pasta no sistema de arquivos denominado C:\db2backup e especifique essa
pasta como localização do backup. No assistente, selecione o item File System
(Sistema de arquivos) na lista suspensa Media Type (Tipo de mídia). Clique no
botão Add, selecione a pasta que acabou de criar e clique no botão OK . Clique no
botão Next para passar para a próxima página do assistente.
4. Você pode explorar as páginas Options (Opções) e Performance (Desempenho),
mas as opções padrão normalmente são suficientes porque o DB2 executa o
backup do banco de dados automaticamente da maneira ideal. Navegue até a
página Schedule (Programação) quando terminar de explorar.
5. Na página Schedule, selecione ativar o recurso de agendamento, caso isto ainda
não tenha sido feito. Selecione o sistema no qual irá criar o catálogo de
ferramentas e crie um novo catálogo de ferramentas. Especifique um esquema
para o catálogo de ferramentas e selecione criá-lo no banco de dados EXPRESS já
existente. O catálogo de ferramentas contém metadados sobre todas as tarefas
programadas. Clique no botão OK para continuar. Clique no botão Next para
passar para a próxima página do assistente após a criação do catálogo de
ferramentas.
198 Primeiros passos com o DB2 Express-C
A Figura 12.1 mostra que as tarefas de manutenção são executadas de maneira circular.
Se um REORG é executado, também é recomendável executar um RUNSTATS, seguido
de um REBIND. Após algum tempo, as tabelas de um banco de dados serão modificadas,
devido às operações UPDATE, DELETE e INSERT. Nesse momento, o ciclo se inicia
novamente com REORG.
Exemplo:
REORG TABLE employee
O comando REORGCHK pode ser usado antes de um REORG para determinar se uma
tabela ou índice necessita de correção.
da coleta de estatísticas deve ser determinada pela frequência com que os dados são
alterados na tabela.
Sintaxe:
RUNSTATS ON TABLE <schema.tablename>
Exemplo:
RUNSTATS ON TABLE myschema.employee
db2rbind pode ser usado para associar novamente os pacotes existentes, para levar as
últimas estatísticas em consideração.
Sintaxe:
db2rbind database_alias -l <logfile>
Exemplo:
Para reassociar todos os pacotes do banco de dados SAMPLE e armazenar o log de saída
no arquivo mylog.txt, execute este comando:
db2rbind sample -l mylog.txt
12.3 Resumo
Este capítulo examinou a importância da manutenção em seus bancos de dados, incluindo
a função do ciclo de REORG, RUNSTATS e REBIND. O comando REORG, como o nome
indica, reorganiza seus dados para eliminar a fragmentação e acelerar a recuperação de
dados. O comando RUNSTATS atualiza as informações estatísticas usadas pela
ferramenta de otimização do DB2 para aumentar o desempenho dos dados. O processo
BIND ou REBIND atualiza os pacotes do banco de dados com os caminhos de acesso
mais recentes.
Também examinamos as ferramentas gráficas fornecidas no Control Center do DB2 para
executar as atividades de manutenção nos modos manual, com script e automático.
12.4 Exercícios
Neste exercício, você irá configurar a manutenção automática no banco de dados SAMPLE
do DB2.
208 Primeiros passos com o DB2 Express-C
Procedimento
1. Na árvore de objetos do Control Center, clique com o botão direito do mouse no
banco de dados SAMPLE e selecione o item de menu Configure Automatic
Maintenance (Configurar manutenção automática). Isto abrirá o assistente
Configure Automatic Maintenance.
2. A página Introduction do assistente exibe a configuração atual da manutenção
automatizada. Se você criou o banco de dados com a opção de manutenção
automatizada, ela já está configurada. Você pode usar este assistente para
reconfigurar as opções de manutenção automatizada. Clique no botão Next para
passar para a próxima página do assistente.
3. A página Type (Tipo) do assistente solicita que você escolha entre desativar
totalmente a manutenção automática ou alterar suas configurações de
manutenção automatizada. Selecione a opção para alterar as configurações atuais
de manutenção automatizada. Clique em Next.
4. A página Timing (Tempo) do assistente solicita que você especifique as janelas de
manutenção. Configure o banco de dados para ficar off-line nas noites de sábado
e domingo, da meia-noite até 06:00 AM, como mostrado abaixo. Clique no botão
Change (Alterar) ao lado do painel de visualização da janela de manutenção off-
line e selecione os horários desejados. Após especificar as informações
necessárias, clique no botão OK para retornar ao assistente. Deixe a janela on-
line sem alterações (a manutenção on-line pode ocorrer a qualquer momento).
Clique no botão Next para continuar.
Capítulo 12 – Tarefas de manutenção 209
13.1 Transações
Uma transação ou unidade de trabalho consiste em uma ou mais instruções SQL, as
quais, quando executadas, podem ser consideradas como uma única unidade; o que
significa que, se uma instrução da transação falhar, a transação inteira falha e todas as
instruções que foram executadas antes do ponto de falha são revertidas (rolled back). A
Figura 13.1 fornece um exemplo de transação.
13.2 Concorrência
Podemos definir concorrência como o fato de que muitos usuários podem acessar, ao
mesmo tempo. O DB2 foi projetado como um banco de dados multiusuário. O acesso aos
dados deve ser coordenado adequadamente e com transparência, usando um mecanismo
que assegure a integridade e a consistência dos dados. Considere a Figura 13.2 como
exemplo.
Antes do DB2 9.7, esta instrução ficaria em espera, aguardando que o bloqueio exclusivo
obtido pela instrução de atualização de AppA (o gravador) fosse liberado.
No DB2 9.7 e com currently committed ativado (o padrão dos novos bancos de dados), a
instrução retornaria o valor atualmente comprometido, que é Chong.
Observe que, mesmo que o padrão seja CS, estamos incluindo 'with CS' na instrução para
manter a clareza. Discutiremos esta cláusula mais adiante no capítulo.
Como é usado o isolamento UR, o resultado seria Smith, que é o valor não
comprometido.
Este exemplo mostra que existe mais concorrência para os aplicativos com o uso de CC,
permitindo que os leitores acessem a linha que está sendo atualizada pelo gravador.
Outro cenário que poderia causar conflito antes do DB2 9.7 é um leitor impedindo o
acesso de um gravador a uma linha. Este cenário foi um dos motivos pelo qual o comando
COMMIT foi recomendado mesmo em operações de leitura, pois assegura que os
bloqueios de compartilhamento (S) sejam liberados. Com o CC isto deixou de ser um
problema, pois um leitor não bloqueia um gravador.
Quanto às operações de INSERT não comprometidas, a operação de leitura irá saltá-las
como padrão, ou seja, o conjunto de resultados não exibe estas linhas. No caso dos
comandos DELETE, a operação de leitura também deve saltar (ignorar) as linhas
afetadas, mas o comportamento depende do valor da variável de registro do DB2
DB2_SKIPDELETED. Outras variáveis de registro e propriedades dos comandos BIND e
PREPARE podem alterar o comportamento padrão do CC.
Lembre-se: Currently committed significa que serão exibidas somente as informações
atualmente comprometidas; portanto, as operações de INSERT ou DELETE sem
comprometimento serão ignoradas.
Capítulo 13 – Simultaneidade e bloqueio 219
Como mencionado anteriormente, como padrão o CC está ativado nos novos bancos de
dados. Se desejar desativá-lo ou ativá-lo para um banco de dados criado antes do DB2
9.7 e atualizado para o DB2 9.7, você pode atualizar o valor de configuração do banco de
dados para CUR_COMMIT. Por exemplo, para desativá-lo para o comando abaixo,
executado no banco de dados SAMPLE:
db2 update db cfg for sample using CUR_COMMIT off
db2stop
db2start
Cenário de exemplo:
Um aplicativo precisa realizar uma contagem “aproximada” de quantas linhas há em uma
tabela. O desempenho é fundamental. O nível de isolamento cursor stability é necessário,
com exceção de uma instrução SQL:
SELECT COUNT(*) FROM tab1 WITH UR
PREPARE:
concurrent-access-resolution:
|-+-USE CURRENTLY COMMITTED-+--------------------------|
'-WAIT FOR OUTCOME--------'
Em um aplicativo JDBC usando o IBM Data Server Driver para JDBC e SQLJ, você pode
usar a propriedade concurrentAccessResolution para ativar o nível currently committed.
222 Primeiros passos com o DB2 Express-C
Application handle = 9
Application ID = *LOCAL.DB2.00B9C5050843
Sequence number = 0001
Application name = db2bp.exe
Authorization ID = ADMINISTRATOR
Application status = UOW Waiting
Status change time = Not Collected
Application code page = 1252
Locks held = 4
Total wait time (ms) = 0
List Of Locks
Lock Name = 0x05000700048001000000000052
Lock Attributes = 0x00000000
Release Flags = 0x40000000
Lock Count = 255
Hold Count = 0
Lock Object Name = 98308
Object Type = Row
Tablespace Name = TEST4K
Table Schema = ADMINISTRATOR
Figura 13.9 – Instantâneo de bloqueio de aplicativo
224 Primeiros passos com o DB2 Express-C
Observação:
No DB2 9.7, um esforço está sendo feito para mover o monitoramento do banco de dados
para fora do monitor do sistema e da tecnologia de snapshots para o uso de queries
acessando diretamente a memória interna pelo uso de "function tables", para
gerenciamento de carga de trabalho, bem como as ferramentas do IBM Data Studio.
Consulte a documentação oficial do DB2 para obter mais informações.
Na Figura 13.10, o usuário A está segurando o cereal e não o soltará até conseguir o leite.
Por outro lado, o usuário B está segurando o leite e não o soltará até conseguir o cereal.
Assim, temos uma situação de impasse de bloqueios.
Com o DB2 9.7, o uso do isolamento currently committed reduziu consideravelmente a
ocorrência de impasses de bloqueios, pois um aplicativo não precisa aguardar o outro
aplicativo liberar seu bloqueio; em vez disso, ele acessa o valor currently committed.
Para simular uma situação de impasse de bloqueio no DB2, siga estas etapas:
1. Desative o currently committed:
db2 update db cfg for sample using cur_commit off
db2stop force
db2start
Após pressionar Enter para executar a instrução SELECT acima, pode parecer que o
SELECT ficou parado. Na verdade não está parado, mas aguardando a liberação do
bloqueio exclusivo que foi colocado por CLP2 neste linha, na etapa 4. Neste ponto, se
LOCKTIMEOUT ainda tiver o valor padrão -1, o aplicativo CLP1 ficará aguardando
eternamente.
6. Em CLP2, execute:
226 Primeiros passos com o DB2 Express-C
8. Não recupere mais dados do que é necessário. Por exemplo, use a cláusula
FETCH FIRST n ROWS ONLY nas instruções SELECT.
Observação:
Para obter mais informações sobre as melhores práticas de concorrência e bloqueio, veja
os documentos sobre Melhores práticas disponíveis em
http://www.ibm.com/developerworks/data/bestpractices/
13.10 Resumo
Neste capítulo examinamos a manutenção da integridade dos dados através do controle
de transações, acesso simultâneo de usuários e níveis de bloqueio. Todos os níveis
diferentes de concorrência têm questões que podem afetar como você acessa e gerencia
seus dados.
Também analisamos em detalhes a função de configurar os níveis de isolamento para
lidar com essas questões, e como o nível de isolamento pode ser manipulado para
fornecer a flexibilidade máxima necessária ao seu aplicativo e necessidades de dados.
Também vimos a ampliação de bloqueio, as esperas de bloqueio e o monitoramento de
bloqueio, juntamente com as causas, detecção e solução dos impasses de bloqueio do
banco de dados.
Finalmente, examinamos algumas ideias de melhores práticas para obter o melhor
resultado possível para suas necessidades de concorrência.
13.11 Exercícios
Neste exercício, você irá praticar os conceitos de concorrência e bloqueio discutidos neste
capítulo, usando a Janela de comando do DB2. Esta ferramenta usa o nível de isolamento
de bloqueio CS, como padrão. Após executar uma instrução SQL, a Janela de comando
executará automaticamente o comando commit (este também é conhecido como
autocommit). Para fins de ilustração neste exercício, usaremos o sinalizador +c para
desativar o autocommit, e a cláusula WITH <isolation level> após algumas
instruções SQL para sobrescrever o isolamento CS padrão.
Feche a janela
230 Primeiros passos com o DB2 Express-C
Parte 2 – Teste dos níveis currently committed (CC) e uncommitted read (UR)
Procedimento 1: Analisar o comportamento do isolamento CS sem o currently
committed
1. Abra uma Command Window do DB2 e execute as instruções abaixo:
db2 connect to sample
db2 select * from staff
3. Abra duas Janelas de comando do DB2 como na parte 1, colocando uma no alto
da outra. Vamos ver como funciona o isolamento CS sem a opção currently
committed, quando uma operação de atualização (gravador) e de seleção (leitor)
têm interesse na mesma linha. Observe que não é necessário colocar “WITH CS”
após as instruções (já que este é o padrão).
Na Command window #1 do DB2 (este é o gravador):
db2 connect to sample
db2 +c update staff set name = 'Chong' where id = 10
Feche a janela.
2. Abra duas Janelas de comando do DB2 como na parte 1, colocando uma no alto
da outra. Em seguida, execute o seguinte:
Na Command Window #1 do DB2:
db2 connect to sample
db2 +c update staff set name = 'Chong' where id = 10
Agora esta instrução SELECT funciona! Ela não fica parada e o valor exibido é
Sanders, que é o valor atualmente comprometido.
Esta operação SELECT funciona, mas observe que o valor exibido é Chong, que
é o valor não comprometido.
Na Command Window #1 do DB2:
db2 rollback
Feche a janela.
No exemplo, a função F1 retorna o valor inteiro 1000. A instrução VALUES pode ser usada
para chamar a função. Como no caso dos procedimentos armazenados, recomendamos
que você crie as funções usando o IBM Data Studio.
14.2.3 Disparadores
Um disparador (trigger) é um objeto que executa automaticamente uma operação em
uma tabela ou visualização. Uma ação de disparo no objeto onde o disparador está
definido faz o disparador ser disparado. Um disparador normalmente não é considerado
um objeto de aplicativo; portanto, os desenvolvedores de banco de dados normalmente
não programam disparadores, o que é feito pelos administradores de banco de dados.
Como é necessário alguma programação, incluímos os disparadores nesta seção. Veja
abaixo um exemplo de um disparador:
create trigger myvalidate no cascade before insert on T1
referencing NEW as N
for each row
begin atomic
set (N.myxmlcol) = XMLVALIDATE(N.myxmlcol
according to xmlschema id myxmlschema);
end
Neste exemplo, o disparador é disparado antes de uma operação INSERT na tabela T1. O
disparador irá inserir o valor (que é um documento XML), mas chamará a função
Capítulo 14 - Introdução ao desenvolvimento de aplicativos DB2 241
XMLVALIDATE para validar este documento XML com um dado esquema. O Capítulo 15,
DB2 pureXML, entra em mais detalhes sobre XML e esquemas XML.
Neste segundo exemplo, a variável host :fname é usada como parte de uma instrução
SQL incorporada. Embora o valor da variável host seja desconhecido até a execução, seu
tipo de dados é conhecido a partir do programa, e todos os outros objetos (nomes de
coluna, nomes de tabela) são totalmente conhecidos antecipadamente. O DB2 usa
estimativas para estas variáveis host, para calcular antecipadamente o plano de acesso;
portanto, este caso ainda é considerado SQL estático.
Você pré-compila, associa e compila as instruções SQL executadas estaticamente antes
de executar o aplicativo. O SQL estático é melhor usado em bancos de dados nos quais
as estatísticas não mudam muito. Agora, vejamos mais um exemplo:
SELECT ?, ? FROM ?
Neste exemplo, os nomes das colunas e da tabela mencionados pela instrução não são
conhecidos até a execução. Portanto, o plano de acesso é calculado somente na
execução, e usando as estatísticas disponíveis nesse momento. Esse tipo de instrução é
considerado SQL dinâmico.
Algumas APIs de programação, como JDBC e ODBC, sempre usam SQL dinâmico
independentemente das instruções SQL incluírem objetos conhecidos ou não. Por
exemplo, a instrução SELECT lastname, salary FROM employee possui todos os
nomes de coluna e tabela conhecidos antecipadamente; entretanto, as instruções não são
pré-compiladas quando feitas através de JDBC ou ODBC. Todos os planos de acesso das
instruções são calculados no momento da execução.
Em geral, duas instruções são usadas para tratar uma instrução SQL como dinâmica:
PREPARE: Esta instrução prepara ou compila a instrução SQL, calculando o plano
de acesso a ser usado para recuperar os dados
EXECUTE: Esta instrução executa o SQL
Como alternativa, você pode executar PREPARE e EXECUTE em uma única instrução:
EXECUTE IMMEDIATELY
A Listagem 14.1 mostra um exemplo de instrução SQL dinâmico incorporado em C que é
preparada e executada.
strcpy(hVStmtDyn, “SELECT name FROM emp WHERE dept = ?");
PREPARE StmtDyn FROM :hVStmtDyn;
EXECUTE StmtDyn USING 1;
EXECUTE StmtDyn USING 2;
Listagem 14.1 – Uma instrução SQL dinâmico incorporado em C usando PREPARE e
EXECUTE
A Listagem 14.2 mostra o mesmo exemplo da Listagem 14.1, mas usando a instrução
EXECUTE IMMEDIATELY
EXECUTE IMMEDIATELY SELECT name from EMP where dept = 1
244 Primeiros passos com o DB2 Express-C
Figura 14.3 – A CLI do DB2 é baseada em ODBC e na norma internacional ISO CLI
A CLI do DB2 atende à ODBC 3.51 e pode ser usada como Driver ODBC quando
carregada por um ODBC Driver Manager. A Figura 14.4 pode ajudá-lo a visualizar o
suporte da CLI do DB2 para ODBC.
alterações necessárias no código são o driver JDBC que será carregado e a cadeia de
texto da conexão. A JDBC usa apenas SQL dinâmico e é muito popular.
O SQLJ é o padrão para incorporar SQL em programas Java. Ele é usado principalmente
com SQL estático, embora possa interoperar com JDBC, como mostrado na Figura 14.7.
Embora normalmente seja mais compacto que os programas JDBC e forneça melhor
desempenho, ele ainda não foi amplamente aceito. Os programas em SQLJ devem passar
através de um pré-processador (o tradutor SQLJ) antes de serem compilados.
tipo 2, há dois drivers que descreveremos em breve, mas um deles também foi
descontinuado.
Os tipos 2 e 4 são suportados no DB2, como mostrado na Tabela 14.2. Os drivers do tipo
2 precisam de um cliente DB2 instalado, pois o driver irá usá-lo para estabelecer a
comunicação com o banco de dados. O tipo 4 é um cliente Java puro, portanto não há
necessidade de um cliente DB2, mas o driver deve ser instalado na máquina onde o
aplicativo JDBC está sendo executado.
14.3.5 OLE DB
A Vinculação e Incorporação de Objeto, O Banco de dados (OLE DB) é um conjunto
de interfaces que fornece acesso a dados armazenados em diversas fontes. Ele foi
projetado como substituto para o ODBC, mas estendido para suportar uma variedade de
fontes mais ampla, incluindo bancos de dados não relacionais, como bancos de dados
orientados a objeto e planilhas. A OLE DB é implementada usando a tecnologia
Component Object Model (COM).
Os usuários de OLE DB podem acessar um banco de dados DB2 com o IBM OLE DB
Provider for DB2. Este provedor tem as seguintes características:
Nome do provedor: IBMDADB2
250 Primeiros passos com o DB2 Express-C
14.3.6 ADO.NET
O .NET Framework é o substituto da Microsoft para a tecnologia Component Object
Model (COM). Usando o .NET Framework, você pode programar aplicativos .NET em mais
de quarenta linguagens de programação diferentes, sendo as mais populares C# e Visual
Basic .NET.
As bibliotecas da classe .NET Framework fornecem os elementos fundamentais com os
quais você pode construir aplicativos .NET. Esta biblioteca de classe é independente de
linguagem e fornece interfaces para serviços de sistema operacional e aplicativos. Seu
aplicativo .NET (independente da linguagem) é compilado em Intermediate Language (IL),
um tipo de código de bytes.
O Common Language Runtime (CLR) é o cerne do .NET Framework, compilando o código
IL durante o processo e executando-o em seguida. Ao executar o código IL compilado, o
CLR ativa os objetos, verifica seu nível de segurança, aloca a memória, executa-os e
limpa a memória após concluir a execução.
Fazendo uma analogia ao funcionamento do Java; em Java, um programa pode ser
executado em diversas plataformas com modificações mínimas ou nenhuma modificação:
uma linguagem, mas diversas plataformas. Em .NET, um programa escrito em qualquer
uma das quarenta linguagens suportadas pode ser executado em uma plataforma,
Windows, com modificações mínimas ou nenhuma modificação: diversas linguagens, mas
uma única plataforma.
O ADO.NET é como é fornecido suporte de acesso aos dados no .NET Framework. O
ADO.NET suporta acesso conectado e desconectado. O componente essencial do acesso
desconectado a dados no ADO.NET é a classeDataSet, cujas instâncias atuam como
cache de banco de dados residente na memória do seu aplicativo.
Para ambos os acessos, conectado e desconectado, seus aplicativos usam os bancos de
dados através do que é conhecido por provedor de dados. Diversos produtos de banco
de dados incluem seus próprios provedores de dados .NET, incluindo o DB2 for Windows.
Um provedor de dados .NET apresenta implementações das seguintes classes básicas:
Connection: estabelece e gerencia uma conexão de banco de dados.
Capítulo 14 - Introdução ao desenvolvimento de aplicativos DB2 251
14.3.7 PHP
O PHP Hypertext Preprocessor (PHP) é uma linguagem de scripts de código-fonte
aberto, independente de plataforma, criada para o desenvolvimento de aplicativos de Web.
Ela pode ser incorporada e HTML e geralmente é executada em um servidor de Web, que
usa o código PHP para gerar, como saída, páginas da Web.
O PHP é uma linguagem modular. Você pode usar extensões para personalizar a
funcionalidade disponível. Algumas das extensões PHP mais populares são as usadas
para acessar bancos de dados. A IBM suporta o acesso aos bancos de dados DB2
através de duas extensões:
252 Primeiros passos com o DB2 Express-C
14.3.9 Perl
Perl é uma linguagem de programação interpretada popular, que está disponível
gratuitamente para diversos sistemas operacionais. Ela usa SQL dinâmico e é ideal para a
prototipagem de aplicativos.
A linguagem Perl fornece um módulo padrão denominado Interface de Banco de Dados
(DBI), para acessar bancos de dados diferentes. Ele está disponível em
http://www.perl.com. Este módulo “conversa” com os drivers de diferentes fornecedores de
bancos de dados. No caso do DB2, é o driver DBD::DB2, que está disponível em
http://www.ibm.com/software/data/db2/perl.
Capítulo 14 - Introdução ao desenvolvimento de aplicativos DB2 253
14.3.10 Python
Python é uma linguagem dinâmica usada frequentemente para criar scripts. Ela enfatiza a
legibilidade de código e suporta diversos paradigmas de programação, incluindo a
programação processual, orientada a objeto, orientada a aspecto, metaprogramação e
funcional. Python é uma linguagem ideal para o desenvolvimento rápido de aplicativos.
A Tabela 14.4 mostra as extensões disponíveis para acessar os bancos de dados DB2 a
partir de um aplicativo Python.
Extensão Descrição
ibm_db Definido pela IBM.
Se a Air Atlantis alterar seu horário de partida do voo, estas informações são comunicadas
automaticamente ao sistema da Air Discovery, quando esta chamar o serviço de Web.
14.6 APIs administrativas
O DB2 fornece uma grande quantidade de APIs administrativas que podem ser usadas
pelos desenvolvedores para construir seus próprios utilitários ou ferramentas. Por
exemplo, para criar um banco de dados, você pode chamar a API sqlecrea; para
iniciar uma instância, use a API db2InstanceStart; ou ainda, para importar dados
para uma tabela, use a API db2Import. A lista completa está disponível no Information
Center do DB2. Consulte a seção Recursos para obter o URL do Information Center do
DB2.
14.7 Outros tipos de desenvolvimento
Alguns usuários do DB2 Express-C também interagem com produtos de terceiros, como o
MS Excel e o MS Access, para criar formulários simples que se conectam ao DB2. Nesta
seção, descreveremos como trabalhar com estes produtos e o DB2 Express-C.
O DB2 Express-C também está disponível em Mac OS X, de forma que você pode usar o
DB2 nativamente para desenvolver aplicativos de banco de dados em um Mac. Isto pode
ser especialmente atraente para a comunidade do RoR, que abraçou a plataforma Mac.
256 Primeiros passos com o DB2 Express-C
O IBM Data Server Driver for ODBC, CLI and .Net e o IBM Data Server Driver for ODBC
and CLI também são conhecidos como o IBM DB2 ODBC Driver, que é o mesmo driver
CLI do DB2. Este é o driver que deve ser usado para se conectar ao DB2 a partir do
Access. Após a instalação do driver, crie um projeto no Access 2007 e selecione a opção
Banco de dados ODBC disponível dentro da guia Dados externos na guia Ferramentas de
tabela. As próximas etapas são documentadas no artigo DB2 9 and Microsoft Access 2007
Part 1: Getting the Data... (DB2 9 e Microsoft Access 2007 parte 1: obtenção dos dados...)
[2]. Ao usar tabelas vinculadas no Microsoft Access, os dados ficam disponíveis para os
usuários do Access 2007, mas os dados residem no servidor de dados do DB2.
Nas versões do Access anteriores a 2007, a configuração é um pouco diferente, mas você
pode ler o artigo Use Microsoft Access to interact with your DB2 data (Uso do Microsoft
Access para interagir com seus dados do DB2) [3]. Consulte a seção Referências para
obter mais detalhes.
14.8 Ferramentas de desenvolvimento
O Microsoft Visual Studio e o Eclipse são dois dos mais populares ambientes de
desenvolvimento integrado (IDEs) usado pelos desenvolvedores atualmente. Ambos os
IDEs funcionam bem com o DB2.
Para o Microsoft Visual Studio, o DB2 fornece um add-in do Visual Studio para que, após a
instalação, as ferramentas da IBM sejam adicionadas aos menus do Visual Studio. Dessa
maneira, um desenvolvedor não precisa mudar para outras ferramentas para trabalhar
com os bancos de dados do DB2. Você pode fazer o download do add-in do Visual Studio
no site do DB2 Express-C em www.ibm.com/db2/express.
No que diz respeito ao Eclipse, a IBM lançou o IBM Data Studio, uma ferramenta gratuita
baseada em Eclipse que permite desenvolver scripts SQL e XQuery, procedimentos
armazenados (Stored Procedures), UDFs e serviços de Web. Como ele é baseado na
plataforma Eclipse, muitos desenvolvedores podem aproveitar seus conhecimentos
existentes para trabalhar com esta ferramenta.
14.10 Resumo
Neste capítulo, vimos como o DB2 fornece a flexibilidade de programar aplicativos de
banco de dados dentro do banco de dados no servidor ou através de aplicativos no lado
do cliente com conexões ao servidor de dados DB2.
A cobertura do aplicativo no lado do servidor inclui procedimentos armazenados (Stored
Procedures), funções definidas pelo usuário (UDF) e disparadores (Triggers).
No lado do cliente, discutimos a enorme variedade de interfaces de programação e
métodos permitidos pelo desenvolvimento de aplicativos no DB2, novamente exibindo a
flexibilidade notável e a capacidade do DB2 como servidor de banco de dados.
Capítulo 15 – DB2 pureXML
15
Neste capítulo, discutiremos pureXML, a nova tecnologia introduzida no DB2 9 para
oferecer suporte a armazenamento XML nativo. Muitos dos exemplos e conceitos
discutidos neste capítulo foram tirados do IBM Redbook: DB2 9: pureXML overview and
fast start (Visão geral e início rápido com pureXML). Consulte a seção Recursos para
obter mais informações sobre este título. A Figura 15.1 descreve que seção do “quadro
geral” do DB2 discutiremos neste capítulo.
Observação:
Para obter mais informações sobre pureXML, assista ao vídeo:
http://www.channeldb2.com/video/video/show?id=807741:Video:4382
usadas instruções XPath ou XQuery, elas são processadas nativamente pelo mecanismo
e não convertidas para SQL. É por isso que estes bancos de dados são conhecidos como
XML “nativo”. O DB2 é atualmente o único servidor de dados comercial que fornece este
suporte.
<dept bldg=“101”>
<employee id=“901”>
<name>John Doe</name>
<phone>408 555 1212</phone>
<office>344</office>
</employee>
<employee id=“902”>
<name>Peter Pan</name>
<phone>408 555 9918</phone>
<office>216</office>
</employee>
</dept>
Listagem 15.1 – Um documento XML
dept
employee employee
De um modo semelhante, em XPath você usa as barras (“/”) para ir de um elemento para
outro dentro do documento XML. Por exemplo, usando o documento da Listagem 15.1 em
XPath, você poderia recuperar os nomes de todos os funcionários usando a consulta
abaixo:
/dept/employee/name
Capítulo 15 – DB2 pureXML 267
/dept/@bldg 101
/dept/employee/@id 901
902
/dept/employee/name <name>Peter Pan</name>
<name>John Doe</name>
/dept/employee/name/text() Peter Pan
John Doe
Tabela 15.2 – Exemplos de expressão XPath
344
Peter Pan
216
/dept/*/@id 901
902
268 Primeiros passos com o DB2 Express-C
John Doe
/dept//phone <phone>408 555 1212</phone>
/dept/employee/office[.>“300”] <office>344</office>
Assim, a instrução XQuery da Listagem 15.3 usando a expressão FLWOR poderia ser
executada:
xquery
for $d in db2-fn:xmlcolumn('dept.deptdoc')/dept
let $emp := $d//employee/name
where $d/@bldg > 95
order by $d/@bldg
return
<EmpList>
{$d/@bldg, $emp}
</EmpList>
Listagem 15.3 – Uma amostra de instrução XQuery com a expressão FLWOR
Isto retornaria a saída mostrada na Listagem 15.4
<EmpList bldg="101">
<name>
John Doe
</name>
<name>
Peter Pan
</name>
</EmpList>
Listagem 15.4 – Saída após a execução da instrução XQuery da Listagem 15.3
-- (1)
drop database mydb
;
-- (2)
create database mydb using codeset UTF-8 territory US
;
-- (3)
connect to mydb
Capítulo 15 – DB2 pureXML 271
-- (4)
create table items (
id int primary key not null,
brandname varchar(30),
itemname varchar(30),
sku int,
srp decimal(7,2),
comments xml
);
-- (5)
create table clients(
id int primary key not null,
name varchar(50),
status varchar(10),
contact xml
);
-- (6)
insert into clients values (77, 'John Smith', 'Gold',
'<addr>111 Main St., Dallas, TX, 00112</addr>')
;
-- (7)
IMPORT FROM "D:\Raul\clients.del" of del xml from "D:\Raul" INSERT INTO
CLIENTS (ID, NAME, STATUS, CONTACT)
;
-- (8)
IMPORT FROM "D:\Raul\items.del" of del xml from "D:\Raul" INSERT INTO
ITEMS (ID, BRANDNAME, ITEMNAME, SKU, SRP, COMMENTS)
;
Listagem 15.5 – Conteúdo do arquivo table_creation.txt
Observe que este arquivo de script e os arquivos relacionados são fornecidos no arquivo
compactado Expressc_book_exercises_9.7.zip que acompanha este livro.
Acompanhe enquanto descrevemos cada linha do script da Listagem 15.5.
1. Descarte o banco de dados mydb. Nos arquivos de script, isto normalmente é feito
para realizar uma limpeza. Se mydb não existia antes, você receberá uma
mensagem de erro, mas isto está certo.
2. Crie o banco de dados mydb usando o código UTF-8. Isto cria um banco de dados
Unicode. O pureXML é suportado em ambos os bancos de dados: Unicode ou
não.
272 Primeiros passos com o DB2 Express-C
3. Conecte-se ao banco de dados mydb que acabou de ser criado. Isto é necessário
para criar os objetos dentro do banco de dados.
4. Crie a tabela items. Observe que a última coluna da tabela (coluna comments) é
definida como uma coluna XML usando o novo tipo de dados XML.
5. Criamos a tabela clients. Observe que a última coluna da tabela (coluna
contact) também é definida com o novo tipo de dados XML.
6. Usando esta instrução SQL INSERT, insira um documento XML em uma coluna
XML. Na instrução INSERT, passe o documento XML como uma cadeia de texto
delimitada por aspas simples.
7. Usando o comando IMPORT, você pode inserir ou importar diversos documentos
XML junto com dados relacionais para o banco de dados. Na etapa (7), estamos
importando os dados do arquivo clients.del (um arquivo ascii delimitado), e
também indicamos onde estão localizados os dados XML referenciados no
arquivo clients.del (neste exemplo, em D:\Raul).
Vamos observar o arquivoclients.del com mais atenção mas primeiramente, vejamos
o conteúdo do diretório D:\Raul. A Figura 15.8 fornece estas informações.
Exemplo 1
Imagine que você precisa localizar os nomes de todos os clientes que residem em um
CEP específico. A tabela clients armazena os endereços dos clientes, incluindo CEP,
em uma coluna XML. Usando XMLEXISTS, você pode pesquisar o CEP desejado na
coluna XML e restringir o conjunto de resultados retornado de acordo. A Listagem 15.7
abaixo ilustra a consulta necessária.
SELECT name FROM clients
WHERE xmlexists(
'$c/Client/Address[zip="95116"]'
passing clients.contact as "c"
)
Listagem 15.7 – Um exemplo usando XMLEXISTS
Na Listagem 15.7, a primeira linha é uma cláusula SQL especificando que você deseja
recuperar informações na coluna name da tabela clients.
Capítulo 15 – DB2 pureXML 275
Exemplo 2
Vamos pensar agora em como resolver o problema de criar uma listagem de relatório com
os endereços de email dos clientes com status “Gold”. A consulta na Listagem 15.9 abaixo
pode ser executada com esta finalidade.
SELECT xmlquery('$c/Client/email' passing contact as "c")
FROM clients
WHERE status = 'Gold'
Listagem 15.9 – Um exemplo usando XMLQUERY
A primeira linha indica que desejamos retornar o endereço de email, que é um elemento
do documento XML (não é uma coluna relacional). Como no exemplo anterior, “$c” é uma
variável contendo o documento XML. Neste exemplo usamos a função XMLQUERY, que
pode ser usada após SELECT, enquanto a função XMLEXISTS pode ser usada após a
cláusula WHERE.
Exemplo 3
Em algumas situações, talvez você deseje apresentar dados XML na forma de tabelas.
Isto é possível com a função XMLTABLE como mostrado na Listagem 15.10 abaixo.
276 Primeiros passos com o DB2 Express-C
Exemplo 4
Agora, vamos explorar um exemplo simples, no qual será incluída uma expressão FLWOR
de XQuery dentro de uma função XMLQUERY de SQL/XML. Isto está ilustrado na
Listagem 15.11.
SELECT name, xmlquery(
‘for $e in $c/Client/email[1] return $e’
passing contact as “c”
)
FROM clients
WHERE status = ‘Gold’
Listagem 15.11 – Um exemplo usando XMLQUERY e FLWOR
A primeira linha especifica que os nomes de clientes e a saída da função XMLQUERY
serão incluídos no conjunto de resultados. A segunda linha indica que o primeiro
subelemento email do elemento Client deverá ser retornado. A terceira linha identifica
a fonte dos dados XML (a coluna contact). A quarta linha informa que esta coluna é
originária da tabela clients, e a quinta linha indica que somente nos interessam os
clientes Gold.
Exemplo 5
O exemplo ilustrado na Listagem 15.12 demonstra novamente a função XMLQUERY, que
assume uma expressão FLWOR de XQuery; entretanto, observe que dessa vez estamos
retornando não apenas XML, mas também HTML.
Capítulo 15 – DB2 pureXML 277
Exemplo 6
O exemplo a seguir usa a função XMLELEMENT para criar uma série de elementos de
item, cada um contendo subelementos para os valores de ID, nome da marca e unidade
de manutenção de estoque (SKU) obtidos nas colunas correspondentes da tabela items.
Basicamente, podemos usar a função XMLELEMENT quando desejamos converter dados
relacionais em XML. Isto é ilustrado na Listagem 15.13.
SELECT
xmlelement (name "item", itemname),
xmlelement (name "id", id),
xmlelement (name "brand", brandname),
xmlelement (name "sku", sku)
FROM items
WHERE srp < 100
Listagem 15.13 – Um exemplo usando XMLELEMENT
A consulta na Listagem 15.13 retornaria a saída mostrada na Listagem 15.14
<item>
<id>4272</id>
<brand>Classy</brand>
<sku>981140</sku>
</item>
…
<item>
<id>1193</id>
<brand>Natural</brand
<sku>557813</sku>
</item>
Listagem 15.14 – Saída da consulta na Listagem 15.13
278 Primeiros passos com o DB2 Express-C
Exemplo 1
Esta é uma consulta XQuery simples para retornar os dados de contato do cliente. Neste
exemplo, CONTACT é o nome da coluna XML e CLIENTS é o nome da tabela.
xquery db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)
Sempre coloque prefixo em qualquer expressão XQuery com o comando xquery para
que o DB2 saiba que deve usar o analisador XQuery; caso contrário, o DB2 assumirá que
você está tentando executar uma expressão SQL. A função db2-fn:xmlcolumn
recupera os documentos XML da coluna especificada como parâmetro. Ela equivale à
instrução SQL abaixo, pois está recuperando o conteúdo da coluna inteira:
SELECT contact FROM clients
Exemplo 2
Neste exemplo mostrado na Listagem 15.15, usamos a expressão FLWOR para recuperar
dados de fax dos clientes
xquery
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/fax
return $y
Listagem 15.15 – Xquery e a expressão FLWOR
A primeira linha chama o analisador XQuery. A segunda linha orienta o DB2 a iterar
através dos subelementos de fax contidos na coluna CLIENTS.CONTACT. Cada elemento
de fax está vinculado à variável $y. A terceira linha indica que, para cada repetição, é
retornado o valor “$y”.
A saída desta consulta é ilustrada na Listagem 15.16 (Omitimos o namespace na saída
para simplificar a leitura; caso contrário ela ocuparia muitas linhas):
<fax>4081112222</fax>
<fax>5559998888</fax>
Listagem 15.16 – Saída da consulta mostrada na Listagem 15.15
Exemplo 3
O exemplo da Listagem 15.17 consulta dados XML e retorna os resultados como HTML.
Capítulo 15 – DB2 pureXML 279
xquery
<ul> {
for $y in db2-fn:xmlcolumn(‘CLIENTS.CONTACT’)/Client/Address
order by $y/zip
return <li>{$y}</li>
}
</ul>
Listagem 15.17 – Instrução XQuery com a expressão FLWOR retornando HTML
Exemplo 4
O exemplo abaixo mostra como incorporar SQL dentro de XQuery, usando a função db2-
fn:sqlquery. A função db2-fn:sqlquery executa uma consulta SQL e retorna
somente os dados XML selecionados. A consulta SQL passada para db2-fn:sqlquery
deve retornar somente dados XML. Esses dados XML poderão ser processados em
seguida pela XQuery. Isto é ilustrado na Listagem 15.19.
xquery
for $y in
db2-fn:sqlquery(
‘select comments from items where srp > 100’
)/Comments/Comment
where $y/ResponseRequested=‘Yes’
280 Primeiros passos com o DB2 Express-C
return (
<action>
{$y/ProductID
$y/CustomerID
$y/Message}
</action>
)
Listagem 15.19 – Um exemplo da função db2-fn:sqlquery incorporando SQL em
XQuery
No exemplo, a consulta SQL filtra as linhas com base na condição de que a coluna srp
tenha valor superior a 100. Das linhas filtradas, ela seleciona a coluna comments, que é a
coluna XML. Em seguida, a consulta XQuery (ou XPath) é aplicada para ir para os
subelementos.
Observação:
SQL não faz distinção entre maiúsculas e minúsculas, e o DB2 armazena todos os
nomes de tabela e coluna em maiúsculas, como padrão. Por outro lado, XQuery faz
distinção entre maiúsculas e minúsculas. As funções acima são funções de interface
XQuery, portanto todos os nomes de tabela e de coluna devem ser passados a estas
funções em maiúsculas. Se os nomes de objetos forem passados em minúsculas, poderá
ocorrer um erro de nome de objeto indefinido.
A linha 4 da instrução na listagem acima mostra que a operação JOIN ocorre entre o
elemento name,que é um subelemento da coluna XML deptdoc na tabela dept, e a
coluna relacional manager na tabela unit.
A Listagem 15.22 mostra o segundo método de execução da operação JOIN.
SELECT u.unitID
FROM dept d, unit u
WHERE u.manager = XMLCAST(
XMLQUERY(‘$e//employee/name ‘
passing d.deptdoc as “e”)
AS char(20))
Listagem 15.22 – Segundo método de execução de JOIN com SQL/XML
Neste segundo método, a coluna relacional está no lado esquerdo de JOIN. Se a coluna
relacional estiver no lado esquerdo da equação, pode-se usar um índice relacional em vez
de índice XML.
>>-transform--| copy clause |--| modify clause |--| return clause |-><
copy clause
.-,---------------------------------------.
V |
|--copy----$VariableName--:=--CopySourceExpression-+------------|
modify clause
|--modify--ModifyExpression-------------------------------------|
return clause
|--return--ReturnExpression-------------------------------------|
Listagem 15.26 – A sintaxe da expressão TRANSFORM
A cláusula copy é usada para atribuir os documentos XML que você deseja processar a
uma variável.
Na cláusula modify, você pode chamar uma expressão insert, delete, rename ou
replace. Estas expressões permitem realizar atualizações no documento XML.
Por exemplo:
• Se você deseja adicionar novos nós ao documento, use a expressão insert
• Para excluir nós de um documento XML, use a expressão delete
• Para renomear um elemento ou atributo no documento XML, use a expressão
rename
• Para substituir um nó existente por um novo nó ou sequência de nós, use a
expressão replace. O valor de substituição da expressão só pode ser usado
para alterar o valor de um elemento ou atributo.
A cláusula return retorna o resultado da expressão transform.
A Listagem 15.27 mostra um exemplo de instrução UPDATE usando a expressão
TRANSFORM.
(1)-- UPDATE customers
(2)-- SET contactinfo = xmlquery( 'declare default element namespace
(3)-- "http://posample.org";
(4)-- transform
(5)-- copy $newinfo := $c
(6)-- modify do insert <email2>my2email.gm.com</email2>
(7)-- as last into $newinfo/customerinfo
(8)-- return $newinfo' passing contactinfo as "c")
(9)-- WHERE id = 100
284 Primeiros passos com o DB2 Express-C
O DB2 também suporta a evolução de esquema XML. Isto significa que se o esquema
XML mudar, você pode atualizá-lo facilmente com o comando UPDATE XMLSCHEMA. Se
as alterações no esquema XML forem muito drásticas, é possível que você receba alguns
erros.
O DB2 também suporta a decomposição ou “fragmentação” de XML. Este é o método
“antigo” de armazenar o XML nos bancos de dados, e é o que os outros fornecedores
usam para armazenar XML. O DB2 ainda suporta este método, se você quiser usá-lo; no
entanto, recomendamos usar pureXML. O DB2 também suporta o XML Extender usando o
antigo método para armazenar XML, mas este não será mais aperfeiçoado.
Com o DB2 9.7, todos os benefícios do pureXML foram ampliados para as partições de
banco de dados usadas normalmente em depósitos de dados. O Database Partitioning
Feature (DPF) é oferecido com o DB2 Enterprise Edition.
15.6 Resumo
Este capítulo foi uma introdução ao XML e à tecnologia pureXML. O uso de documentos
XML cresce exponencialmente, devido às ferramentas e técnicas da Web 2.0, além da
SOA. Ao armazenar documentos XML em um banco de dados do DB2, você pode tirar
proveito da segurança, desempenho e flexibilidade de programação usando pureXML. A
tecnologia pureXML permite armazenar documentos XML em formato hierárquico
analisado, como uma árvore, e isto é realizado no momento da inserção no banco de
dados. No momento da consulta, não há necessidade de analisar o documento XML para
construir uma árvore antes do processamento. A árvore do documento XML já foi
construída e armazenada no banco de dados. Além disso, a tecnologia pureXML usa um
mecanismo XML nativo que compreende XQuery. Portanto, não há necessidade de
mapear XQuery para SQL, que é o que fazem os outros produtos de RDBMS.
O capítulo também explicou como inserir, excluir, atualizar e consultar documentos XML
usando SQL/XML e XQuery. Também discutiu os índices XML, o esquema XML e outros
recursos como a compressão e a evolução de esquema XML.
15.7 Exercícios
Ao longo deste capítulo, você viu diversos exemplos de sintaxe SQL/XML e XQuery, e foi
apresentado ao DB2 Command Editor e ao IBM Data Studio. Neste exercício, você irá
testar seu conhecimento em SQL/XML e XQuery e ganhar experiência com estas
ferramentas. Usaremos o banco de dados mydb criado usando o arquivo de script
table_creation.txt que foi explicado anteriormente neste capítulo (Listagem 15.5).
Procedimento
1. Crie o banco de dados mydb e carregue os dados XML, como discutido antes
neste capítulo. O arquivo table_creation.txt foi incluído no arquivo anexo
Expressc_book_exercises_9.7.zip na pasta Chapter 2 (Capítulo 2).
Execute o arquivo de script table_creation.txt em uma Command Window
do DB2 ou no shell do Linux, na forma a seguir:
db2 –tvf table_creation.txt
Capítulo 15 – DB2 pureXML 291
4. Após executar o script com sucesso, use o Control Center do DB2 ou o IBM Data
Studio para confirmar se as tabelas items e clients foram criadas e que contêm 4
e 7 linhas, respectivamente.
5. Com o banco de dados mydb criado e as duas tabelas carregadas, você agora
pode conectar-se a ele e executar as consultas mostradas nas Listagens 15.7 a
15.19
Apêndice A – Solução de problemas
A
Este apêndice discute como resolver problemas que podem ser encontrados ao se
trabalhar com o DB2. A Figura A.1 fornece uma rápida visão geral das ações que devem
ser tomadas caso ocorra um problema.
db2 ? <code>
Review Administration
Notification Log
Review db2diag.log
Problem!
Observação:
Para obter mais informações sobre solução de problemas, assista ao vídeo:
http://www.channeldb2.com/video/video/show?id=807741:Video:4462
Figura A.2 – Como obter mais informações sobre os códigos de erro do DB2
A interrogação (?) chama o comando de ajuda do DB2. Veja abaixo diversos exemplos de
como chamá-lo para obter ajuda caso receba, por exemplo, o código de erro de SQL
“-104”. Todos os exemplos abaixo são equivalentes.
db2 ? SQL0104N
db2 ? SQL104N
db2 ? SQL-0104
db2 ? SQL-104
db2 ? SQL-104N
SQLSTATE é uma cadeia de texto de cinco caracteres que atende à norma ISO/ANSI
SQL92. Os dois primeiros caracteres são conhecidos como o código de classe
SQLSTATE:
Um código de classe 00 significa que o comando foi bem-sucedido.
Um código de classe 01 indica um aviso.
Um código de classe 02 indica uma condição não encontrado.
Todos os outros códigos de classe são considerados erros.
A.4 db2diag.log
O db2diag.log fornece mais informações detalhadas que o log de notificação de
administração do DB2. Normalmente, ele é usado apenas pelo suporte técnico do IBM
DB2 ou DBAs experientes. As informações do db2diag.log incluem:
A localização do código do DB2 informando um erro.
Identificadores do aplicativo que permitem comparar as entradas relacionadas a
um aplicativo nos db2diag.logs de servidores e clientes.
Uma mensagem de diagnóstico (iniciando por “DIA”) explicando o motivo do erro.
Qualquer dado de suporte disponível, como as estruturas de dados SQLCA e os
ponteiros para a localização de qualquer arquivo extra de despejo ou
interceptação.
No Windows (versão diferente do Vista), o db2diag.log está localizado, como padrão, no
diretório:
296 Primeiros passos com o DB2 Express-C
B.2 Sites:
4. developerWorks: http://www.ibm.com/developerworks/db2
Este site é um recurso excelente para os desenvolvedores e DBAs, fornecendo
gratuitamente acesso aos atuais artigos, tutoriais, etc.
5. alphaWorks: http://www.alphaworks.ibm.com/
Este site fornece acesso direto à tecnologia emergente da IBM. É um local onde se
pode encontrar as tecnologias mais recentes da IBM Research.
6. planetDB2: www.planetDB2.com
Este é um agregador de blogs de diversos contribuintes que mantêm blogs sobre o
DB2.
8. ChannelDB2: http://www.ChannelDB2.com/
O ChannelDB2 é uma rede social para a comunidade do DB2. Ele traz conteúdo
como vídeos relacionados ao DB2, demonstrações, podcasts, blogs, discussões,
recursos, etc. para Linux, UNIX, Windows, z/OS e i5/OS.
B.3 Livros
1. Redbook gratuito: DB2 Express-C: The Developer Handbook for XML, PHP,
C/C++, Java, and .NET (Manual do desenvolvedor para XML, PHP, C/C++, Java e
.NET)
Whei-Jen Chen, John Chun, Naomi Ngan, Rakesh Ranjan, Manoj K. Sardana,
agosto de 2006 - SG24-7301-00
http://www.redbooks.ibm.com/abstracts/sg247301.html?Open
Apêndice B - Referências e recursos 299
5. DB2® SQL PL: Essential Guide for DB2® UDB on Linux™, UNIX®, Windows™,
i5/OS™, and z/OS®, 2nd Edition (Guia essencial para DB2® UDB em Linux™,
UNIX®, Windows™, i5/OS™ e z/OS®, 2ª edição)
Zamil Janmohamed, Clara Liu, Drew Bradstock, Raul Chong, Michael Gao, Fraser
McArthur, Paul Yip
ISBN: 0-13-100772-6