O Banco de dados Oracle é composto por uma ou mais unidades lógicas de armazenamento. Estas unidades lógicas são chamadas de TABLESPACES, basicamente são subdivisões do Banco de Dados, onde os segmentos (estruturas para armazenamente de dados) semelhantes são agrupados, facilitando o gerenciamento destes segmentos dentro do Banco de Dados. Pode-se dizer que as TABLESPACES são grupos lógicos de armazenamento.

Com o objetivo de organizar o Banco de Dados, criam-se TABLESPACES para os objetos do Banco de Dados (Segmentos se referem aos objetos do banco de dados), ou seja, cria-se uma TABLESPACE para armazenar Tabelas, outra para armazenar índices e assim por diante. Caso tenha disponível mais de um HD, pode-se criar mais de uma TABLESPACE para tabelas, agrupando tabelas que recebem maior frequencia de acesso ou agrupar aquelas com maior volume de dados, desta forma ganhando desempenho nas operações do Banco.

Os dados de cada segmento de uma TABLESPACE são armazenados fisicamente nos chamados DATAFILES que são arquivos com a extenssão “.dbf” associados as TABLESPACEs no momento de sua criação. Uma TABLESPACE pode conter um ou mais DATAFILES, por sua vez um DATAFILE pode pertencer a apenas uma TABLESPACE.

Um segmento pode ter dados armazenados em mais de um DATAFILE, então pode-se dizer que um segmento pode pertencer a mais de um DATAFILE simultaneamente.

A Figura 1 a seguir exemplifica a relação entre Bando de Dados, Tablespaces, DataFiles e Segmentos:

Estrutura de Armazenamento: Banco de Dados Oracle.

Figura 1: Estrutura de Armazenamento: Banco de Dados Oracle.

Na figura 1 pode-se observar um banco de dados composto por duas TABLESPACES, cada uma armazena dados de um Segmento em dois DATAFILES. Cada TABLESPACE é independente, mas as estruturas contidas em cada uma delas se assemelham em algum ponto. A Figura 2 mostra a relação das estruturas em uma aplicação real.

Exemplo da Relação das Estruturas de Armazenamento: Banco de Dados Oracle.

Figura 2: Exemplo da Relação das Estruturas de Armazenamento: Banco de Dados Oracle.

A Figura 2, mostrou um exemplo que contem uma TABLESPACE onde é esperado armazenar todas as Tabelas do banco de dados. Pode-se tambem como citado anteriormente criar grupos de tabelas semelhantes, tabelas que recebem maior frequencia de acesso ficam em uma determinada TABLESPACE e outras tabelas com a caracteristica de armazenar um volume grande de dados podem ser agrupadas (de forma lógica) em outra TABLESPACE.

A TABLESPACE SYSTEM, também apresentada na Figura 1, é padrão do Oracle e da maioria dos Banco de Dados, concebida automáticamente quando o banco de dados é criado. Tambem pode-se agrupar as tabelas que armazenam dados semelhantes, por exemplo, cria-se uma TABLESPACE PEDIDO onde são armazenadas as tabelas que se referem aos pedidos de uma loja. Uma outra chama CLIENTE que irá agrupar as tabelas que contem informações pertinentes aos clientes da loja.

Na criação de um Banco de Dados Oracle são criadas automaticamente as seguintes TABLESPACES:

  • SYSTEM - Principal TABLESPACE gerada automaticamente no momento da criação do Banco de Dados, onde é armazenado o dicionário de dados do Banco. Todas as informações sobre os objetos criados no banco de dados são gravadas nesta TABLESPACE.
  • SYSAUX - Somente está disponível a partir da versão 10g do Oracle. Funciona como auxiliar a SYSTEM, onde são armazenadas informações relacionadas ao funcionamento do Oracle que antes eram gravadas na SYSTEM.
  • USERS - TABLESPACE geralmente usada como padrão para os usuários. Todo segmento criado no Banco de Dados sem que seja especificada uma TABLESPACE, será criado na USERS.

As TABLESPACES alocam espaço em memória para os segmentos que estão associados a ela, garantindo assim que estes segmentos tenham espaço físico para armazenar dados. O tamanho a ser alocado é definido na criação da TABLESPACE e pode ser redefinido a qualquer momento. O tamanho total da TABLESPACE é a soma do tamanho dos DATAFILES a ela associados.

O Administrador de Banco de Dados (DBA) pode usar as TABLESPACES para melhorar o desempenho e a organização do Banco de Dados, por exemplo:

  • Controlar o espaço em disco usado pelo Banco de Dados;
  • Definir quotas de espaço para os usuários e segmentos do Banco de Dados;
  • Gerenciar como os dados serão organizados quando armazenados, visando melhorar o desempenho nas transações.

A criação de uma TABLESPACE se dá via script. A seguir script para a criação:

CREATE TABLESPACE 
TBS_NOME_TABLESPACE 
DATAFILE 'NOME_DATAFILE.dbf' SIZE 40M ONLINE;

Onde:

  • CREATE - Comando de definição de dados (DDL) para criação de objetos em SQL.
  • TABLESPACE - Indica o tipo de objeto a ser criado.
  • TBS_NOME_TABLESPACE - Nome que deseja atribuir a sua TABLESPACE, sugere-se usar o prefixo “TBS_”.
  • DATAFILE - Indica que será criado um DATAFILE junto com sua TABLESPACE (é necessário criar ao menos um DATAFILE).
  • NOME_DATAFILE.dbf - Nome escolhido para o DATAFILE, contido entre aspas simples seguido da estenção .dbf.
  • ONLINE - Torna a TABLESPACE disponível imediatamente após sua criação.
  • SIZE - Foi definido 40 Megas como tamanho inicial, é um tamanho estimado. A propriedade não declarada AUTOEXTEND permite um tamanho máximo ilimitado. O tamanho inicial é aumentado conforme houver necessidade, ou seja, assim que o arquivo atingir o tamanho inicialmente definido.

Para consultar todas as TABLESPACES criadas em um banco de dados utilize o seguinte script:

SELECT TABLESPACE_NAME FROM DBA_TABLESPACES;

Onde:

  • SELECT - Comando para manipulação de dados (DML) SQL para realizar consultas.
  • TABLESPACE_NAME - Coluna que se deseja obter o valor, no caso o nome da TABLESPACE.
  • DBA_TABLESPACES - Contem informações sobre as TABLESPACES presentes no banco de dados.

Observação: Este comando exibe apenas as TABLESPACES disponíveis para o usuário que realizar sua execução.

Script para a criação uma tabela em uma determinada TABLESPACE:

CREATE TABLE TB_NOME_TABELA
(
CODIGO NUMBER(38)
)TABLESPACE TBS_NOME_TABLESPACE;

Note que apenas acrescentamos ao comando de criação de tabela uma linha que contém a palavra reservada TABLESPACE mais o nome da TABLESPACE em que se deseja criar a tabela.

As consultas sobre informações das TABLESPACES podem ser feitas em três tabelas do Oracle, o acesso a cada uma delas vai depender dos privilégios do usuário logado. São elas:

  • DBA_TABLES - Contem as informações sobre todas as tabelas do banco de dados.
  • ALL_TABLES - Permite ao usuário que está realizando a consulta visualizar as tabelas em que este usuário tem permissão.
  • USER_TABLES - Contem as informações sobre as tabelas que pertencem ao usuário que está realizando a consulta.

As colunas presentes nas tabelas DBA_TABLES, ALL_TABLES e USER_TABLES são comuns umas as outras, podendo variar apenas para o proprietário.

Para consultar as TABLESPACES e as tabelas contidas em cada uma delas utiliza-se o script a seguir:

SELECT
TABLESPACE_NAME,
TABLE_NAME 
FROM 
DBA_TABLES 
ORDER BY
TABLESPACE_NAME; 

Observação: Na consulta anterior usou-se a tabela DBA_TABLES, porém poderia ter sido usada a tabela ALL_TABLES ou USER_TABLES. Lembrando que a necessidade de usar uma ou outra tabela também depende dos privilégios do usuário que está realizando a consulta.

O comando a seguir lista todas as tabelas contidas em uma determinada TABLESPACE:

SELECT 
TABLESPACE_NAME, 
TABLE_NAME 
FROM 
DBA_TABLES 
WHERE
TABLESPACE_NAME = 'TBS_NOME_TABLESPACE';

Caso haja a necessidade de consultar em qual TABLESPACE uma determinada tabela está, usa-se o seguinte script:

SELECT 
TABLE_NAME,
TABLESPACE_NAME
FROM 
DBA_TABLES 
WHERE
TABLE_NAME = 'TB_NOME_TABELA';

É possível alterar uma tabela criada em uma TABLESPACE para outra com o uso da clausula MOVE TABLESPACE, para realizar a alteração basta digitar o script a seguir:

ALTER TABLE 
TB_NOME_TABELA
MOVE TABLESPACE 
TBS_NOME_TABLESPACE_DESTINO;

Também é possível alterar o nome de uma TABLESPACE, isso pode ser feito com o uso da clausula RENAME TO conforme o seguinte exemplo:

ALTER TABLESPACE 
TBS_NOME_TABLESPACE 
RENAME TO TBS_NOVO_NOME_TABLESPACE;

Todas as referências a TABLESPACE alterada são atualizados no dicionário do Banco de Dados.

Assim pode-se concluir que as TABLESPACES ajudam o DBA a organizar de forma lógica os segmentos do Banco de Dados, desta forma melhorando também o desempenho das transações. Todos os dados são armazenados fisicamente nos DATAFILES, que podem compartilhar dados de mais de um segmento, porem cada DATAFILE pertence a apenas uma TABLESPACE.

Para aprofundar-se mais neste assunto consulte as referências utilizadas como base para o desenvolvimento do presente artigo.

Referências:

Concluo assim este artigo.

Abraços, Paulo Kaupa.