landpage-mrdba-2-copy-01PE

EFICIÊNCIA, SEGURANÇA E CONFIABILIDADE

Garanta a Integridade do Banco de Dados da sua Empresa com um, ESPECIALISTA DBA

Como Mover Tabelas no Oracle

Neste artigo, vamos explorar em detalhes como mover tabelas no Oracle, destacando os principais motivos, criando um ambiente de teste e executando o processo de move table. Este conteúdo é baseado no roteiro que usei para gravar o vídeo sobre o mesmo tema, que está disponível no link do vídeo. O roteiro completo pode ser acessado aqui.

Principais Motivos para Mover Tabelas

Mover tabelas é uma prática comum no gerenciamento de banco de dados e pode ser motivada por diversos fatores, incluindo:

  • Organização: Melhorar a organização do banco de dados, facilitando a manutenção e o gerenciamento.
  • Desempenho: Otimizar o desempenho das operações de banco de dados, redistribuindo as tabelas para evitar contenção de recursos.
  • Gerenciamento de Espaço: Gerenciar melhor o espaço em disco, especialmente em ambientes onde o armazenamento é um recurso crítico.

Criando o Ambiente de Teste

Para demonstrar como mover tabelas, primeiro precisamos criar um ambiente de teste. Vamos criar um tablespace e uma tabela de exemplo, além de popular a tabela com dados de teste.

				
					CREATE TABLESPACE new_tablespace DATAFILE 'new_tablespace.dbf' SIZE 500M;

CREATE TABLE emp_test (
    employee_id NUMBER(6),
    first_name VARCHAR2(20),
    last_name VARCHAR2(25) CONSTRAINT emp_last_name_nn NOT NULL,
    email VARCHAR2(25) CONSTRAINT emp_email_nn NOT NULL,
    phone_number VARCHAR2(20),
    hire_date DATE CONSTRAINT emp_hire_date_nn NOT NULL,
    job_id VARCHAR2(10) CONSTRAINT emp_job_nn NOT NULL,
    salary NUMBER(8,2),
    commission_pct NUMBER(2,2),
    manager_id NUMBER(6),
    department_id NUMBER(4)
);

BEGIN
    FOR i IN 1..900000 LOOP
        INSERT INTO emp_test (employee_id, first_name, last_name, email, phone_number, hire_date, job_id, salary, commission_pct, manager_id, department_id)
        VALUES (i, 'Name'||i, 'Surname'||i, 'email'||i||'@example.com', '1234567890', SYSDATE, 'IT_PROG', 5000 + dbms_random.value(0, 2000), dbms_random.value(0, 0.1), 100, 10);
    END LOOP;
    COMMIT;
END;
/
				
			

Após a criação da tabela, vamos adicionar alguns índices:

				
					CREATE INDEX emp_test_idx01 ON emp_test(last_name);
CREATE INDEX emp_test_idx02 ON emp_test(first_name);
CREATE INDEX emp_test_idx03 ON emp_test(employee_id);
CREATE INDEX emp_test_idx04 ON emp_test(email);
				
			

Explicação dos Parâmetros do MOVE TABLE

Ao mover uma tabela no Oracle, existem vários parâmetros que podem ser configurados para ajustar o comportamento da operação:

  • TABLESPACE: Especifica a nova tablespace para a qual a tabela será movida.
  • COMPRESS: Aplica compressão aos dados da tabela.
  • ONLINE: Permite que a tabela continue disponível para operações durante o move.
  • PARALLEL: Utiliza processamento paralelo para acelerar o move.
  • UPDATE INDEXES: Atualiza os índices associados à tabela automaticamente após o move.
  • NOLOGGING/LOGGING: Define se será gerado log mínimo ou completo durante a operação.

Verificação do Tamanho da Tabela

Antes de mover a tabela, é importante verificar o tamanho atual para planejar a operação de move.

				
					SELECT segment_name, bytes/1024/1024 AS size_MB, tablespace_name 
FROM user_segments 
WHERE segment_name = 'EMP_TEST';
				
			

Verificando o Plano da Query

Vamos verificar como a consulta está sendo executada para ter uma base de comparação antes e depois de mover a tabela.

				
					SET AUTOTRACE ON
SELECT * FROM emp_test WHERE last_name = 'Surname5000';
SET AUTOTRACE OFF
				
			

Execução do MOVE TABLE

Agora, vamos mover a tabela para a nova tablespace.

				
					ALTER TABLE emp_test MOVE;
				
			

Após mover a tabela, é essencial verificar o status dos índices, pois eles podem ficar inutilizáveis.

				
					col index_name format a20
col status format a10
SELECT index_name, status FROM user_indexes WHERE table_name = 'EMP_TEST';
				
			

Rebuild do Índice

				
					ALTER INDEX emp_test_idx01 REBUILD ONLINE;
ALTER INDEX emp_test_idx02 REBUILD ONLINE;
ALTER INDEX emp_test_idx03 REBUILD ONLINE;
ALTER INDEX emp_test_idx04 REBUILD ONLINE;
				
			

Mover Tabela com Atualização de Índice

Para evitar a necessidade de reconstruir índices, podemos usar o parâmetro UPDATE INDEXES.

				
					ALTER TABLE emp_test MOVE TABLESPACE new_tablespace UPDATE INDEXES;
				
			

Execução do MOVE TABLE com PARALLEL

Para otimizar o tempo de execução, podemos mover a tabela em paralelo.

				
					ALTER TABLE emp_test MOVE TABLESPACE new_tablespace PARALLEL 4;
				
			

Execução do MOVE TABLE Online

A partir do Oracle 12c (Enterprise Edition), é possível mover a tabela enquanto ela permanece disponível para operações.

				
					ALTER TABLE emp_test MOVE TABLESPACE new_tablespace ONLINE;
				
			

Execução do MOVE TABLE com Compressão

A compressão pode ajudar a economizar espaço de armazenamento.

				
					ALTER TABLE emp_test MOVE TABLESPACE new_tablespace COMPRESS;
				
			

Tudo em Um

Combinar todos os parâmetros pode proporcionar um move eficiente e otimizado.

				
					ALTER TABLE emp_test MOVE TABLESPACE new_tablespace COMPRESS FOR OLTP ONLINE PARALLEL 4 UPDATE INDEXES;
				
			

Cuidados ao Realizar o MOVE TABLE

Algumas considerações importantes ao mover tabelas incluem:

  • Monitorar a geração de arquivos de log e espaço em disco.
  • Evitar mover grandes tabelas fora de uma janela de manutenção.
  • Validar a operação em um ambiente de testes sempre que possível.
  • Estar ciente do impacto na performance, mesmo em operações online.

Este artigo fornece um guia completo sobre como mover tabelas no Oracle, destacando os principais parâmetros e cuidados a serem tomados. Para uma explicação mais detalhada e visual, confira o vídeo no YouTube.

Mr. DBA @ 2023 – Todos os direitos reservados