Oracle - Problema con Réplica Avanzada en Oracle 8i

   
Vista:

Problema con Réplica Avanzada en Oracle 8i

Publicado por lesanch (4 intervenciones) el 16/09/2009 17:22:48
Hola a todos,

Necesito la ayuda de alguien pues la verdad ando un poco presionado. El tema es que necesitaría saber como realizar una replicación avanzada en Oracle 8i pues tengo un problema que no logro hacer que dos bases repliquen en ambos sentidos, solo en uno; y supongo me estará faltando algo para que repliquen de modo bilateral, podrían ayudarme por favor ?

Desde la base que contiene tabla A a través de un DBLINK logro replicar hacia la base B. La base A contiene la Master Table y el Materialized View Log y la base B contiene el Materialized View y el Refresh Group que realiza la réplica.

Los scripts que utilizo en los pasos son:

1- Creación de la Tabla en la Base A:

CREATE TABLE SAM.TABLE
(
NRO_PEDIDO_WEB NUMBER(10) NOT NULL,
NRO_POSICION_WEB NUMBER(10) NOT NULL,
ID_SESSION VARCHAR2(100),
D_TIPO_DIMENSION VARCHAR2(255),
)
TABLESPACE SAM_DATA
PCTUSED 40
PCTFREE 10
INITRANS 1
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
LOGGING
NOCACHE
NOPARALLEL;

CREATE UNIQUE INDEX SAM.PK_TABLE ON SAM.TABLE
(NRO_PEDIDO_WEB, NRO_POSICION_WEB)
LOGGING
TABLESPACE SAM_DATA
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
NOPARALLEL;

CREATE PUBLIC SYNONYM TABLE FOR SAM.TABLE;

ALTER TABLE SAM.TABLE ADD (
CONSTRAINT PK_TABLE
PRIMARY KEY
(NRO_PEDIDO_WEB, NRO_POSICION_WEB)
USING INDEX
TABLESPACE SAM_INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
));

GRANT DELETE, INSERT, SELECT, UPDATE ON SAM.TABLE TO USUARIO1;

GRANT DELETE, INSERT, SELECT, UPDATE ON SAM.TABLE TO USUARIO2;

------------------------------------------------------------------------
2- Creación del Materialized View Log en la Base A

CREATE MATERIALIZED VIEW LOG ON SAM.TABLE
TABLESPACE SAM_DATA
PCTUSED 30
PCTFREE 60
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
BUFFER_POOL DEFAULT
)
NOCACHE
LOGGING
NOPARALLEL
WITH PRIMARY KEY;

-------------------------------------------------------------------------

3- Creación del Materialized View en la Base B

CREATE MATERIALIZED VIEW SAM.TABLE
TABLESPACE SAM_DATA
PCTUSED 40
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
NOCACHE
LOGGING
NOPARALLEL
BUILD IMMEDIATE
USING INDEX
TABLESPACE SAM_INDEX
PCTFREE 10
INITRANS 2
MAXTRANS 255
STORAGE (
INITIAL 64K
MINEXTENTS 1
MAXEXTENTS UNLIMITED
PCTINCREASE 0
FREELISTS 1
FREELIST GROUPS 1
BUFFER_POOL DEFAULT
)
REFRESH FAST
WITH PRIMARY KEY
FOR UPDATE
AS
SELECT
"TABLE"."NRO_PEDIDO_WEB" "NRO_PEDIDO_WEB",
"TABLE"."NRO_POSICION_WEB" "NRO_POSICION_WEB",
"TABLE"."ID_SESSION" "ID_SESSION",
"TABLE"."D_TIPO_DIMENSION" "D_TIPO_DIMENSION"
FROM "TABLE"@DBLINK.WORLD "TABLE";

COMMENT ON TABLE SAM.TABLE IS 'snapshot table for snapshot SAM.TABLE';

CREATE PUBLIC SYNONYM TABLE FOR SAM.TABLE;

GRANT DELETE, INSERT, SELECT, UPDATE ON SAM.TABLE TO USUARIO1;

GRANT DELETE, INSERT, SELECT, UPDATE ON SAM.TABLE TO USUARIO2;

---------------------------------------------------------------------------

4- Creación del Refresh Group en la Base B

DECLARE
SnapArray SYS.DBMS_UTILITY.UNCL_ARRAY;
BEGIN
SnapArray(1) := 'SAM.TABLE';
SnapArray(2) := NULL;
SYS.DBMS_REFRESH.MAKE (
name => 'SAM.REFRESHTABLE'
,tab => SnapArray
,next_date => TO_DATE('09/16/2009 12:22:33', 'MM/DD/YYYY HH24:MI:SS')
,interval => '/*10:Mins*/ sysdate + 10/(60*24)'
,implicit_destroy => FALSE
,lax => TRUE
,job => 0
,rollback_seg => NULL
,push_deferred_rpc => TRUE
,refresh_after_errors => TRUE
,purge_option => 0
,parallelism => 0
,heap_size => 0
);
Commit;
END;
/

---------------------------------------------------------------------------

Ayuda por favor !!!

Gracias,
lesanch.
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder

RE:Problema con Réplica Avanzada en Oracle 8i

Publicado por JoseC (1 intervención) el 12/03/2010 11:41:13
Hola, no se si alguien podrá aclararme si, al realizar un update sobre una MV cambiamos un valor determinado pero al hacer un refresh perdemos ese cambio.
Hay alguna forma en la que podamos conservar ese update???

Salu2.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Réplica Avanzada en Oracle 8i

Publicado por lesanch (4 intervenciones) el 12/03/2010 22:44:21
Hola José,

Como todo DML si haces el commit luego del update el cambio se reflejará porque la vista materializada al final de cuentas no es más que una tabla y se comporta como tal, pero como esa MV es un producto del contenido de una tabla master evidentemente cuando le haces un refresh se actualizará con los datos de la Master.

Saludos.
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar

RE:Problema con Réplica Avanzada en Oracle 8i

Publicado por Joder (1 intervención) el 22/06/2010 18:54:52
La respuesta correcta es SI.

Un si evidentemente como tal nos indica inequivocamente que la respuesta es afirmativa. Ni que fueras un anuncio de Spotifile
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
0
Comentar