Oracle Move Tablespace – Movimentando Objetos Entre Tablespaces

Oracle Move Tablespace – Movimentando Objetos Entre Tablespaces

Neste ambiente, o nosso sistema de monitoramento alertou falta de espaço em disco.

Incidente Identificado


Ao analisarmos o problema, encontramos vários datafiles de tamanhos diversos para a tablespace do sistema Winthor.
Os objetos estavam distribuidos em diversos datafiles, impossibilitando o RESIZE dos datafiles.
Para reduzir a quantidade de espaço sendo utilizado pela tablespace, optei por utilizar o MOVE TABLESPACE, movendo os objetos de uma tablespace para outra.
A Tablespace possui Tabelas, Índices, Materialized Views e Lobs.

Como o Banco de Dados é Standard Edition, não é possivel realizar o MOVE de forma online. Fique atento, pois o processo causa indisponibilidade nos objetos!


Preparando o Ambiente de Testes

SQL> CREATE TABLESPACE OLD_TABLESPACE DATAFILE '/u02/oradata/WINT/OLD_TABLESPACE01.DBF' SIZE 100M;
SQL> CREATE TABLESPACE NEW_TABLESPACE DATAFILE '/u02/oradata/WINT/NEW_TABLESPACE01.DBF' SIZE 100M;

SQL> ALTER USER KELWIN QUOTA UNLIMITED ON OLD_TABLESPACE;
SQL> ALTER USER KELWIN QUOTA UNLIMITED ON NEW_TABLESPACE;

SQL> CREATE TABLE TESTE TABLESPACE OLD_TABLESPACE AS SELECT * FROM ALL_OBJECTS;

SQL> CREATE INDEX KELWIN.TESTE_IDX ON KELWIN.TESTE (OBJECT_NAME) TABLESPACE OLD_TABLESPACE;

SQL> CREATE MATERIALIZED VIEW KELWIN.MVIEW_TESTE TABLESPACE OLD_TABLESPACE BUILD IMMEDIATE REFRESH COMPLETE ON DEMAND AS SELECT * FROM KELWIN.TESTE;

SQL> CREATE TABLE TESTE_LOB (CODIGO NUMBER(10),NOME CLOB) TABLESPACE OLD_TABLESPACE LOB ("NOME") STORE AS BASICFILE (TABLESPACE "OLD_TABLESPACE");

SQL> SELECT OWNER, OBJECT_NAME, OBJECT_TYPE, TABLESPACE_NAME FROM DBA_OBJECTS WHERE OWNER = 'KELWIN';

OWNER         OBJECT_NAME                     OBJECT_TYPE
------------ ------------------------------ -----------------------
KELWIN       TESTE_IDX                      INDEX
KELWIN       TESTE                          TABLE
KELWIN       MVIEW_TESTE                    TABLE
KELWIN       MVIEW_TESTE                    MATERIALIZED VIEW
KELWIN       TESTE_LOB                      TABLE
KELWIN       SYS_LOB0000064475C00002$$      LOB

Movendo Tabelas (MOVE TABLESPACE)

SQL> SELECT 'ALTER TABLE '||OWNER||'.'||SEGMENT_NAME||' MOVE TABLESPACE NEW_TABLESPACE;' AS COMANDO FROM DBA_SEGMENTS WHERE TABLESPACE_NAME LIKE 'OLD_TABLESPACE' AND SEGMENT_TYPE = 'TABLE';

COMANDO
-----------------------------------------------------------------------------------------
ALTER TABLE KELWIN.TESTE MOVE TABLESPACE NEW_TABLESPACE;
ALTER TABLE KELWIN.TESTE_LOB MOVE TABLESPACE NEW_TABLESPACE;

SQL> ALTER TABLE KELWIN.TESTE MOVE TABLESPACE NEW_TABLESPACE;

Tabela alterada.

SQL> ALTER TABLE KELWIN.TESTE_LOB MOVE TABLESPACE NEW_TABLESPACE;

Tabela alterada.

Quando realizamos o MOVE da tabela, os índices ficam com status UNUSABLE. Vamos fazer o REBUILD dos índices já movendo para nova tablespace.

SQL> SELECT INDEX_NAME, STATUS FROM DBA_INDEXES WHERE OWNER = 'KELWIN' AND STATUS <> 'VALID';

INDEX_NAME           STATUS
-------------------- --------
TESTE_IDX            UNUSABLE

SQL> SELECT 'ALTER INDEX '||OWNER||'.'||INDEX_NAME||' REBUILD TABLESPACE NEW_TABLESPACE;' AS COMANDO FROM DBA_INDEXES WHERE STATUS IN ('UNUSABLE','INVALID') AND TABLESPACE_NAME LIKE 'OLD_TABLESPACE';

SQL> ALTER INDEX KELWIN.TESTE_IDX REBUILD TABLESPACE NEW_TABLESPACE;

Índice alterado.

Movendo Materialized Views

SQL> SELECT 'ALTER MATERIALIZED VIEW '||OBJECT_NAME||' MOVE TABLESPACE NEW_TABLESPACE;' AS COMANDO FROM DBA_OBJECTS WHERE OWNER = 'KELWIN' AND OBJECT_TYPE = 'MATERIALIZED VIEW';

COMANDO
----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
ALTER MATERIALIZED VIEW MVIEW_TESTE MOVE TABLESPACE NEW_TABLESPACE;

SQL> ALTER MATERIALIZED VIEW MVIEW_TESTE MOVE TABLESPACE NEW_TABLESPACE;

View materializada alterada.

Movendo Lobs

SQL> SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME FROM DBA_SEGMENTS WHERE OWNER = 'KELWIN';

OWNER                          SEGMENT_NAME                   SEGMENT_TYPE       TABLESPACE_NAME
------------------------------ ------------------------------ ------------------ ------------------------------
KELWIN                         SYS_LOB0000064475C00002$$      LOBSEGMENT         OLD_TABLESPACE

SQL> SELECT TABLE_NAME, COLUMN_NAME FROM DBA_LOBS WHERE SEGMENT_NAME = 'SYS_LOB0000064475C00002$$';

TABLE_NAME           COLUMN_NAME
-------------------- --------------------
TESTE_LOB            NOME

SQL> SELECT DBA_LOBS.TABLE_NAME, DBA_SEGMENTS.SEGMENT_NAME, DBA_SEGMENTS.SEGMENT_TYPE, DBA_SEGMENTS.TABLESPACE_NAME, DBA_LOBS.COLUMN_NAME 
,'ALTER TABLE '||DBA_SEGMENTS.OWNER||'.'||DBA_LOBS.TABLE_NAME||' MOVE LOB ('||DBA_LOBS.COLUMN_NAME||') STORE AS (TABLESPACE NEW_TABLESPACE);' AS COMANDO
FROM DBA_SEGMENTS, DBA_LOBS 
WHERE DBA_SEGMENTS.SEGMENT_NAME = DBA_LOBS.SEGMENT_NAME 
AND DBA_SEGMENTS.TABLESPACE_NAME = 'OLD_TABLESPACE';

COMANDO
---------------------------------------------------------------------------------------
ALTER TABLE KELWIN.TESTE_LOB MOVE LOB (NOME) STORE AS (TABLESPACE NEW_TABLESPACE);

SQL> ALTER TABLE TESTE_LOB MOVE LOB (NOME) STORE AS (TABLESPACE NEW_TABLESPACE);

Tabela alterada.

Pronto! Agora iremos verificar se ainda existem objetos na tablespace antiga.

SQL> SELECT OWNER, SEGMENT_NAME, SEGMENT_TYPE, TABLESPACE_NAME FROM DBA_SEGMENTS WHERE TABLESPACE_NAME  = 'OLD_TABLESPACE';

não há linhas selecionadas

O Ultimo passo é remover a tablespace antiga e renomear a nova tablespace.

--Tenha Cuidado!

SQL> DROP TABLESPACE OLD_TABLESPACE INCLUDING CONTENTS AND DATAFILES;

Tablespace eliminado.

SQL> ALTER TABLESPACE NEW_TABLESPACE RENAME TO OLD_TABLESPACE;

Tablespace alterado.

Depois de todo o processo realizado, nosso sistema de monitoramento reconheceu que o espaço em disco do sistema operacional foi normalizado e o incidente foi finalizado de forma automática.


Incidente Finalizado

COMENTÁRIOS

Política de Privacidade e Termos de Uso de Dados - Dataunique Tecnologia da Informação LTDA

A Dataunique Tecnologia da Informação LTDA, empresa devidamente registrada sob o CNPJ 15.179.495/0001-35, compromete-se a proteger a privacidade e segurança dos dados pessoais de seus usuários. Esta política descreve como coletamos, usamos, compartilhamos e protegemos as informações pessoais fornecidas por você.

1. Informações Coletadas

1.1. A Dataunique coleta informações fornecidas voluntariamente por você, como nome, endereço, e-mail, número de telefone, entre outras, durante o cadastro ou utilização de nossos serviços.

1.2. Dados de acesso e utilização de nossos serviços, como endereço IP, tipo de navegador, páginas visitadas e tempo de permanência, podem ser automaticamente registrados para melhorar a qualidade dos serviços oferecidos.

2. Uso de Informações

2.1. As informações coletadas são utilizadas para fornecer, manter, proteger e melhorar nossos serviços, bem como para desenvolver novos serviços.

2.2. Podemos utilizar seus dados para personalizar conteúdos, oferecer suporte ao cliente, enviar atualizações, newsletters e informações sobre novos produtos ou serviços.

3. Compartilhamento de Informações

3.1. A Dataunique não compartilha informações pessoais com terceiros, exceto quando necessário para cumprir obrigações legais, proteger nossos direitos ou em situações autorizadas por você.

4. Segurança de Dados

4.1. Utilizamos medidas de segurança adequadas para proteger suas informações contra acessos não autorizados, alterações, divulgação ou destruição não autorizada.

5. Cookies e Tecnologias Semelhantes

5.1. Utilizamos cookies e tecnologias semelhantes para melhorar a experiência do usuário, analisar o tráfego e personalizar conteúdos.

6. Seus Direitos

6.1. Você tem o direito de acessar, corrigir ou excluir suas informações pessoais. Para exercer esses direitos ou esclarecer dúvidas, entre em contato com nosso Encarregado de Proteção de Dados (DPO) através do e-mail [email protected].

7. Alterações na Política de Privacidade

7.1. Reservamo-nos o direito de alterar esta política a qualquer momento, e as alterações serão comunicadas por meio de nossos canais de comunicação.

Ao utilizar nossos serviços, você concorda com os termos desta Política de Privacidade. Recomendamos a leitura regular desta política para se manter informado sobre como tratamos seus dados pessoais.

Dados de Contato:

  • Endereço: Rua T30, 2515, Quadra 99 Lote 11/14, Sala 1404 e 1405, Edif Walk Bueno Business Edif e Lifestyle, SET BUENO, Goiânia – GO, 74215-060.
  • Telefone: (62) 99906-0584
  • Fax/Mensageiro Online: (62) 3223-2257
  • E-mail: [email protected]

Data de vigência: [Data de atualização da política]

Atenciosamente,

Dataunique Tecnologia da Informação LTDA