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.
Mover tabelas é uma prática comum no gerenciamento de banco de dados e pode ser motivada por diversos fatores, incluindo:
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);
Ao mover uma tabela no Oracle, existem vários parâmetros que podem ser configurados para ajustar o comportamento da operação:
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';
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
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';
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;
Para evitar a necessidade de reconstruir índices, podemos usar o parâmetro UPDATE INDEXES.
ALTER TABLE emp_test MOVE TABLESPACE new_tablespace UPDATE INDEXES;
Para otimizar o tempo de execução, podemos mover a tabela em paralelo.
ALTER TABLE emp_test MOVE TABLESPACE new_tablespace PARALLEL 4;
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;
A compressão pode ajudar a economizar espaço de armazenamento.
ALTER TABLE emp_test MOVE TABLESPACE new_tablespace COMPRESS;
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;
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.
Algumas considerações importantes ao mover tabelas incluem:
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.