Tutorial TableSpace ;
Published: 2023-12-07 23:52:14


**INTRODUÇÃO:**
No Banco de Dados, o Tablespace é uma ferramenta fundamental, pois é utilizada para “abrir” um espaço na memória do banco, então a mesma possibilita um maior desempenho, segurança e fácil manutenção, além disso ajuda aos administradores a fazer alocações para que seja possível atender a todo tipo de requisitos.
Neste artigo, mostraremos 5 cenários para um maior conhecimento do Tablespace, colocando ele em prática, em cada um desses cenários será possível ver a utilidade do mesmo, além de entender as necessidades de se ter um tablespace.

**OBJETIVO**
Neste tutorial dedicado aos Tablespaces no Oracle, temos como objetivo oferecer uma experiência de aprendizado completa, pautada em critérios fundamentais para a assimilação eficaz de conhecimentos técnicos. Cada seção foi cuidadosamente elaborada considerando quatro pilares essenciais: Abrangência e Precisão Técnica, Clareza e Estrutura, Aplicação Prática e Exemplos Relevantes, além de Didática e Recursos Pedagógicos.

Vamos lá...

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/zyefs7ilk8suz5os942i.gif)

Vamos começar fazendo uma revisão do que é uma tablespace e sua sintaxe.

**O que é uma tablespace?**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/sfjytq8z9ki472u7cyfh.jpeg)
A tablespace no Oracle é uma unidade lógica de armazenamento que serve como uma área para armazenar dados do banco de dados. O Oracle organiza os dados logicamente em tablespaces, que, por sua vez, são compostos por um ou mais arquivos de dados (datafiles), cada arquivo de dados está ligado exclusivamente a uma tablespace.

Imagem representando estrutura logica:

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/y0zw71fpwd0o1p31mbd7.jpeg)
**Sintaxe basica:**

```
CREATE TABLESPACE nome_tablespace 
    DATAFILE 'caminho/arquivo.dbf' 
    SIZE tamanho_inicial 
    AUTOEXTEND ON NEXT tamanho_incremental 
    MAXSIZE tamanho_maximo;
```
Agora que já relembramos o que é uma tablespace e sua sintaxe vamos praticar com exemplos de aplicação em cenários diferentes.


**1° Cenário: Armazenamento de Dados Crítico;**
   - Objetivo: Armazenar dados críticos em uma tabela com alta prioridade.
   - Parâmetros:
     - TABLESPACE de alta performance (SSD).
     - Redefinição do parâmetro PCTFREE para 10% para otimizar espaço.
   - Explicação Técnica:
     - O uso de uma TABLESPACE em um disco SSD oferece alta velocidade de leitura/gravação, enquanto PCTFREE controla a quantidade de espaço livre para evitar fragmentação.
   - Benefício:
     - Acesso rápido e eficiente a dados críticos.

Criação da tablespace nesse cenário:
   

```
CREATE TABLESPACE high_performance_ts
   DATAFILE 'high_performance_file.dat' SIZE 1G
   AUTOEXTEND ON NEXT 100M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

   CREATE TABLE critical_data
   TABLESPACE high_performance_ts
   PCTFREE 10
   AS SELECT * FROM source_data WHERE condition;
```
 
Explicação: 

Este código SQL cria um espaço de tabelas chamado "high_performance_ts" com um arquivo de dados inicial ('high_performance_file.dat') de 1 gigabyte, configurado para se expandir automaticamente em incrementos de 100 megabytes conforme necessário. O gerenciamento de extensões é local e uniforme, com extensões de 1 megabyte. Em seguida, uma tabela chamada "critical_data" é criada dentro desse espaço de tabelas, reservando 10% de cada bloco para futuras atualizações (PCTFREE 10). A tabela é populada com dados selecionados da tabela "source_data" com base em uma condição específica.

**2° Cenário: Armazenamento de Arquivos Históricos;**
- Objetivo: Manter dados históricos acessíveis, mas com menor prioridade.
   - Parâmetros:
     - TABLESPACE em um disco de alta capacidade (HDD).
     - Uso de compressão para economizar espaço.
   - Explicação Técnica:
     - HDD para armazenar grandes quantidades de dados e a compressão para reduzir o espaço ocupado.
   - Benefício:
     - Eficiente para armazenar dados históricos em longo prazo.

Criação da tablespace nesse cenário:
  
```
CREATE TABLESPACE historical_data_ts
   DATAFILE 'historical_data_file.dat' SIZE 10G
   AUTOEXTEND ON NEXT 1G
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

   CREATE TABLE historical_archive
   TABLESPACE historical_data_ts
   COMPRESS FOR OLTP
   AS SELECT * FROM source_data WHERE date < '2023-01-01';
```

Explicação: 

Esse código SQL cria um espaço de tabelas chamado "historical_data_ts" com um arquivo de dados inicial ('historical_data_file.dat') de 10 gigabytes. O espaço de tabelas está configurado para aumentar automaticamente em incrementos de 1 gigabyte conforme necessário. O gerenciamento de extensões é local e uniforme, com extensões de 1 megabyte.
Em seguida, uma tabela chamada "historical_archive" é criada dentro desse espaço de tabelas. A tabela utiliza compressão otimizada para transações online (OLTP) com a opção COMPRESS FOR OLTP. Os dados na tabela são populados selecionando registros da tabela "source_data" com base em uma condição que verifica se a data é anterior a '2023-01-01'. Essa operação é destinada a arquivar dados históricos anteriores a uma determinada data.

**3° Cenário: Isolamento de Dados Sensíveis;**
   - Objetivo: Isolar dados sensíveis em uma área restrita.
   - Parâmetros:
     - Uso de TABLESPACE separada com criptografia habilitada.
   - Explicação Técnica:
     - A criptografia ajuda a proteger dados sensíveis, e a separação em uma TABLESPACE diferente impede o acesso não autorizado.
   - Benefício:
     - Fortalece a segurança dos dados sensíveis.

Criação da tablespace nesse cenário:

```
CREATE TABLESPACE secure_data_ts
   DATAFILE 'secure_data_file.dat' SIZE 5G
   AUTOEXTEND ON NEXT 500M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M
   ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT);

   CREATE TABLE sensitive_data
   TABLESPACE secure_data_ts
   AS SELECT * FROM source_data WHERE sensitive_condition;
```

Explicação: 

Esse código SQL cria um espaço de tabellas chamado "secure_data_ts" com um arquivo de dados inicial ('secure_data_file.dat') de 5 gigabytes. O espaço de tabelas é configurado para aumentar automaticamente em incrementos de 500 megabytes conforme necessário. O gerenciamento de extensões é local e uniforme, com extensões de 1 megabyte.
Além disso, é aplicada a criptografia aos dados no espaço de tabelas usando o algoritmo 'AES256'. A cláusula ENCRYPTION USING 'AES256' DEFAULT STORAGE(ENCRYPT) especifica que a tabela padrão é criptografada, garantindo segurança adicional aos dados armazenados no espaço de tabelas.
Posteriormente, uma tabela chamada "sensitive_data" é criada dentro desse espaço de tabelas. A tabela é populada selecionando registros da tabela "source_data" com base em uma condição sensível especificada por WHERE sensitive_condition. Essa configuração visa garantir a segurança dos dados sensíveis armazenados na tabela.

**4° Cenário: Desenvolvimento e Testes;**
   - Objetivo: Fornecer ambiente de desenvolvimento/testes eficiente.
   - Parâmetros:
     - TABLESPACE temporária para processamento rápido.
   - Explicação Técnica:
     - Uso de TABLESPACE temporária para otimizar operações de leitura/gravação durante o desenvolvimento e testes.
   - Benefício:
     - Acelera o ciclo de desenvolvimento.

Criação da tablespace nesse cenário:

```
CREATE TEMPORARY TABLESPACE temp_dev_test_ts
   TEMPFILE 'temp_dev_test_file.tmp' SIZE 2G
   AUTOEXTEND ON NEXT 200M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;

   -- Usar durante o desenvolvimento/testes
   ALTER SESSION SET TEMPORARY_TABLESPACE = temp_dev_test_ts;
```

Explicação:

Esse código SQL cria um espaço de tabelas temporário chamado "temp_dev_test_ts" com um arquivo temporário ('temp_dev_test_file.tmp') de 2 gigabytes. O espaço de tabelas temporário é configurado para aumentar automaticamente em incrementos de 200 megabytes conforme necessário. O gerenciamento de extensões é local e uniforme, com extensões de 1 megabyte.
A seguir, há um comentário indicando que esse espaço de tabelas temporário será usado durante o desenvolvimento ou testes.
Finalmente, é executada uma instrução ALTER SESSION para definir o espaço de tabelas temporário atual para "temp_dev_test_ts". Isso significa que durante a sessão atual, as operações que envolvem tabelas temporárias usarão o espaço de tabelas temporário recém-criado. Isso é útil para isolar temporariamente o armazenamento de dados temporários durante o desenvolvimento ou testes.

**5° Cenário: Recuperação de Desastres;**
   - Objetivo: Facilitar a recuperação de dados em caso de falha.
   - Parâmetros:
     - TABLESPACE particionada para facilitar backup incremental.
   - Explicação Técnica:
     - Particionar TABLESPACE para permitir backups incrementais, reduzindo o tempo de recuperação em caso de falha.
   - Benefício:
     - Maior eficiência na recuperação de dados após desastres.

Criação da tablespace nesse cenário:

```
CREATE TABLESPACE partitioned_recovery_ts
   DATAFILE 'part1_recovery_file.dat' SIZE 2G
   AUTOEXTEND ON NEXT 200M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M,
   DATAFILE 'part2_recovery_file.dat' SIZE 2G
   AUTOEXTEND ON NEXT 200M
   EXTENT MANAGEMENT LOCAL UNIFORM SIZE 1M;
```

Explicação: 

Esse código SQL cria um espaço de tabelas chamado "partitioned_recovery_ts" com dois arquivos de dados iniciais. O primeiro arquivo, 'part1_recovery_file.dat', tem um tamanho inicial de 2 gigabytes e é configurado para aumentar automaticamente em incrementos de 200 megabytes conforme necessário. O gerenciamento de extensões é local e uniforme, com extensões de 1 megabyte.
O segundo arquivo, 'part2_recovery_file.dat', também tem um tamanho inicial de 2 gigabytes e é configurado da mesma maneira que o primeiro, com extensões uniformes de 1 megabyte.
Este código é utilizado para criar um espaço de tabelas particionado com dois arquivos de dados, potencialmente permitindo uma melhor organização e recuperação de dados, especialmente quando há necessidade de dividir os dados entre diferentes volumes ou discos físicos.

**Conclusão:**

![Image description](https://dev-to-uploads.s3.amazonaws.com/uploads/articles/3xmtrrel1jtc4o78lfib.gif)
Com este artigo, obtivemos um conhecimento um pouco maior sobre como utilizar um Tablespace, concluindo então que esta é uma ferramenta útil para os administradores de um banco de dados, isso porque o mesmo será utilizado para garantir uma maior segurança, um maior desempenho e simplificar a manutenção do banco de dados, usando-o para abrir espaço na memória dos dados.
Com os cenários apresentados aqui, pudemos perceber o quanto este recurso é versátil, mostrando que este pode apresentar soluções rápidas desde um problema no armazenamento crítico, até para recuperar dados após algum defeito, ajudando com o cotidiano de quem trabalha com banco de dados para dar maior aprimoramento ao seu trabalho.