Neste post e vídeo aula vamos aprender o que são Tablespaces e Datafiles, para que servem e como é estruturado um banco de dados Oracle.
Esse conhecimento é essencial para criação de objetos no banco de dados como tabelas, índices e views, bem como na administração do banco de dados.
Além da parte teórica, teremos a prática, vamos criar Tablespaces, datafiles e tabelas no Oracle Database 18c.
Para poder praticar, os comandos apresentados neste tutorial é importante que você tenha o Oracle Database instalado e também o SQL Developer.
Caso você não tenha este recursos instalados, você pode conferir a instalação destes aplicativos em nossos posts e vídeo aulas abaixo:
Scripts : Criação de Tablespace, Datafile e tabela no Banco de dados Oracle
https://github.com/webmundi/criacao-tablespace-datafiles-oracle/blob/master/Tablespace.sql
Vídeo aula : Criação de Tablespace, Datafile e tabela Oracle Database
Estruturas Lógicas e Físicas do Banco de Dados Oracle
Estruturação de um banco de dados Oracle
O Oracle database possui estruturas lógicas e físicas como bancos de dados como Tablespaces e Arquivos de Dados também conhecidos como datafiles.
Na figura podemos entender melhor o relacionamento entre bancos de dados, tablespaces e datafiles
Cada banco de dados está dividido logicamente em um ou mais tablespaces.
Um ou mais datafiles são criados de forma explícita para cada tablespace a fim de armazenar fisicamente os dados de todos os segmentos (segment) em um tablespace.
Os Datafiles de um tablespace pode ser armazenados fisicamente em qualquer tecnologia de armazenamento suportada. (SAN,NFS,NAS,Sistema de Arquivos, ASM, etc…)
A seguir veremos as definições de algumas dessas estruturas de dados:
Como vimos o Oracle armazena dados logicamente em tablespaces e fisicamente em arquivos de dados (datafiles)
Datafiles
Os arquivos de dados (datafiles), que são estruturas físicas compatíveis com o sistema operacional no qual o Oracle é executado.
Tablespaces
Um banco de dados é dividido em unidades lógicas de armazenamento denominadas
tablespaces, que agrupam arquivos de dados ou estruturas lógicas relacionadas.
Por exemplo, os tablespaces geralmente agrupam todos os segmentos de uma aplicação para simplificar algumas operações administrativas.
Outras estruturas lógicas de uma TableSpace
Uma tablespace está dividida em estruturas lógicas como veremos a seguir:
Segmentos (Segment)
Um segmento abriga um subconjunto de objetos do banco de dados, como tabelas e índices e são armazenados nos tablespaces
Extensões (Extent)
Cada segmento contém uma ou mais extensões.
Uma extensão consiste em blocos de dados contíguos, ou seja, cada extensão somente pode existir em um Datafile (arquivo de dados).
Bloco de dados (Datablock)
Os blocos de dados representam a menor unidade de entrada/saída no banco de
dados.
Um bloco de dados corresponde a um número específico de bytes de espaço físico no disco.
Um tamanho de bloco de dados é especificado para cada tablespace quando ele é criado. Um banco de dados usa e aloca o espaço livre em blocos de dados do Oracle.
Entendendo melhor a arquitetura Oracle
A melhor analogia para se explicar Oracle Database é a imagem de um arquivo físico de documentos
Imagine um banco de dados como um arquivo de documentos, onde:
- As gavetas dentro do arquivo são as tablespaces
- As pastas contidas nas gavetas são os arquivos de dados
- Os papéis em cada pasta são as tabelas
- A informação escrita no papel de cada pasta são os dados.
Finalidade de uma Tablespace
A finalidade de uma Tablespace é organizar o Banco de Dados.
Ou seja, podemos criar uma TABLESPACE para armazenar Tabelas, outra para armazenar índices e assim por diante.
Caso tenha disponível maiores recursos de hardware de armazenamento como HD SSDs, storages, etc…
Pode-se criar mais de uma TABLESPACE para tabelas, agrupando tabelas que recebem maior quantidade de acesso ou agrupar tabelas com maior volume de dados, desta forma, proporciona maior performance nas operações do Banco de dados
Descobrindo Tablespaces e Datafiles no Oracle Database
Depois de toda a parte teórica, finalmente chegamos a parte prática
Então vamos por a mão na massa.
Como vimos, as tabelas, índices e outros objetos do banco de dados são armazenados em uma tablespace, por isso, para criar objetos é necessário verificar a disponibilidade de espaço na tablespace existente.
A consulta a seguir mostrará as tablespaces existentes e o quanto espaço está livre para usar.
Lembrando que é preciso ter acesso as views ou ter acesso de sysdba para executar as queries a seguir:
SELECT df.tablespace_name "Tablespace", totalusedspace "Used MB", (df.totalspace - tu.totalusedspace) "Free MB", df.totalspace "Total MB", ROUND(100 * ( (df.totalspace - tu.totalusedspace)/ df.totalspace)) "% Free" FROM (SELECT tablespace_name, ROUND(SUM(bytes) / 1048576) TotalSpace FROM dba_data_files GROUP BY tablespace_name ) df, (SELECT ROUND(SUM(bytes)/(1024*1024)) totalusedspace, tablespace_name FROM dba_segments GROUP BY tablespace_name ) tu WHERE df.tablespace_name = tu.tablespace_name;
O tamanho total da TABLESPACE é a soma do tamanho dos DATAFILES a ela associados.
Já a próxima consulta mostra o datafile onde a tablespace está localizada:
SELECT FILE_NAME, BLOCKS, TABLESPACE_NAME FROM DBA_DATA_FILES;
Tablespaces padrões do Banco de dados Oracle
O Oracle vem com as seguintes Tablespaces de padrão:
SYSTEM, SYSAUX, USERS, UNDOTBS1, e TEMP
System
Tablespace de sistema, é onde o Oracle armazena todas informações referentes ao próprio gerenciamento do banco de dados. Esta Tablespace é parte obrigatória de um banco de dados. Como armazena o dicionário de dados é a tablespace mais crítica do Oracle Database.
Se por algum motivo ficar indisponível ou offline, a instância do banco de dados Oracle abortará.
SYSAUX
Tablespace que 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.
TEMP
A tablespace TEMP (tablespace temporária) é onde o Oracle armazena todas as suas tabelas temporárias.
Usada para armazenar resultados intermediários de operações de classificação, hash e processamento de objetos grandes.
USERS
Tablespace geralmente usada como padrão para os usuários. Todo segmento/objeto criado no Banco de Dados sem que seja especificada uma TABLESPACE, será criado na USERS.
UNDO
A Tablespace UNDOTBS1 contém os dados de desfazer operações e transações.
Todos os bancos de dados Oracle precisam de um local para armazenar informações de desfazer.
Com esta Tablespace o Oracle Databse possui a capacidade de recuperar transações incompletas ou abortadas.
Não é recomendável criar dados ou misturar informações de usuário ou aplicação nestas Tablespaces (exceção da Tablespace USERS)
É uma boa prática criar tablespaces para seus aplicativos ou finalidade, como por exemplo: ERP, CRM, RH, VENDAS, AGENDA, etc…
Criando Tablespace e Datafile para Aplicação / Usuário
A criação de uma TABLESPACE e Datafile pode ser feita via Enterprise Manager, mas normalmente é feita via script. Como faremos a seguir:
-- Criando Tablespace e Datafile para Aplicação / Usuário -- Primeira Tablespace e Datafile CREATE TABLESPACE TBS_WEBMUNDI DATAFILE 'TBS_WEBMUNDI_DATA.dbf' SIZE 1M ONLINE; -- Segunda Tablespace e Datafile CREATE TABLESPACE TBS_WEBMUNDI2 DATAFILE 'TBS_WEBMUNDI_DATA2.dbf' SIZE 1M ONLINE;
Sintaxe do comando CREATE TABLESPACE
CREATE
[ SMALLFILE | BIGFILE ]
TABLESPACE tablespace_name
{ DATAFILE { [ ‘filename’ | ‘ASM_filename’ ]
[ SIZE integer [ K | M | G | T | P | E ] ]
[ REUSE ]
[ AUTOEXTEND
{ OFF
| ON [ NEXT integer [ K | M | G | T | P | E ] ]
[ MAXSIZE { UNLIMITED | integer [ K | M | G | T | P | E ] } ]
}
]
| [ ‘filename | ASM_filename’
| (‘filename | ASM_filename’
[, ‘filename | ASM_filename’ ] )
]
[ SIZE integer [ K | M | G | T | P | E ] ]
[ REUSE ]
}
{ MINIMUM EXTENT integer [ K | M | G | T | P | E ]
| BLOCKSIZE integer [ K ]
| { LOGGING | NOLOGGING }
| FORCE LOGGING
| DEFAULT [ { COMPRESS | NOCOMPRESS } ]
storage_clause
| { ONLINE | OFFLINE }
| EXTENT MANAGEMENT
{ LOCAL
[ AUTOALLOCATE
| UNIFORM
[ SIZE integer [ K | M | G | T | P | E ] ]
]
| DICTIONARY
}
| SEGMENT SPACE MANAGEMENT { AUTO | MANUAL }
| FLASHBACK { ON | OFF }
[ MINIMUM EXTENT integer [ K | M | G | T | P | E ]
| BLOCKSIZE integer [ K ]
| { LOGGING | NOLOGGING }
| FORCE LOGGING
| DEFAULT [ { COMPRESS | NOCOMPRESS } ]
storage_clause
| { ONLINE | OFFLINE }
| EXTENT MANAGEMENT
{ LOCAL
[ AUTOALLOCATE | UNIFORM [ SIZE integer [ K | M | G | T | P | E ] ] ]
| DICTIONARY
}
| SEGMENT SPACE MANAGEMENT { AUTO | MANUAL }
| FLASHBACK { ON | OFF }
]
}
Mais informações em:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_7003.htm
Criação de tabela em uma Tablespace
Agora vamos criar uma tabela chamada TB_CLIENTE na tablespace TBS_WEBMUNDI
-- Criação de tabela TB_CLIENTE na Tablespace TBS_WEBMUNDI CREATE TABLE TB_CLIENTE ( CODIGO NUMBER(8), NOME VARCHAR2(50) )TABLESPACE TBS_WEBMUNDI ; -- Exibindo dados da tabela Criada desc TB_CLIENTE;
Listando tabelas contidas nas Tablespaces
SELECT TABLESPACE_NAME, TABLE_NAME FROM DBA_TABLES ORDER BY TABLESPACE_NAME;
Listando tabelas em um determinada Tablespace
-- Listando tabelas contidas na Tablespace TBS_WEBMUNDI SELECT TABLESPACE_NAME, TABLE_NAME FROM DBA_TABLES WHERE TABLESPACE_NAME= 'TBS_WEBMUNDI';
Descobrindo em que Tablespace esta uma determinada tabela
Caso haja a necessidade de consultar em qual TABLESPACE uma determinada tabela está, utilizamos o script:
-- Descobrindo em que Tablespace esta uma determinada tabela SELECT TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES WHERE TABLE_NAME = 'TB_CLIENTE';
Movimentando uma tabela de uma Tablespace para outra
Agora utilizando o exemplo anterior, vamos movimentar a tabela TB_CLIENTE para a Tablespace TBS_WEBMUNDI2
-- Movimentando uma tabela de uma Tablespace para outra ALTER TABLE TB_CLIENTE MOVE TABLESPACE TBS_WEBMUNDI2; -- Checando a mudança de Tablespace SELECT TABLE_NAME, TABLESPACE_NAME FROM DBA_TABLES WHERE TABLE_NAME = 'TB_CLIENTE';
Renomeando uma Tablespace
-- Renomeando uma Tablespace ALTER TABLESPACE TBS_WEBMUNDI2 RENAME TO TBS_WEBMUNDI_PRINCIPAL;
Apagando uma Tablespace
Para apagar uma Tablespace, seu conteúdo e o Datafile utilizamos a query a seguir:
-- Apagando as Tablespaces Criadas DROP TABLESPACE TBS_WEBMUNDI INCLUDING CONTENTS AND DATAFILES; DROP TABLESPACE TBS_WEBMUNDI_PRINCIPAL INCLUDING CONTENTS AND DATAFILES;
Materiais e leituras que recomendamos para você:
- Como Instalar o SQL Developer Oracle no Linux
- Monitorando operações de longa duração no Oracle
- Manipulação de datas no Oracle
- Como listar as maiores tabelas ou objetos Oracle
Obrigado
Espero que este tutorial possa lhe ajudar a gerenciar permissões de usuários no Oracle Database e por consequência apoiá-lo em seu trabalho ou estudo deste banco de dados.
Se você gostou desta publicação, compartilhe com seus amigos ou nos acompanhe pelas redes sociais.
Você pode nos ajudar a criar mais conteúdos como este. Como ?
Prestigie nossos anunciantes conhecendo seus produtos e serviços.
É simples e rápido e você certamente ajuda a gente a crescer.
Obrigado e um grande abraço
Renato Sanches
Cadastre-se em nossa Newsletter de Tecnologia
Referências:
https://docs.oracle.com/cd/B19306_01/server.102/b14200/statements_9004.htm
https://docs.oracle.com/cd/B19306_01/server.102/b14220/physical.htm