Esse artigo faz parte da revista SQL Magazine edição 60. Clique aqui para ler todos os artigos desta edição

al">Oracle 11g New Features – Parte 2

O que há de novo na mais recente versão do BD Oracle

 

A cada nova versão (ler Nota DevMan 1), novas funcionalidades são disponibilizadas para utilização. Estas com certeza lhe trarão benefícios, sejam eles referentes a segurança, performance, facilidade no desenvolvimento das aplicações, etc. Mas é claro que é muito importante testar com muita seriedade antes de efetivamente implementar cada nova funcionalidade.

Portanto, migrar seu banco de dados para a versão mais recente não deve ser feito simplesmente para estar na última versão. Conheça as novas funcionalidades e avalie quais delas trarão benefícios ao seu banco de dados e procure implementá-las.

Adotando esta linha, trazemos mais algumas das novas funcionalidades que realmente poderão fazer com que seu banco de dados lhe traga melhores resultados.

 

Nota DevMan 1. Versão e download do Oracle Database 11g

A versão mais atual do Oracle é a 11.1.0.6.0, que está disponível para as seguintes plataformas:

. Microsoft Windows (32-bit) - 1.7GB;

http://download.oracle.com/otn/nt/oracle11g/win32_11gR1_database.zip

. Microsoft Windows (x64) - 1.7GB;

http://download.oracle.com/otn/nt/oracle11g/win64_11gR1_database.zip

. Linux x86 - 1.7GB;

http://download.oracle.com/otn/linux/oracle11g/linux_x86_11gR1_database.zip

. Linux x86-64 - 1.8GB;

http://download.oracle.com/otn/linux/oracle11g/linux.x64_11gR1_database.zip

. Solaris (SPARC) (64-bit) - 1.9GB;

http://download.oracle.com/otn/solaris/oracle11g/solaris.sparc64_11gR1_database.zip

. AIX (PPC64) - 2.3GB;

Disco 1: http://download.oracle.com/otn/aix/oracle11g/aix.ppc64_11gR1_database_disk1.zip

Disco 2: http://download.oracle.com/otn/aix/oracle11g/aix.ppc64_11gR1_database_disk2.zip

. HP-UX Itanium - 2.3GB;

Disco 1: http://download.oracle.com/otn/hp/oracle11g/hpia64_11gR1_database_1of2.zip

Disco 2: http://download.oracle.com/otn/hp/oracle11g/hpia64_11gR1_database_2of2.zip

. HP-UX PA-RISC (64-bit) - 2.3 GB.

Disco 1: http://download.oracle.com/otn/hp/oracle11g/hpux.parisc_11gR1_database_1of2.zip

 

Compressed tables (Tabelas Comprimidas)

O Oracle 11g traz a promessa de tabelas comprimidas sem retalhos para ambientes OLTP (Nota DevMan 2), o que significa dizer que transações DML (insert, update, delete) deverão funcionar perfeitamente com uma sobrecarga (overhead) muito pequena em tabelas comprimidas. E, pelo menos em teoria, irá proporcionar operações de leitura bem rápidas.

 

Nota DevMan 2. OLTP – OnLine Transaction Processing

Online transaction processing (processamento de transações em tempo real), ou simplesmente OLTP, refere-se a uma classe de sistemas que facilitam e gerenciam aplicações orientadas a transações, tipicamente para entrada e recuperação de dados.

OLTP também tem sido utilizado para se referir a sistemas que respondem imediatamente às requisições de usuários.

Um caixa eletrônico de um banco (ATM – Automatic Teller Machine em inglês) é um bom exemplo de uma aplicação comercial de processamento de transações.

Esta tecnologia é muito utilizada na maioria das indústrias, incluindo bancos, companhias aéreas, supermercados e fábricas em geral. Aplicações OLTP incluem bancos eletrônicos (os famosos Internet Banking), processamento de encomendas (os famosos Just in Time), sistema de ponto eletrônico para marcação de horários de trabalho de empregados, e-commerce e e-Trading.

 

Para comprimir uma tabela é necessário usar a cláusula COMPRESS no comando CREATE TABLE ou ALTER TABLE. Desta forma, é possível comprimir a tabela mesmo após ela tenha sido criada e até mesmo já contenha dados. Neste contexto, precisamos estar atentos para um detalhe, ao utilizar o comando ALTER TABLE, todos os dados inseridos na tabela anteriormente não serão comprimidos, somente as novas inserções farão uso do recurso. O mesmo acontece para o contrário, ou seja, caso utilize o comando ALTER TABLE ... NOCOMPRESS, todos os dados que já estão comprimidos continuarão desta forma e as novas inserções serão feitas sem compressão.

Um detalhe: ao utilizar a cláusula COMPRESS ou COMPRESS FOR DIRECT_LOAD OPERATIONS será habilitada a compressão apenas para operações de carga direta (direct path load). Para habilitar a compressão de tabela para toda e qualquer operação, basta usar a cláusula COMPRESS FOR ALL OPERATIONS.

Vejamos os testes de compressão na Listagem 1.

 

Listagem 1. Testes de utilização de tabela comprimida.

1.                 SQL> CREATE TABLE OBJ_NOCOMPRESS

2.                   2   AS

3.                   3   SELECT *

4.                   4     FROM DBA_OBJECTS

5.                   5     WHERE 1=2;

6.                  

7.                 Table created.

8.                  

9.                 Elapsed: 00:00:02.20

10.             SQL> CREATE TABLE OBJ_COMPRESS COMPRESS FOR ALL OPERATIONS

11.               2    AS

12.               3    SELECT *

13.               4      FROM OBJ

14.               5      WHERE 1=2;

15.              

16.             Table created.

17.              

18.             Elapsed: 00:00:00.18

19.             SQL> -- SEM COMPRESSÃO

20.             SQL> BEGIN

21.               2    FOR I IN 1..100 LOOP

22.               3      INSERT INTO OBJ_NOCOMPRESS

23.               4        SELECT * FROM DBA_OBJECTS;

24.               5    END LOOP;

25.               6    COMMIT;

26.               7  END;

27.               8  /

28.              

29.             PL/SQL procedure successfully completed.

30.              

31.             Elapsed: 00:01:32.56

32.              

33.             -- COMPRIMIDA – CARGA ATRAVÉS DE COMANDO INSERT

34.             SQL> BEGIN

35.               2    FOR I IN 1..100 LOOP

36.               3      INSERT INTO OBJ_COMPRESS

37.               4        SELECT * FROM DBA_OBJECTS;

38.               5    END LOOP;

39.               6    COMMIT;

40.               7  END;

41.               8  /

42.              

43.             PL/SQL procedure successfully completed.

44.              

45.             Elapsed: 00:04:29.38

46.              

47.             SQL> SELECT  SEGMENT_NAME, BYTES

48.               2    FROM DBA_SEGMENTS

49.               3    WHERE SEGMENT_NAME IN ('OBJ_COMPRESS','OBJ_NOCOMPRESS');

50.              

51.             SEGMENT_NAME          BYTES

52.             ---------------- ----------

53.             OBJ_NOCOMPRESS    828375040

54.             OBJ_COMPRESS      394264576

 

Primeiramente criamos uma tabela convencional, sem compressão (linhas 1 a 5) e logo após criamos uma tabela com a opção de compressão para qualquer operação (linhas 10 a 14).

Os testes efetivamente começam agora. Criamos um bloco PL/SQL (linhas 19 a 27) com um laço de 100 vezes inserindo na tabela sem compressão um SELECT que busca dados da tabela DBA_OBJECTS (uma das maiores do dicionário de dados, apenas para termos uma boa “massa de dados”). O segundo teste é feito exatamente como o primeiro, porém inserindo dados na tabela com compressão (linhas 33 a 41).

Finalmente, verificamos o tamanho de cada tabela consultando a tabela do dicionário de dados DBA_SEGMENTS (linhas 47 a 49). Como você pode ver, a compressão foi de mais de 50% para uma operação normal de insert (394264576 / 828375040 = 0,4759).

Vejamos agora, na Listagem 2, a diferença ao utilizarmos uma operação de carga direta (direct path). Perceba que habilitaremos a compressão somente para carga direta.

 

Listagem 2. Testes de utilização de tabela comprimida em carga direta (direct path).

1.                 SQL> create table obj1_compress compress

2.                   2  as

3.                   3  select *

...

Quer ler esse conteúdo completo? Tenha acesso completo