Neste artigo abordaremos as características do banco de dados Oracle
para suporte a grandes bancos de dados, conhecidos também como VLDB (Very Large Data Bases). O banco de dados Oracle
atende essas características, abaixo veremos serão as principais:
- Tablespaces com “datafiles” grandes (bigfiles)
- Grupos de “tablespaces” temporárias
- Desuso de índices com status de “UNUSABLE” – (Skip Unusable Indexes)
- Indices Globais particionados em “HASH”
Tablespaces com “datafiles” grandes (bigfiles)
Tablespaces
“bigfiles” são tablespaces que possuem um “datafile” único com tamanho bem
grande. Existem também as tablespaces “smallfiles” que podem ter vários
arquivos de dados, mas cada um tem um tamanho limitado. Os benefícios de
tablespaces “bigfiles” são:
- O banco de dados tem um máximo de 64.000 “datafiles” o que limita sua capacidade total. Utilizar tablespaces “bigfiles” permite as tablespaces ter um único arquivo de dados grande o que aumenta a capacidade total do banco de dados. Uma tablespace “bigfile” com blocos de 8 K e 32 K pode conter de 32 terabytes até 128 terabytes num único “datafile”, respectivamente.
- Usando “datafiles” maiores é possivel reduzir os parâmetros DB_FILES e MAXDATAFILES permitindo racionalizar os recursos da SGA e dos “controlfiles”.
- A sintaxe do comando “ALTER TABLESPACE” permite operações em nível de tablespace, em vez de nível de “datafiles”, item suportado a partir da versão 10g.
Abaixo seguem alguns
exemplos:
-- Comando Válido.
CREATE BIGFILE
TABLESPACE mybigtbs
DATAFILE '/u01/oracle/MYSID/mybigtbs01.dbf'
SIZE 100G;
-- Comando Válido.
CREATE BIGFILE
TABLESPACE mybigtbs
DATAFILE '/u01/oracle/MYSID/mybigtbs01.dbf'
SIZE 100G
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
--
Comando Inválido.
CREATE BIGFILE
TABLESPACE mybigtbs
DATAFILE '/u01/oracle/MYSID/mybigtbs01.dbf'
SIZE 100G
EXTENT MANAGEMENT DICTIONARY
SEGMENT SPACE MANAGEMENT MANUAL;
O tamanho dos “datafiles”
podem ser especificados em kilobytes (K), megabytes (M), gigabytes (G) ou
terabytes (T).
Uma tablespace “smallfile”
é um tipo de tablespace “default” durante a criação do banco de dados. Depois
que o banco de dados é criado o comando ALTER DATABASE pode ser usado dinamicamente
para alterar esta opção, abaixo um exemplo:
CREATE DATABASE mydb
USER SYS IDENTIFIED BY password
USER SYSTEM IDENTIFIED BY password
SET DEFAULT BIGFILE TABLESPACE
UNDO TABLESPACE undotbs
DEFAULT TEMPORARY TABLESPACE temp;
ALTER DATABASE SET DEFAULT
BIGFILE TABLESPACE;
ALTER DATABASE SET DEFAULT
SMALLFILE TABLESPACE;
Quando uma tablespace
“default” é definida como “bigfile” não é mais necessário na instrução CREATE TABLESPACE
especificar a cláusula BIGFILE durante a criação de uma tablespace, mas para a
criação de uma tablespace “smallfile” irá requerer a palavra-chave SMALLFILE. A
situação ficará invertida da usual (opção “default” do banco de dados).
O comando ALTER TABLESPACE pode ser usado
para modificar o tamanho e a extensão automatica de uma tablespaces “bigfile”,
conforme exemplo abaixo.
ALTER TABLESPACE
mybigtbs RESIZE 100G;
ALTER TABLESPACE
mybigtbs AUTOEXTEND ON NEXT 10G;
Para visualizar o tipo
da tablespace na coluna BIGFILE com o valor (YES/ NO) (sim ou não) nas visões DBA_TABLESPACES,
USER_TABLESPACES e na V$TABLESPACE.
Alguns
fatores adicionais a serem considerados antes de usar uma tablespace “bigfile”
são:
- Tablespace “bigfile” devem ser distribuídas para que as operações
paralelas não sejam prejudicadas. O banco de dados Oracle é performático
com tablespaces “bigfile” utilizando o Automatic Storage Management (ASM)
ou outros gerenciadores de volumes lógicos que suportam striping ou RAID.
- Tablespace “bigfiles” não devem ser usados em
plataformas com restrições de tamanho de arquivo.
Grupos de Tablespace Temporárias
Grupos de tablespace temporárias permitem
que os usuários usem mais do que uma tablespace temporária para armazenamentos
temporários. O grupo de tablespaces temporárias
é criado im-plicittamente quando a primeira tablespace temporária é
atribuída ao grupo.
-- Criando um grupo de
tablespace para tablespaces temporárias existentes (agrupando tablespaces
temporárias).
ALTER TABLESPACE temp
TABLESPACE GROUP temp_ts_group;
-- Adicionando uma nova
tablespace temporária a um grupo pré-definido.
CREATE TEMPORARY TABLESPACE
temp2
TEMPFILE
'/u01/app/oracle/oradata/DB10G/temp201.dbf' SIZE 20M
TABLESPACE
GROUP temp_ts_group;
As tablespaces temporárias atribuídas a um grupo podem
ser visualizadas através da visão DBA_TABLESPACE_GROUPS.
SELECT * FROM dba_tablespace_groups;
GROUP_NAME
TABLESPACE_NAME
------------------------------ ------------------------------
TEMP_TS_GROUP
TEMP
TEMP_TS_GROUP
TEMP2
2 rows selected.
Uma vez que o grupo é criado ele pode ser atribuído
apenas com uma tablespace um usuário ou como uma tablespace temporária.
-- Atribuindo um grupo
como o tablespace temporário para um usuário.
ALTER USER scott
TEMPORARY TABLESPACE temp_ts_group;
-- Atribua grupo como o
tablespace temporária (default).
ALTER DATABASE DEFAULT
TEMPORARY TABLESPACE temp_ts_group;
Uma
tablespace pode ser removida de um grupo, usando o comando abaixo.
ALTER TABLESPACE temp2 TABLESPACE GROUP '';
SELECT * FROM dba_tablespace_groups;
GROUP_NAME TABLESPACE_NAME
------------------------------ ------------------------------
TEMP_TS_GROUP
TEMP
1 row selected.
Não
há limite máximo teórico para o número de tablespace num grupo de tablespaces
temporárias, mas deve conter pelo menos uma tablespace. O grupo implicitamente
é descartado quando o último membro é removido. O último membro de um grupo não
pode ser removido se o grupo ainda é atribuído como o tablespace temporária
(default). Este exemplo deve ser feito para remover o último membro do grupo.
ALTER DATABASE DEFAULT
TEMPORARY TABLESPACE temp;
-- Remover a tablespace de
um grupo.
ALTER TABLESPACE temp
TABLESPACE GROUP '';
-- Verificar se o grupo
de uma tablespace temporária foi desfeito.
SELECT * FROM
dba_tablespace_groups;
no rows selected.
Desuso de índices com status de “UNUSABLE”
A
partir da versão 10g do Oracle pode-se definir o parâmetro
SKIP_UNUSABLE_INDEXES como TRUE para que o Oracle não utilize indices
desatualizados pelas estatísticas do banco de dados (DBMS_STATS), esse
parâmetro também inibe mensagens de erro quando o índice está marcado como
“UNUSABLE”.
Para a ativação do parâmetro
SKIP_UNUSABLE_INDEXES pode-se utilizar os comandos ALTER SYSTEM e
ALTER SESSION como estão apresentados
abaixo.
ALTER SYSTEM SET
SKIP_UNUSABLE_INDEXES = TRUE;
ALTER SYSTEM SET
SKIP_UNUSABLE_INDEXES = FALSE;
ALTER SESSION SET
SKIP_UNUSABLE_INDEXES = TRUE;
ALTER SESSION SET
SKIP_UNUSABLE_INDEXES = FALSE;
Essa
configuração não pode funciona para índices de (PK) ou para indices que suportam
restrições únicas e são usados para ignorá-las levando a violação da restrição
(constraint violation).
Índices Globais Particionados em “Hash”
Índices globais podem ser particionados
utilizando a estrutura de “hash”, a sintaxe é apresentada abaixo.
CREATE TABLE mytable (
column_1
NUMBER(10),
column_2
VARCHAR2(10),
column_3
NUMBER(10),
column_4 VARCHAR2(50)
);
--Criação do índice MYINDEX
CREATE INDEX myindex ON
mytable (column_1, column_2, column_3)
GLOBAL PARTITION BY HASH (column_1, column_2)
(PARTITION myindex_part_1 TABLESPACE users,
PARTITION myindex_part_2 TABLESPACE users,
PARTITION myindex_part_3 TABLESPACE users,
PARTITION myindex_part_4 TABLESPACE
users);
A manutenção de índices “hash” globais
particionados podem ser executadas usando as instruções a seguir.
-- Adicionando uma nova
partição ao índice.
ALTER INDEX myindex ADD
PARTITION mytable_part_5;
-- Reduzindo o número de
partições para 1.
ALTER INDEX myindex
COALESCE PARTITION;
-- Reconstruindo uma
partição.
ALTER INDEX myindex
REBUILD PARTITION mytable_part_1 TABLESPACE users;
-- Renomeando uma
partição.
ALTER INDEX myindex
RENAME PARTITION mytable_part_1 TO mytable_part_a;
Rubens Oliveira
DBA Oracle Consultor
olivert.dba@consultant.com