quarta-feira, 12 de julho de 2017

Renomear e excluir arquivos no Linux com caracteres especiais no nome

Fala pessoal...

Hoje surgiu uma necessidade um pouco fora do normal aqui. Nada a ver com Oracle e sim com a exclusão de arquivos no linux.

Achei bacana compartilhar.

Não sei porque surgiu um arquivo com o nome "?0?@@?i@8?@" no meu servidor de testes.

[root@odin]# ls -lrht
-rw-r--r--   1 root   root        0 Jul 12 09:58 ?0?@@?i@8?@

Ok, vamos excluir esse arquivo:

rm -f ?0?@@?i@8?@
rm -f "?0?@@?i@8?@"

Nos dois casos recebi o erro que o nome do arquivo era inválido.

Então, dei uma pesquisada e achei o tal do "--". Ai ficou fácil, primeiro renomeei o arquivo problemático e depois exclui.

-- Renomear
[root@odin]# mv -- ?0?@@?i@8?@ tt

[root@odin]# ll
-rw-r--r--   1 root   root        0 Jul 12 09:58 tt

-- Excluir
[root@odin]# rm tt
rm: remove regular empty file `tt'? y


E tudo foi resolvido.

Então é isso. Só uma dica que pode ser útil um dia.

Abraço
Mario

segunda-feira, 10 de julho de 2017

IPS - Incident Package Service

Olá pessoal.

Hoje me deparei com um erro ORA-07445. Após algumas pesquisas no MOS e como não havia achado nada relacionada decidi abrir um SR.

Um dos arquivos solicitados para abertura era o zip gerado pelo IPS (Incident Package Service).

O IPS é uma extensão do "Automatic Diagnostic Repository (ADR)", ou seja, ele é gerado pela ferramenta ADRCI.

Bom, então vamos ao que interessa. São várias as formas de usar o IPS. Abaixo vou colocar duas ou três.


Vamos nos conectar ao ADRCI e exibir os nossos homes:
adrci>  show homes
ADR Homes:
diag/asm/+asm/+ASM1
diag/rdbms/mv/mv1

Vamos setar o nosso homepath:
adrci> set homepath diag/rdbms/mv/mv1

adrci> show homes
ADR Homes:
diag/rdbms/mv/mv1

Exibir os incidentes do ambiente:

adrci> show incidents


Vamos agora criar o pacote de arquivos pelo INCIDENT_ID.

adrci> ips pack incident 1233454 in /tmp
Generated package 6 in file /tmp/ORA7445pr_20170710095409_COM_1.zip, mode complete

$ ls -lrht /tmp/
-rw-r--r--  1 oracle       oinstall     2.1M Jul 10 09:54 ORA7445pr_20170710095409_COM_1.zip

É isso, podemos mandar esse arquivo para o MOS.

Temos várias outras formas de criação, como por exemplo, pelo PROBLEM_ID:

Primeiro vamos identificar o PROBLEM_ID:
adrci> show incident -mode brief -p "incident_id=1233454"



Agora, é só criar o pacote:
adrci> ips create package problem 5 correlate all
Created package 11 based on problem id 5, correlation level all

E gerar o zip:
adrci> ips generate package 11 in "/tmp"
Generated package 11 in file /tmp/ORA7445pr_20170710103222_COM_1.zip, mode complete

$ ls -lrht /tmp/ORA7445pr_20170710103222_COM_1.zip
-rw-r--r-- 1 oracle oinstall 12M Jul 10 10:33 /tmp/ORA7445pr_20170710103222_COM_1.zip

Para listar os incidentes1 que fazem parte do pacote, basta executar:
adrci> ips show incidents package 11



Ou ainda, listar os arquivos que fazem parte do pacote.   
adrci> IPS SHOW FILES PACKAGE 11





Podemos também gerar por um período de tempo, por exemplo:

adrci> IPS CREATE PACKAGE TIME '2017-07-10 06:19:41.614000 -03:00' to '2017-07-10 09:23:07.109000 -03:00'
Created package 9 based on time range 2017-07-10 06:19:41.614000 -03:00 to 2017-07-10 09:23:07.109000 -03:00, correlation level typical

adrci> ips generate package 9 in /tmp
Generated package 9 in file /tmp/ORA7445pr_20170710100817_COM_1.zip, mode complete

$ ls -lrht /tmp/ORA7445pr_20170710100817_COM_1.zip
-rw-r--r-- 1 oracle oinstall 11M Jul 10 10:08 /tmp/ORA7445pr_20170710100817_COM_1.zip


Para verificar todas as opções, basta acessar o help;

adrci> help ips

 HELP IPS [topic]
   Available Topics:
        ADD
        ADD FILE
        ADD NEW INCIDENTS
        CHECK REMOTE KEYS
        COPY IN FILE
        COPY OUT FILE
        CREATE PACKAGE
        DELETE PACKAGE
        FINALIZE PACKAGE
        GENERATE PACKAGE
        GET MANIFEST
        GET METADATA
        GET REMOTE KEYS
        PACK
        REMOVE
        REMOVE FILE
        SET CONFIGURATION
        SHOW CONFIGURATION
        SHOW FILES
        SHOW INCIDENTS
        SHOW PACKAGE
        UNPACK FILE
        UNPACK PACKAGE
        USE REMOTE KEYS

E para verificar as configurações atuais do IPS:

adrci> ips  SHOW CONFIGURATION





Então é isso pessoal. Uma dica rápida mas que ajuda bastante no momento da abertura do SR.

Mais informações: ADRCI

Abraço
Mario

sábado, 8 de julho de 2017

Trigger de logon para ativar trace

Olá pessoal.

Tive uma necessidade a um tempo atrás de ativar um trace em uma detereminada sessão que viesse de um programa específico.

Coisa simples, então vou deixar documentado aqui para quem precisar a trigger de logon que eu usei.

create or replace trigger sys.LOGON_TRACE
      after logon on database
DECLARE
      v_username VARCHAR2(70);
      v_program  VARCHAR2(70);
BEGIN
      SELECT LOWER(USERNAME),
                      LOWER(PROGRAM)
      INTO  v_username,
                 v_program
      FROM sys.v_$session
      WHERE
                   sid = SYS_CONTEXT('USERENV', 'SID');

  -- if ora_login_user = 'MARIO' then   -- Se quiser utilizar a trigger em determinados logins
  IF (v_program = 'q_sender.exe' OR v_program='sqlplusw.exe')
  THEN
        EXECUTE IMMEDIATE 'ALTER SESSION SET sql_trace=TRUE';
        EXECUTE IMMEDIATE 'alter session set timed_statistics=true';
        EXECUTE IMMEDIATE 'alter session set max_dump_file_size=unlimited';
EXECUTE IMMEDIATE 'alter session set events=''10046 trace name context forever, level 12''';
  END IF;
END LOGON_TRACE;
/

Então é isso pessoal, simples e objetivo. 

Abraço
Mario

terça-feira, 30 de maio de 2017

Artigo para o OTN - Criação e configuração de ambiente Oracle Cloud Service: Database Cloud Service – Parte 1

Olá pessoal...
Mais um artigo publicado no OTN. Dessa vez falando sobre o Cloud Oracle, mais especificamente sobre o Database Cloud Service.


Se você não leu os outros, abaixo estão os links para facilitar.
Voltando ao artigo atual, não é de hoje que vemos crescer a importância das operações em cloud como um todo. É claro que os bancos de dados não ficariam de fora dessa evolução.
É cada vez mais comum ouvirmos falar termos como PaaS (Platform as a Service), IaaS (Infrastructure as a Service), SaaS (Software as a Service), entre outras.
Neste artigo procuro passar o passo a passo para a criação de um ambiente em Database Cloud Service, um dos produtos oferecidos no PaaS.
Artigo com a revisão do grande Alex Zaballa.

Então é isso pessoal, espero que gostem.
Abraço
Mario

terça-feira, 6 de dezembro de 2016

Utilizando o SQL Tuning Advisor (DBMS_SQLTUNE)

Fala pessoal...

Hoje fazendo uns acertos aqui no meu ambiente, precisei utilizar o SQL Tuning Advisor.

Ele é bem simples, mas é sempre bom lembrar que precisamos ter o "Diagnostic+Tunig" devidamente licenciado e habilitado.

Sendo assim, abaixo segue um exemplo da utilização.


-- Executar o ADDM. 

@?/rdbms/admin/addmrpt.sql

Na verdade baseado no ADDM identifiquei as necessidades iniciais tendo em vista que é um ambiente que não administro a muito tempo. Sendo assim, não é obrigatório executar esse relatório.


-- Create task
DECLARE
  l_sql_tune_task_id  VARCHAR2(100);
BEGIN
  l_sql_tune_task_id := DBMS_SQLTUNE.create_tuning_task (
         begin_snap  => 34932,           -- Snap inicial
        end_snap    => 35220,           -- Snap final
        sql_id      => 'cyb0csh3g3vxa',   -- SQL Id
        scope       => DBMS_SQLTUNE.scope_comprehensive,
        time_limit  => 3600,            -- Execução em seg
        task_name   => 'cyb0csh3g3vxa_AWR2_tuning_task', 
        description => 'Task: cyb0csh3g3vxa');
   DBMS_OUTPUT.put_line('l_sql_tune_task_id: ' || l_sql_tune_task_id);
END;
/

No exemplo acima utilizei uma período do meu AWR para limitar a minha task. Se não quiser utilizar os snaps, basta excluir essas duas linhas.

-- Execute task
   EXEC DBMS_SQLTUNE.execute_tuning_task(
           task_name => 'cyb0csh3g3vxa_AWR2_tuning_task');


-- Verify status
   SELECT 
task_id, 
task_name, 
status
   FROM 
dba_advisor_log
   WHERE 
task_name like '%cyb0csh3g3vxa%'
   order by 
task_id;

  TASK_ID  TASK_NAME                      STATUS
---------- ------------------------------ -----------
    154921 cyb0csh3g3vxa_AWR2_tuning_task COMPLETED

-- Verify recomendations 
SET LONG 10000;
SET PAGESIZE 1000
SET LINESIZE 200
   SELECT 
      DBMS_SQLTUNE.report_tuning_task(
      'cyb0csh3g3vxa_AWR2_tuning_task'
      ) AS recommendations 
   FROM 
      dual;

Nesse momento será apresentado uma relatório com as recomendações de melhorias.

Example:

RECOMMENDATIONS
--------------------------------------------------------------------------------
GENERAL INFORMATION SECTION
-------------------------------------------------------------------------------
Tuning Task Name   : cyb0csh3g3vxa_AWR2_tuning_task
Tuning Task Owner  : SYS
Workload Type      : Single SQL Statement
Scope              : COMPREHENSIVE
Time Limit(seconds): 1200
Completion Status  : COMPLETED
Started at         : 12/06/2016 06:24:20
Completed at       : 12/06/2016 06:24:22

-------------------------------------------------------------------------------
Schema Name: PRD1_GC_APP
SQL ID     : cyb0csh3g3vxa
SQL Text   : select tbatchjobs0_.SUB_ID as SUB1_34_, tbatchjobs0_.RUN_ID as
             RUN2_34_, tbatchjobs0_.PROCESS_TYPE as PROCESS3_34_,
             tbatchjobs0_.PIECE_ID as PIECE4_34_, tbatchjobs0_.CREATE_TIME as
             CREATE5_34_, tbatchjobs0_.START_TIME as START6_34_,
             tbatchjobs0_.FINISH_TIME as FINISH7_34_, tbatchjobs0_.AGENT_ID
             as AGENT8_34_, tbatchjobs0_.THREAD_ID as THREAD9_34_,
             tbatchjobs0_.STATUS as STATUS34_, tbatchjobs0_.RESULT_INFO as
             RESULT11_34_ from T_BATCH_JOB_SUB tbatchjobs0_ where
             tbatchjobs0_.AGENT_ID=1 and tbatchjobs0_.STATUS<>107 and
             tbatchjobs0_.STATUS<>105 and tbatchjobs0_.STATUS<>223 and
             tbatchjobs0_.STATUS<>106 order by tbatchjobs0_.SUB_ID

-------------------------------------------------------------------------------
FINDINGS SECTION (3 findings)
-------------------------------------------------------------------------------

1- Restructure SQL finding (see plan 1 in explain plans section)
----------------------------------------------------------------
  Predicate "TBATCHJOBS0_"."STATUS"<>107 used at line ID 2 of the execution
  plan is an inequality condition on indexed column "STATUS". This inequality
  condition prevents the optimizer from selecting indices  on table
  "PRD1_GC"."T_BATCH_JOB_SUB".

  Recommendation
  --------------
  - Rewrite the predicate into an equivalent form to take advantage of
    indices.

2- Statistics Finding
---------------------
  Optimizer statistics for table "PRD1_GS"."T_CTS_BCP_GL_FEE" and its indices
  are stale.

  Recommendation
  --------------
  - Consider collecting optimizer statistics for this table.
    execute dbms_stats.gather_table_stats(
        ownname => 'PRD1_GS', 
        tabname => 'T_CTS_BCP_GL_FEE', 
        estimate_percent => DBMS_STATS.AUTO_SAMPLE_SIZE, 
        method_opt => 'FOR ALL COLUMNS SIZE AUTO');

  Rationale
  ---------
    The optimizer requires up-to-date statistics for the table in order to
    select a good execution plan.

3- SQL Profile Finding (see explain plans section below)
--------------------------------------------------------
  A potentially better execution plan was found for this statement.

  Recommendation (estimated benefit: 48.56%)
  ------------------------------------------
  - Consider accepting the recommended SQL profile.
    execute dbms_sqltune.accept_sql_profile(
task_name => 'cyb0csh3g3vxa_AWR2_tuning_task', 
task_owner => 'SYS', 
replace => TRUE);

-------------------------------------------------------------------------------
EXPLAIN PLANS SECTION
-------------------------------------------------------------------------------

1- Original
-----------
Plan hash value: 4019928224

--------------------------------------------------------------------------------------
| Id  | Operation          | Name            | Rows  | Bytes | Cost (%CPU)| Time     |
--------------------------------------------------------------------------------------
|   0 | SELECT STATEMENT   |                 |  7983 |   350K|  2063   (3)| 00:00:21 |
|   1 |  SORT ORDER BY     |                 |  7983 |   350K|  2063   (3)| 00:00:21 |
|*  2 |   TABLE ACCESS FULL| T_BATCH_JOB_SUB |  7983 |   350K|  2061   (3)| 00:00:21 |
--------------------------------------------------------------------------------------

Predicate Information (identified by operation id):
---------------------------------------------------

   2 - filter("TBATCHJOBS0_"."STATUS"<>107 AND "TBATCHJOBS0_"."STATUS"<>105
              AND "TBATCHJOBS0_"."STATUS"<>106 AND "TBATCHJOBS0_"."AGENT_ID"=1 AND
              "TBATCHJOBS0_"."STATUS"<>223)
-------------------------------------------------------------------------------

É isso ai pessoal, bem simples e objetivo. 

Agora é só analisar essas sugestões e lembrar-se que o advisor fornece sugestões de melhorias e não uma receita de bolo pronta e infalível. 

Portanto, o seu resultado e sua utilização devem ser analisados e testados com muito cuidado.

Abraço
Mario

sábado, 5 de novembro de 2016

sexta-feira, 4 de novembro de 2016

Replicação de dados - GoldenGate

Olá pessoal, como  estão?

Espero que todos estejam muito bem.

Eu já publiquei uma série de artigos de GoldenGate a algum tempo atrás - Parte 1Parte 2Parte 3 e Parte 4.

Só que lá, confesso, o texto ficou um pouco grande e também muito pulverizado. 

Outro ponto é que a instalação era feita via linha de comando, enfim, chegou o momento de fazer algo mais direto.

Não vou detalhar comando a comando, acho desnecessário. 

Mas os nomes e processos são bem intuitivos, então basta dar uma olhada nos manuais aqui que você será feliz, tenho certeza.

Vamos começar.

====================================================================
-- Versões e downloads
====================================================================
- Sistema Operacional: Oracle Linux 6.5
- Bases de dados: GGPRD e GGCOPY
- Versão do Oracle: 11.2.0.4
- Versão do GG: 12.2.0.1.1
- Usuário do GG: dbagate           Senha: aaa123
- Usuário a ser replicado: SCOTT   Senha: aaa123
- Download do GG: Aqui

Nosso instalador, ficará nesse local: /home/oracle/GoldenGate

====================================================================
-- Instalação do GG (SOURCE e TARGET)
====================================================================
1) Criar o GG_HOME.

    mkdir -p /oracle/app/oracle/product/11.2.0/gghome

2) Descompactar o instalador e iniciar a instalação

    cd /home/oracle/GoldenGate 
    unzip fbo_ggs_Linux_x64_shiphome.zip

    cd /home/oracle/GoldenGate/fbo_ggs_Linux_x64_shiphome/Disk1
./runInstaller

Abaixo a sequência de telas da instalação:






3) Adicionar o GG_HOME ao bash_profile

    cd ~
    vi .bash_profile
    GG_HOME=/oracle/app/oracle/product/11.2.0/gghome 

4) Agora é só testar a instalação
     
    cd $GG_HOME
    ./ggsci

   Oracle GoldenGate Command Interpreter for Oracle
   Version 12.2.0.1.1 OGGCORE_12.2.0.1.0_PLATFORMS_151211.1401_FBO
   Linux, x64, 64bit (optimized), Oracle 12c on Dec 12 2015 02:56:48
   Operating system character set identified as UTF-8.
   Copyright (C) 1995, 2015, Oracle and/or its affiliates. All 
   rights reserved.

   GGSCI (rac12c1) 2> info all
   Program    Status      Group       Lag at Chkpt  Time Since Chkpt
   MANAGER    RUNNING
     
5) Caso seja necessário, alterar a porta do manager

    GGSCI (rac12c1) 3> stop manager
    edit params mgr
PORT 7889
    start manager

====================================================================
-- Preparação das bases (SOURCE e TARGET)
====================================================================

1) Pré-requisitos que devem ser configurados

   ALTER DATABASE FORCE LOGGING;
   ALTER DATABASE ADD SUPPLEMENTAL LOG DATA;
   ALTER SYSTEM SET ENABLE_GOLDENGATE_REPLICATION=TRUE SCOPE=SPFILE;
   ALTER SYSTEM SET RECYCLEBIN=OFF SCOPE=SPFILE;
   ALTER SYSTEM SET STREAMS_POOL_SIZE=256M SCOPE=SPFILE;
   SHUTDOWN IMMEDIATE;
   STARTUP;

   SELECT SUPPLEMENTAL_LOG_DATA_MIN,LOG_MODE FROM V$DATABASE;

Importante: as bases devem estar em modo Archive.

2) Criar user, tablespace para o GG e liberar os grant's

-- GGPRD CREATE TABLESPACE GGATE datafile '/u01/oradata/ggprd/ggate01.dbf' SIZE 1G AUTOEXTEND on NEXT 512M maxsize 8G; -- GGCOPY CREATE TABLESPACE GGATE datafile '/u01/oradata/ggcopy/ggate01.dbf' SIZE 1G AUTOEXTEND on NEXT 512M maxsize 8G; CREATE USER DBAGATE IDENTIFIED BY aaa123 DEFAULT TABLESPACE GGATE TEMPORARY TABLESPACE TEMP; GRANT CONNECT, RESOURCE, UNLIMITED TABLESPACE TO DBAGATE; GRANT EXECUTE ON UTL_FILE TO DBAGATE; GRANT DBA TO dbagate; GRANT SELECT ANY DICTIONARY TO dbagate; GRANT EXECUTE ON dbms_flashback TO dbagate; 

3) Criar a estrutura interna do GG. Para isso, devemos estar no diretório do HOME_GATE

    cd $GGHOME

    @marker_setup.sql
Enter Oracle GoldenGate schema name: dbagate

    @ddl_setup.sql
Enter Oracle GoldenGate schema name: dbagate

    @role_setup.sql
Enter GoldenGate schema name: dbagate

Liberar o GRANT para o user do GG
GRANT GGS_GGSUSER_ROLE TO dbagate

    @ddl_enable.sql

4) Criar os diretórios

    ./ggsci

    GGSCI (rac12c1) 4> create subdirs

5) Preparando a tabela de checkpoint e registrando as informações do schema a ser replicado

    GGSCI (rac12c1) 5> EDIT PARAMS ./GLOBALS
    GGSCI (rac12c1) 6> GGSCHEMA DBAGATE
    GGSCI (rac12c1) 7> CHECKPOINTTABLE DBAGATE.checkpoint

    -- Precisamos estar logados com o dbagate nesse ponto
    GGSCI (rac12c1) 8> DBLOGIN USERID dbagate, PASSWORD aaa123

    GGSCI (rac12c1) 9>  ADD CHECKPOINTTABLE dbagate.checkpoint

    GGSCI (rac12c1) 10> ADD SCHEMATRANDATA scott ALLCOLS

============================================================
Somente no source
=============================================================

1) Configurar o extract. Ele é responsável pela extração dos dados que serão replicados e vai gerar os trailfiles localmente.

    GGSCI (rac12c1) 1> dblogin userid dbagate, password aaa123
    
    GGSCI (rac12c1) 2> add extract extract1, tranlog, begin now

    GGSCI (rac12c1) 3> 
    add exttrail /oracle/app/oracle/product/11.2.0/gghome/dirdat/lt, extract extract1, megabytes 50

    GGSCI (rac12c1) 4> 
    add rmttrail /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt, extract extract1, megabytes 50
    
    GGSCI (rac12c1) 5> edit params extract1
    extract extract1
    userid dbagate@GGPRD, password aaa123
    EXTTRAIL /oracle/app/oracle/product/11.2.0/gghome/dirdat/lt
    TRANLOGOPTIONS EXCLUDEUSER DBAGATE
    GETTRUNCATES
    ddl include mapped objname scott.*;
    table SCOTT.*;


    GGSCI (rac12c1) 6> info extract extract1, detail

2) Configurar o datapump. Ele é responsável pela envio dos trailfiles para o servidor remoto.

    GGSCI (rac12c1) 7> ADD EXTRACT dtpump1, EXTTRAILSOURCE /oracle/app/oracle/product/11.2.0/gghome/dirdat/lt, BEGIN now

    GGSCI (rac12c1) 8> 
    ADD RMTTRAIL /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt, EXTRACT dtpump1, megabytes 50

    GGSCI (rac12c1) 9> edit params dtpump1
    EXTRACT dtpump1
    RMTHOST 192.168.1.32, mgrport 7809
    RMTTRAIL /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt
    PASSTHRU
    GETTRUNCATES
    TABLE SCOTT.*;


    GGSCI (rac12c1) 10> info all

============================================================
Somente no target
=============================================================
1) Adicionar o replicat

    ./ggsci
    
    GGSCI (rac12c2) 1> dblogin userid dbagate; password aaa123

    GGSCI (rac12c2) 2> add replicat replic1, exttrail /oracle/app/oracle/product/11.2.0/gghome/dirdat/rt, begin now, CHECKPOINTTABLE dbagate.checkpoint, 

    GGSCI (rac12c2) 3> edit params replic1
    REPLICAT replic1
    ASSUMETARGETDEFS
    GETTRUNCATES
    HANDLECOLLISIONS
    USERID dbagate, PASSWORD aaa123
    discardfile /oracle/app/oracle/product/11.2.0/gghome/dircrd/replic1_discard.txt, append, megabytes 50
    MAP SCOTT.*, TARGET SCOTT.*;
    DDL INCLUDE ALL
    DDLERROR DEFAULT IGNORE RETRYOP MAXRETRIES 10 RETRYDELAY 30 


    GGSCI (rac12c2) 4> info all

============================================================
Iniciar os serviços do SOURCE
=============================================================

    ./ggsci

    GGSCI (rac12c1) 1> dblogin userid dbagate; password aaa123




    GGSCI (rac12c1) 2> start er *

    GGSCI (rac12c1) 3> info all

    GGSCI (rac12c1) 4> info extract extract1, detail

    GGSCI (rac12c1) 5> info extract dtpump1, detail


    GGSCI (rac12c1) 6> stats extract extract1

============================================================
Migrar o schema do source para o target - INITIAL LOAD
=============================================================

Nesse ponto iremos executar a carga inicial (INITIAL LOAD) no target. 

Essa etapa pode ser feita de várias formas. Poderíamos somente criar a estrutura de tabelas no target e fazer um INITIAL LOAD via GoldenGate mesmo. Ou fazer via EXPDP/IMPDP.

Eu prefiro sempre fazer via EXPDP/IMPDP. Então é essa forma que vamos utilizar.

1) Identificando o scn

    SELECT TO_CHAR(CURRENT_SCN) FROM V$DATABASE;

    No nosso exemplo, o SCN sera esse: 970349

2) Executar o EXPDP com FLASHBACK_SCN no source

    expdp \"/ as sysdba\" directory=EXPDP_DIR DUMPFILE=SCOTT_%U.dmp LOGFILE=scott.log owner=scott filesize=8192m  FLASHBACK_SCN=970349



3) Realizar o IMPDP no target
    impdp \"/ as sysdba\" directory=EXPDP_DIR dumpfile=SCOTT_1.dmp logfile=impdp.log SCHEMAS='SCOTT'

============================================================
Somente no target
=============================================================
1) Iniciar o replicat. Esse processo é o responsável por ler e aplicar os trailfiles enviados pelo processo datapump do source.

    ./ggsci

    GGSCI (rac12c2) 1> dblogin userid dbagate; password aaa123

    GGSCI (rac12c2) 2> start er *

    Importante:
    Caso queira iniciar a partir do SCN (eu acho mais seguro)
    GGSCI (rac12c2) 2> start replicat replic1, ATCSN 970349

    GGSCI (rac12c2) 3> info all

    GGSCI (rac12c2) 4> info replicat replic1, detail


    GGSCI (rac12c2) 5> stats REPLICAT replic1, total, hourly, reportrate min    

Agora meus queridos, basta executar os testes na origem e ver a mágica acontecer no destino.

Lembre-se que esse é um cenário simples, porém um cenário maior acaba seguindo os mesmos passos. Consulte o manual, são opções diversas para replicação.

Espero que gostem.

Abraço
Mario

Postagem em destaque

[ORACLE] Useful scripts for the day-to-day life of a DBA (Part 3) - System metrics

Hello everyone.   Hope you're doing well! As I said here , I've created a repository on GITHUB to share some scripts that I like t...