O DB2 Express-C é a edição do DB2 para a comunidade. Pode-se usá-lo como parte de seu sistema de produção, incorporá-lo e distribuí-lo em seus aplicativos ou simplesmente usá-lo para fins de desenvolvimento. Tudo isso de graça!
O DB2 Express-C pode ser instalado em servidores de qualquer tamanho, embora use apenas dois núcleos e 2GB de memória. Além disso, não há limitação ao tamanho do banco de dados. O conjunto robusto de funções fornecidas pelo DB2 Express-C é muito comparável às edições para a comunidade de programas de bancos de dados oferecidos por outros fornecedores.
O DB2 Express-C Versão 9.7 foi lançado em junho de 2009. Desde então, a imagem do DB2 Express-C foi atualizada três vezes. A atualização mais recente é a 9.7.4, lançada em 2 de maio de 2011. Este artigo resume alguns dos novos recursos e aprimoramentos principais acrescentados entre a Versão 9.7 e a atualização atual, 9.7.4. Para obter uma descrição completa de todas as novas funcionalidades incluídas na Versão 9.7 e as imagens atualizadas, consulte a seção Recursos para ver o tópico Visão geral no Centro de Informações do Banco de Dados IBM DB2 para Linux, UNIX e Windows.
Fique à vontade para testar os exemplos fornecidos neste artigo. A menos que outra coisa seja indicada, eles usam o banco de dados SAMPLE incluído no DB2. Note que, à medida que o código do DB2 Express-C é atualizado para uma versão mais recente, os bancos de dados existentes também precisam ser atualizados usando o comando db2updv97
. Por exemplo, digamos que foi criado o banco de dados SAMPLE quando instalamos o DB2 Express-C 9.7.1. Agora, se quisermos usar o banco de dados SAMPLE e aproveitar os novos recursos incluídos no DB2 Express-C 9.7.4, é preciso executar:
db2updv97 -d sample.
Esse comando ativará novas funções ou recursos incluídos na nova atualização do seu banco de dados existente. Se criarmos novos bancos de dados após a atualização do código do DB2 Express-C, esses bancos de dados terão automaticamente os recursos mais recentes, de modo que não será preciso executar esse comando.
Com a nova semântica Currently Committed (CC) do nível de isolamento de Cursor Stability (CS), os gravadores (operações UPDATE
) não bloqueiam mais os leitores (operações SELECT
). Os leitores agora leem o valor atualmente confirmado antes de executar uma operação UPDATE . Esse aprimoramento melhora a simultaneidade e reduz os conflitos.
Por exemplo, suponhamos que temos uma tabela chamada T1 com o seguinte conteúdo:
Tabela 1. Conteúdo da tabela T1
| FIRSTNAME | LASTNAME |
|---|---|
| Raul | Chong |
| Jin | Xie |
Agora, suponhamos que um aplicativo chamado AppA emita a seguinte instrução, mas não execute uma confirmação:
update T1 set lastname = 'Smith' where firstname = 'Raul' |
A seguir, um aplicativo chamado AppB emite a seguinte instrução:
select lastname from T1 where firstname = 'Raul' with CS |
Antes do DB2 9.7, a instrução emitida por AppB travaria porque teria de aguardar o bloqueio exclusivo mantido pela instrução update
de AppA (o gravador) ser liberado. Quando ativamos esse novo comportamento de CS (é o comportamento padrão para novos bancos de dados DB2 9.7), a instrução de AppB retorna o valor atualmente confirmado, em vez de esperar. Nesse caso, o valor retornado seria Chong porque a atualização emitida por AppA ainda não foi confirmada.
O DB2 9.7 introduz o recurso de concentrador de instrução que melhora o desempenho de programas que usam SQL dinâmico, e que são desenvolvidos em linguagens como Ruby e PHP. O concentrador de instrução procura instruções SQL exatamente iguais, exceto pelo valor de parâmetro. Então, como o próprio nome sugere, ele concentra essas diversas instruções em uma instrução. Por exemplo, com o concentrador de instrução, as seguintes instruções:
SELECT name FROM employee WHERE empid = 10 SELECT name FROM employee WHERE empid = 20 SELECT name FROM employee WHERE empid = 30 |
são concentradas em:
SELECT name FROM employee WHERE empid = ? |
O ponto de interrogação (?) representa um marcador de parâmetro. Para esse exemplo específico, o DB2 forneceria os valores 10, 20 e 30 no tempo de execução.
Esse recurso fornece um aumento significativo no desempenho em relação a versões anteriores do DB2. Sem o recurso de concentrador de instrução, as versões anteriores do DB2 tratariam cada instrução no exemplo acima como exclusiva, e compilariam e executariam cada uma separadamente. No entanto, o plano de acesso para todas as instruções provavelmente era o mesmo, por isso, era um desperdício de recursos calculá-lo repetidamente. Com o recurso de concentrador de instrução, o DB2 9.7 agora compila a instrução uma única vez para obter o plano de acesso da instrução e depois o reutiliza.
Outra melhoria de desempenho está relacionada ao armazenamento de objetos grandes (LOBs). Agora é possível armazenar LOBs menores que o sequencial de tamanho especificado com as linhas de dados. Isso melhora o desempenho desses LOBs porque é possível acessá-los por meio do buffer pool.
Aprimoramentos de desenvolvimento de aplicativos
O DB2 9.7 inclui as seguintes melhorias para desenvolvedores de aplicativos.
- Acionadores e funções definidas pelo usuário (UDFs) aprimoraram o suporte a SQL PL. Antes do DB2 9.7, havia suporte apenas a SQL PL sequencial, que é um pequeno subconjunto do SQL PL. Além disso, os acionadores agora podem conter operações UPDATE, DELETE e INSERT juntamente em uma única cláusula como evento de acionador. Por exemplo:
CREATE TABLE COMPANY_STATS (NBEMP INTEGER) ! CREATE TRIGGER HIRED AFTER INSERT OR DELETE OR UPDATE OF SALARY ON EMPLOYEE REFERENCING NEW AS N OLD AS O FOR EACH ROW BEGIN IF INSERTING THEN UPDATE COMPANY_STATS SET NBEMP = NBEMP + 1; END IF; IF DELETING THEN UPDATE COMPANY_STATS SET NBEMP = NBEMP - 1; END IF; IF (UPDATING AND (N.SALARY > 1.1 * O.SALARY)) THEN SIGNAL SQLSTATE '75000' SET MESSAGE_TEXT='Salary increase>10%'; END IF; END !
Em versões anteriores, era preciso criar acionadores separados para cada evento de acionador. Note também no exemplo que INSERTING, DELETING e UPDATING são predicados especiais que podem ser usados como variáveis booleanas para a identificação de ações de acionador. Também, os acionadores BEFORE agora podem conter UPDATE, DELETE, INSERT e rotinas que modificam os dados. Em versões anteriores isso só era permitido para acionadores AFTER. - No caso de procedimentos armazenados de SQL PL e UDFs, pode-se especificar valores padrão de parâmetro e designá-los por nome. Além disso, novos tipos de variáveis booleanas, de cursor, linha e array são suportados agora.
- A instrução
TRUNCATE SQLagora é suportada para exclusões rápidas. - A função agregada
LISTAGGagora é suportada. Como o nome indica, essa função cria uma lista agregando um conjunto de cadeias de caractere na ordem especificada pela cláusula WITHIN GROUP. Por exemplo, digamos que nos conectemos ao banco de dados SAMPLE e executemos o seguinte:SELECT workdept, LISTAGG(lastname, ', ') WITHIN GROUP (ORDER BY lastname) FROM emp GROUP BY workdept
No exemplo, a colunaworkdept, e uma lista de sobrenomes separados por vírgulas seria retornada em ordem alfabética:A00 HAAS, HEMMINGER, LUCCHESSI, O'CONNELL, ORLANDO B01 THOMPSON C01 KWAN, NATZ, NICHOLLS, QUINTANA D11 ADAMSON, BROWN, JOHN, JONES, LUTZ, PIANKA, SCOUTTEN, STERN, WALKER, YAMAMOTO, YOSHIMURA D21 JEFFERSON, JOHNSON, MARINO, MONTEVERDE, PEREZ, PULASKI, SMITH E01 GEYER E11 HENDERSON, PARKER, SCHNEIDER, SCHWARTZ, SETRIGHT, SMITH, SPRINGER E21 ALONZO, GOUNOT, LEE, MEHTA, SPENSER, WONG
- A sintaxe alternativa de SQL, como o uso de
ROWNUMeROWIDagora é suportada. - O DB2 9.7 agora suporta o conceito de módulo (isso é similar ao conceito de pacote em Oracle), que pode ser usado para empacotar as definições de objetos de banco de dados relacionados.
- O DB2 9.7 agora suporta o cast implícito entre tipos de dados. Isso é útil para linguagens dinâmicas, como PHP e Ruby. Por exemplo, o seguinte não é permitido:
create table t1 (col1 int) select * from t1 where col1 = '42'
No exemplo, pode-se comparar o valor da cadeia de caractere42à coluna de números inteiroscol1. - Há muitas funções novas para a manipulação de datas, cadeias de caractere e outros tipos de dados.
- O DB2 agora suporta CGTTs (Create Global Temporary Tables), que são tabelas temporárias com dados disponíveis apenas durante a sessão. A diferença entre CGTTs e DGTTs (Declared Global Temporary Tables) é que, no caso das CGTTs, a definição de tabela é persistida nas tabelas do catálogo de DB2. Assim, depois que uma CGTT é criada, pode ser usada em qualquer sessão sem ter de criá-la novamente. As linhas, porém, são independentes por sessão.
- Agora, é possível usar alias públicos (também conhecidos como sinônimos públicos) para fazer referência a objetos globais. Antes do DB2 9.7, todos os objetos DB2 tinham um nome exclusivo com duas partes. A primeira parte era o nome de esquema e a segunda, o nome de objeto. Ao criar um sinônimo público, pode-se fazer referência a um objeto sem o nome de esquema, independentemente do ID de usuário conectado ao banco de dados, como mostrado no exemplo a seguir.
connect to sample user arfchong using mypsw create public synonym raul for table arfchong.staff select * from raul ## works OK select * from arfchong.raul ## Error connect to sample user db2admin using psw select * from raul ## works OK
- O DB2 9.7 relaxou suas regras de dependência de objeto para permitir uma evolução de esquema mais flexível. Por exemplo, digamos que tínhamos a seguinte dependência:
Visualização2 --> Visualização1 --> Tabela1
Antes, se quiséssemos mudar a Visualização1, primeiro era preciso descartar a Visualização2 porque ela dependia da anterior. Mas no DB2 9.7, não é mais preciso descartar a Visualização2. Agora, o DB2 executa a revalidação da Visualização2 automaticamente de forma imediata ou quando a visualização for usada novamente. Isso pode ser útil ao testarmos aplicativos ou quando é preciso mudar o esquema do banco de dados (por exemplo, acrescentar colunas).
Algumas outras melhorias na área de evolução de esquema são:
- É possível renomear colunas.
- A opção
REPLACEfoi incluída em várias instruçõesCREATE, de modo que não é mais necessário emitir uma instrução de descartar. Portanto, todos os privilégios do objeto permanecem. ALTER COLUMNagora pode usarSET DATA TYPEpara todos os tipos.
- Os add-ins Visual Studio foram aprimorados, bem como o IBM Data Server Provider for .NET. Esse provedor agora suporta variáveis de host, módulos, o tipo de dados
ARRAY, instruções compostas e registro de data e hora de comprimento variável.
São incluídas versões de 32 bits do IBM Data Server Provider for .NET no pacote de driver de 64 bits. Ao instalar os drivers de 64 bits, os drivers de 32 bits também são instalados em um diretório separado chamado sqllib\bin\netf20_32.
Também há uma nova palavra-chave de arquivo db2dsdriver.cfg,
QueryTimeout, que define por quanto tempo um cliente deve aguardar a execução de uma consulta antes de o tempo de espera acabar.Outros aprimoramentos incluem a capacidade de instruções
CALLde pegar argumentos nomeados em qualquer ordem. - Os aprimoramentos JDBC e SQLJ foram feitos para oferecer suporte a alguns outros aprimoramentos descritos antes.
- Agora são suportados novos tipos de dados, como
NUMBER,VARCHAR2eTIMESTAMPcom uma definição da precisão de fração de segundo. - O suporte aprimorado a aplicativos Python-DB2.
- Os aprimoramentos pureXML incluem suporte a DGTT.
- Nova sintaxe de SQL usando as cláusulas
LIMITeOFFSETé suportada agora. A cláusulaLIMITé útil quando se quer limitar o número de registros retornados por uma instrução SQL. Por exemplo, se a tabela USERS tem 100 registros, mas só queremos retornar cinco deles, podemos usar a seguinte instrução:SELECT * FROM users LIMIT 5
A cláusula
OFFSETindica quantas linhas são ignoradas da primeira linha até começar a retornar os resultados. Por exemplo, se queremos retornar as linhas 11 a 15 da tabela USERS, podemos usar a seguinte instrução:SELECT * FROM users LIMIT 5 OFFSET 10
Essas duas cláusulas são úteis quando queremos percorrer os resultados de várias páginas no código diretamente no banco de dados em vez de filtrá-los na camada de aplicativo.
As cláusulas
LIMITeOFFSETsão ativadas por padrão. No entanto, se percebermos que essas cláusulas não estão funcionando, podemos confirmar se estão ativadas executando os seguintes comandos:$ db2set DB2_COMPATIBILITY_VECTOR=MYS $ db2stop $ db2start
- Há um novo parâmetro de configuração de banco de dados CONNECT_PROC que pode ser configurado para o nome de um procedimento armazenado. Esse procedimento seria chamado automaticamente durante o processo de conexão com um banco de dados e poderia, portanto, ser usado para configurar os parâmetros para a conexão a partir de um local central. Por exemplo, esse procedimento poderia definir registros especiais, como CURRENT_PATH, CURRENT_SCHEMA e CURRENT LOCALE LC_TIME, bem como variáveis globais sem mudar o aplicativo.
- Há também uma nova função para o predicado LIKE que torna possível a utilização de uma referência de coluna como expressão de padrão. O predicado LIKE pode, portanto, ser usado como predicado de junção difusa. Por exemplo ao usar INNER JOIN, comparamos duas colunas de tabelas diferentes e testamos a igualdade. Agora, em vez de testar a igualdade, podemos testar com base no predicado LIKE. Por exemplo, digamos que haja as seguintes duas tabelas
EMPRESA
| NOME | TELEFONE |
|---|---|
| ACME | 416-123-1111 |
| SOMOS | 905-122-9999 |
| ZZZ | 713-999-8888 |
| XLS | 647-123-9999 |
| TELX | 416-590-1224 |
CÓDIGOS TELEFÔNICOS
| Cidade | CÓDIGO DE ÁREA |
|---|---|
| Toronto | 416 |
| Mississauga | 905 |
| Oshawa | 647 |
| Houston | 713 |
- Agora digamos que queiramos localizar a cidade de cada empresa com base em seu código de área telefônico. Nesse caso, executamos uma consulta como esta:
SELECT A.name, B.city FROM company A, phonecodes B WHERE B.areacode LIKE substr(A.phone,1,3)
Nessa consulta, a junção difusa acontece entre a coluna CÓDIGO DE ÁREA da tabela CÓDIGOS TELEFÔNICOS, e os primeiros três caracteres da coluna TELEFONE na tabela EMPRESA que usa o predicado LIKE. O resultado seria:NAME CITY ---------- --------------- ACME Toronto TELX Toronto SOMOS Mississauga XLS Oshawa ZZZ Houston
Aprimoramentos de recuperação e armazenamento
Os usuários de DB2 atuais e prospectivos muitas vezes perguntam quanto o DB2 é capaz de armazenar. Em cada novo release do produto, as equipes de desenvolvimento IBM DB2 continuam a ampliar os limites. No caso do DB2 9.7, os limites de tamanho de espaços de tabela grandes e temporários foram aumentados em quatro vezes. Por exemplo, um espaço de tabela com tamanho de página de 32KB agora pode armazenar 64TB. Antes, podia armazenar apenas 16TB.
Há uma nova ferramenta chamada db2cklog que pode ser usada para verificar a validade de arquivos de log de archive antes de usar esses arquivos durante uma recuperação de progressão. Para executar a ferramenta, pode-se digitar algo como isto:
db2cklog 2 |
Onde 2 é o segundo log que tinha o nome de arquivo de S0000002.LOG.
Com versões anteriores do DB2, os administradores de sistema basicamente tinham acesso a tudo. Com o DB2 9.7, o modelo de segurança foi aprimorado para permitir a separação de deveres. Isso minimiza o risco de exposição de dados e pode ajudar as organizações a atender aos requisitos de conformidade do governo. Há vários novos níveis de autoridade de administração, dois dos quais são: DATAACCESS e ACCESSCTRL, que podem ser usados para conceder aos usuários a autoridade para acessar dados e conceder acesso a dados, respectivamente. Isso significa que um administrador de segurança pode revogar esses níveis de autoridade para um administrador de sistemas ou de banco de dados, o que, essencialmente, deixaria esse usuário sem acesso a nenhum dado.
Também há melhorias de auditoria que permitem repetir atividades de banco de dados passados. Por exemplo, se for necessário analisar como determinada solicitação feita alguns anos atrás afetou algumas tabelas, agora pode-se usar as informações de auditoria de banco de dados para obter o que se precisa para essa análise.
Aprimoramentos de gerenciamento
O DB2 agora fornece a capacidade de mover tabelas on-line para um espaço de tabelas diferentes. Isso significa que até mesmo enquanto os usuários estão acessando uma tabela , pode-se alterar onde reside o armazenamento da tabela. Esse é mais um exemplo de como o DB2 se esforça a fornecer disponibilidade 24x7 para seus dados. Se um administrador de banco de dados detecta que o armazenamento em um dos espaços de tabela está se enchendo rapidamente, ele pode usar o procedimento armazenado ADMIN_MOVE_TABLE fornecido com o DB2 9.7 para mover a tabela para outro espaço de tabela com espaço livre.
Os usuários não teriam nenhum impacto; poderia usar SELECT, INSERT,
UPDATE e DELETE
como de costume. Para implementar essa função, o DB2 cria uma cópia de sombra da tabela e controla as alterações feitas na tabela original. As mudanças são então aplicadas posteriormente na cópia de sombra.
Outras melhorias na área de gerenciamento estão relacionadas ao transporte de um esquema de banco de dados. Pode-se pensar em um esquema SQL do DB2 como forma de agrupar objetos diferentes de banco de dados, como tabelas, visualizações, índices e outros. Por exemplo, suponhamos que a tabela RFCHONG.T1 e a visualização RFCHONG.V1 estejam usando o mesmo esquema chamado RFCHONG. Às vezes, talvez queiramos transportar todos os objetos que usam um esquema para outro banco de dados. Um método de fazer isso, aplicável somente a tabelas, é usar o utilitário db2move . Agora, pode-se usar o comando RESTORE com a opção TRANSPORT para copiar espaços de tabela e esquemas SQL como um conjunto de uma imagem de backup de banco de dados para outro banco de dados ativo.
Agora pode-se usar o comando da ferramenta de validação de cópia do DB2 db2val para verificar rapidamente se foi configurada corretamente a instalação do DB2 Express-C.
A área de cobertura das imagens DB2 Express-C para Linux e Windows foi bastante reduzida (até 37 por cento de redução). As imagens de DB2 Express-C também estão disponíveis na Amazon Cloud, IBM Cloud e foram incluídas em modelos de servidor em Rightscale. Veja na seção Recursos os links para Amazon Cloud, IBM Cloud e Rightscale.
Spatial Extender e Procura de Texto do DB2
Embora os recursos espaciais do DB2 estejam disponíveis há quase 10 anos, poucos usuários sabem sobre eles. Assim, embora essa funcionalidade não seja especificamente nova em imagens atualizadas do 9.7, vale a pena notar aqui que se 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ésicos utilizando SQL. Por exemplo, esse recurso pode ajudá-lo a responder perguntas como: "Qual é o outlet de vendas mais próximo de cada cliente que mora em Toronto e gastou mais de US$ 3.000,00 no ano passado conosco?"
Pode-se usar o DB2 Spatial Extender até para aplicativos médicos. Por exemplo, ele pode ajudar a responder a pergunta: "Quais são os padrões de células malignas em um exame de ressonância magnética cerebral?"
Para obter mais informações, consulte a seção Recursos e veja o tópico About DB2 Spatial Extender no Centro de Informações do Banco de Dados IBM DB2 para Linux, UNIX e Windows.
No DB2 Express-C 9.5.2, a Procura de Texto foi integrada ao produto DB2 e permite executar procurar rápidas em colunas de texto. No DB2 Express-C 9.7.4 houve mais melhorias nas áreas de desempenho, configuração e ajuste. Para obter mais informações sobre Procura de Texto consulte o artigo Discover new features in DB2 Express-C 9.5.2 na seção de Recursos
Este artigo destacou alguns dos aprimoramentos mais notáveis que foram introduzidos no DB2 Express-C desde a versão 9.7 até a atualização atual, 9.7.4. Essa versão mais recente da edição do DB2 da IBM para a comunidade inclui novos recursos relacionados ao desempenho, desenvolvimento de aplicativo, armazenamento, segurança, e muito mais - alguns dos quais estavam disponíveis antes apenas nas versões pagas do DB2.
Aproveite o novo DB2 Express-C 9.7.4!
Aprender
- Aprenda mais sobre a nova funcionalidade da Versão 9.7.4 no tópico What's New overview no Centro de Informações do Banco de Dados IBM DB2 para Linux, UNIX e Windows.
- Veja o tópico About DB2 Spatial Extender no Centro de Informações do Banco de Dados IBM DB2 para Linux, UNIX e Windows.
- Veja o artigo Discover new features in DB2 Express-C 9.5.2 para obter mais informações sobre a funcionalidade de Procura de Texto.
- Consulte o ebook gratuito Conhecendo o DB2 Express-C - 3.ª edição , onde muitos dos aprimoramentos apresentados neste artigo são descritos em mais detalhes, e que foi atualizado para o DB2 9.7.
- Aprenda mais sobre IBM Spatial Offerings.
- Aprenda mais sobre Amazon Cloud.
- Aprenda mais sobre IBM Cloud.
- Aprenda mais sobre Rightscale.
- Aprenda mais sobre DB2 Express-C.
- Acesse a página de DB2 para Linux, UNIX e Windows no developerWorks, onde se pode localizar os recursos necessários para aprimorar suas qualificações em DB2.
- Aprenda mais sobre Information Management na zona de Information Management do developerWorks. Encontre documentação técnica, artigos de instruções, treinamento, downloads, informações de produtos, e muito mais.
- Fique atualizado com os eventos técnicos e webcasts do developerWorks.
- Siga o developerWorks no Twitter.
Obter produtos e tecnologias
- Crie seu próximo projeto de desenvolvimento com o software de avaliação da IBM, disponível para download diretamente do developerWorks.
-
Avalie os produtos IBM da maneira mais adequada para você: faça o download de um produto de teste, teste um produto on-line, use um produto no ambiente da nuvem ou gaste algumas horas na SOA Sandbox aprendendo a implementar Arquitetura Orientada a Serviços de forma eficiente.
- Faça o download do DB2 Express-C 9.7.4, um produto inteiramente licenciado e disponível gratuitamente para a comunidade.
Discutir
- Participar do fórum de discussão.
- Visite o Grupo de DB2 no My developerWorks , um lugar para interagir e colaborar com outros usuários de DB2 (em todas as versões e plataformas).
- Consulte os blogs do developerWorks e participe da comunidade developerWorks.
Raul F. Chong é gerente de programa de DB2 senior e divulgador de tecnologia com base no IBM Toronto Laboratory. Sua principal responsabilidade é ampliar a comunidade de DB2 ao redor do mundo. Raul tem a certificação de DB2 Certified Solutions Expert em administração e desenvolvimento de aplicativos DB2. Ele ocupou vários cargos na IBM desde 1997 e é o autor principal do livro Understanding DB2 - Learning Visually with Examples 2nd Edition (ISBN-10:0131580183).