USO DE TABLESPACE NAS TABELAS E ÍNDICES
Esta postagem tem por objetivo orientar todos os interessados, sobre a utilização de TABLESPACE na criação de tabelas e índices de tabelas Oracle.
TABLESPACE
Um banco de dados Oracle consistem em uma ou mais unidades de armazenamento lógicas denominadas de TABLESPACES, que armazena coletivamente todos os dados do banco de dados.
Cada TABLESPACE contém um ou mais arquivos denominados arquivos de dados (datafiles) que são estruturas físicas compatíveis com o sistema operacional no qual o Oracle é executado.
Como utilizá-la em tabelas e índices?
Fazendo uma rápida analogia imagine o seu banco de dados como um armário de escritório, cada gaveta do armário guarda as pastas de um determinado interesse/assunto.
No nosso banco de dados não é diferente disso. Imagine a criação de uma tabela do schema FISCAL, mas você não especifica a TABLESPACE.
Exemplo:
CREATE TABLE FISCAL.TABLE1
(
ID INTEGER
);
Como a tabela foi criada sem especificar a TABLESPACE a mesma foi alocada na TABLESPACE nativa do schema FISCAL conforme a regra:
Se um usuário do banco de dados veio a criar uma tabela ou índice, como foi o exemplo acima, e não for especificada a TABLESPACE na qual a tabela/índice ficará gravada fisicamente, a mesma vai ser criada na TABLESPACE nativa do usuário em que está criado a tabela/índice.
Qual o impacto disso?
O mais simples dos impactos pode ocorrer é se o schema FISCAL foi criado na TABLESPACE User e o cliente desejar excluir as TABLESPACE do schema FISCAL chamada TSD_FISCAL e TSI_FISCAL de sua base, a(s) tabela(s)/índice(s) que foram criadas sem especificar a TABLESPACE ficaram como lixo na base de dados na TABLESPACE User .
Outro impacto é se a TABLESPACE precisar ficar OFFLINE para manutenção, o DBA não vai ter esta flexibilidade de tornar offline apenas o que necessita a devida demanda.
Uma dica que eu uso como “Padrão” é:
- Tablespace de criação de usuário e tabelas que pertence a ele: TSD_<nome_schema>;
- Tablespace de criação de índices para as tabelas de um determinado schema: TSI_<nome_schema> ;
Por regra eu particularmente crio duas Tablespace para cada novo Schema: TSD e TSI, dependendo claro se o Schema vai necessitar ter criação de tabelas.
Isso ajuda muito, no tocante, a flexibilidade de manutenção, extração para backup, excluir apenas um modulo de um sistema caso ele esteja em apenas uma/duas Tablespaces específicas e ajuda também a manter estruturado e mapeado todos os dados de uma organização.Exemplos de sintaxe:
Errado :
CREATE TABLE FISCAL.TABLE1
(
ID INTEGER
);
CREATE UNIQUE INDEX FISCAL.UK_ID ON FISCAL.TABLE1(ID);
Correto:
CREATE TABLE FISCAL.TABLE1
(
ID INTEGER
)TABLESPACE TSD_FISCAL;
CREATE UNIQUE INDEX FISCAL.UK_ID ON FISCAL.TABLE1(ID)TABLESPACE TSI_FISCAL;
Obrigado!