Criação de Tablespaces Permanentes, UNDO e Temporárias no ORACLE
Tablespace é um conjunto de Datafiles que contém a estrutura física de armazenamento de dados no Sistema Operacional.Sendo assim, a tablespace é uma alocação de espaço que serve para guardar os objetos de um determinado usuário. Para criar uma tablespace em um banco de dados, o usuário terá que ter o grant(permissão) de Create Tablespace e para criar a tablespace SYSAUX (ao lado da SYSTEM, são as mais importantes do banco de dados), deverá ter o grant de SYSDBA. A tablespace é uma unidade lógica do banco de dados e que faz parte da seguinte estrutura:
Banco de Dados > Tablespace (unidade lógica) > Datafile (arquivo físico) > Segments (unidade lógica, Exemplo: Tabelas)> Extents (conjunto de blocos, unidades lógicas ) > > Blocos do banco de Dados (unidade lógica, menor estrutura de um banco de dados) > Blocos do Sistema Operacional.
Neste artigo, será abordados os seguintes tipos de tablespaces: As tablespaces permanentes, a tablespace temporária e a tablespace de Undo. No entanto, também será elucidado a criação de tablespace com vários datafiles de uma só vez.
- Tablespaces Permanentes: Contém objetos de um usuário em um banco de dados. Estes objetos são armazenados em estruturas físicas chamados Datafiles.
SQL> create tablespace TBSEXEBRUNORS
logging
datafile ‘/dbbruno/datafiles/datafile1.dbf’
size 64m
autoextend on
next 64m maxsize 2048m
extent management local uniform size 1m; 2 3 4 5 6 7
Tablespace created.
Criando uma tablespace com vários Datafiles de uma única vez:
SQL> create tablespace TBSMISCBRUNORS
datafile ‘/dbbruno/datafiles/datafile2.dbf’ size 4M,
‘/dbbruno/datafiles/datafile3.dbf’ size 4M ,
‘/dbbruno/datafiles/datafile4.dbf’ size 4M,
logging
extent management local; 2 3 4 5 6
Tablespace created.
Segue uma consulta na view DBA_TABLESPACES:
SQL> SET PAGESIZE 180
SQL> SET LINESIZE 180
SQL> SELECT * FROM DBA_TABLESPACES WHERE TABLESPACE_NAME = ‘TBSEXEMPLO’ order by 1,2;
TABLESPACE_NAME BLOCK_SIZE INITIAL_EXTENT NEXT_EXTENT MIN_EXTENTS MAX_EXTENTS MAX_SIZE PCT_INCREASE MIN_EXTLEN STATUS CONTENTS LOGGING FOR EXTENT_MAN
—————————— ———- ————– ———– ———– ———– ———- ———— ———- ——— ——— ——— — ———-
ALLOCATIO PLU SEGMEN DEF_TAB_ RETENTION BIG PREDICA ENC COMPRESS_FOR
——— — —— ——– ———– — ——- — ————
TBSEXEMPLO 8192 65536 1 2147483645 2147483645 65536 ONLINE PERMANENT LOGGING NO LOCAL
SYSTEM NO AUTO DISABLED NOT APPLY NO HOST NO
- Clásula para gerenciamento dos EXTENTS
A cláusula AUTOALLOCATE, especifica que a tablespace será gerenciada pelo ORACLE, e que usuários não poderão especificar tamanhos. Além disso, essa cláusula não é permitida para tablespaces Temporárias ou de UNDO. No entanto, a cláusula UNIFORM, especifica que a tablespace é gerenciada por um usuário (que poderá especificar tamanhos) através de tamanhos de bytes, sendo o padrão 1M (megabyte) para utilizar esta cláusula. Já a clásula LOCAL especifica que a tablespace será gerenciada localmente e alguma parte da tablespace é reservado para Bitmap, sendo esta a opção PADRÃO para o tipo de tablespace Permanentes. Todavia, a clásula DICTIONARY, especifica que você deseja que a tablespace seja gerenciada utilizando o dicionário de dados.
- Clásula para gerenciamento dos SEGMENTS
A cláusula AUTO especifica que você deseja que o ORACLE controle o espaço livre de segmentos na tablespace utilizando BITMAPS. Quando se faz o uso dessa opção, o ORACLE ignora qualquer especificação de armazenamento posteriores nesta tablespace. A ORACLE recomenda veemente o uso dessa opção. Todavia, está opção só deve ser utilizada em tablespaces permanentes e nunca em uma tablespace SYSTEM. No entanto, a cláusula MANUAL, opção não recomendada pela ORACLE, especifica que você deseja que o ORACLE controle o espaço livre de segmentos na tablespace utilizando freelists (PCTUSED, FREELIST, FREELIST GROUPS).
- Tablespaces Temporárias: Contém dados temporários de uma determinada sessão por um determinado período de tempo. Além disso, este tipo de tablespace possuem Tempfiles e, não, Datafiles. Esta tablespace é utilizada quando um usuário, ao qual a tablespace temporária foi atribuída, inicia operações. Sendo assim, a tablespace temporária, armazena os dados temporários utilizados em transações de usuários.
SQL> create temporary tablespace TEMPEXEBRUNORS
tempfile ‘/dbbruno/datafiles/tempfile1.dbf’
size 128m
autoextend on
next 32m maxsize 2048m
extent management local; 2 3 4 5 6
Tablespace created.
- Tablespaces de UNDO ou Tablespaces de Desfazer: Tablespace utilizada para operações de refeitas, tanto que objetos não podem ser criados nesta tablespace. Quando esta tablespace não for criada, o ORACLE assume a tablespace SYSTEM para que possa fazer essa operações. No entanto, o padrão é sempre criar uma tablespace de UNDO durante a criação do banco de dados, para que o mesmo esteja no modo de gerenciamento automático de undo.
SQL> create undo tablespace TBSUNDOBRUNORS
datafile ‘/dbbruno/datafiles/tbs_datafileundobrunors_1.dbf”
size 200M; 2 3
Tablespace created.
Segue uma consulta na view DBA_TABLESPACES:
SQL> SET PAGESIZE 180
SET LINESIZE 180
SELECT TABLESPACE_NAME , STATUS, RETENTION, SEGMENT_SPACE_MANAGEMENT, EXTENT_MANAGEMENT, INITIAL_EXTENT FROM DBA_TABLESPACES WHERE TABLESPACE_NAME =’ TBSUNDOBRUNORS’ order by 1,2; SQL> SQL>
TABLESPACE_NAME STATUS RETENTION SEGMEN EXTENT_MAN INITIAL_EXTENT
—————————— ——— ———– —— ———- ————–
TBSUNDOBRUNORS ONLINE NOGUARANTEE MANUAL LOCAL 65536
- Clásula para retenção de segmentos
A cláusula RETENTION GUARANTEE especifica que o ORACLE deverá armazenar dados undo expirados, mesmo que operações em curso retornam falha devido a falta de espaço. Esta opção poderá ser útil em operações de FLASHBACK (onde se faz uma “volta ao passado” para obter , por exemplo, o valor de uma tabela que foi deletado e há a necessidade de saber o valor da mesma em um determinado período). No entanto, a cláusula RETENTION NOGUARANTEE (como no exemplo acima) especifica que o ORACLE poderá substituir os dados undo expirados, por novos dados undo que estão em processamento devido à operações corrente no ambiente, sendo esta, a cláusula padrão.
Espero ter ajudado, abraços!!!