Mas onde eu entrei nessa história? Resumindo eu precisa observar o método que fora criado no Oracle para alimentar a tabela no PostgreSQL.
Primeira ação, tarefa simples, criar uma tabela:
Usei o usuário 'HR', e com ele executei o seguinte comando:
CREATE TABLE "HR"."TABELA_TESTE"
( "ID" NUMBER(5,0) NOT NULL ENABLE,
"NOME" VARCHAR2(2048 BYTE),
"PDF" CLOB,
"DATA" DATE DEFAULT sysdate,
CONSTRAINT "TABELA_TESTE_PK" PRIMARY KEY ("ID")
USING INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS" ENABLE
) SEGMENT CREATION IMMEDIATE
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)
TABLESPACE "USERS"
LOB ("PDF") STORE AS BASICFILE (
TABLESPACE "USERS" ENABLE STORAGE IN ROW CHUNK 8192 RETENTION
NOCACHE LOGGING
STORAGE(INITIAL 65536 NEXT 1048576 MINEXTENTS 1 MAXEXTENTS 2147483645
PCTINCREASE 0 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT FLASH_CACHE DEFAULT CELL_FLASH_CACHE DEFAULT)) ;Agora, como popular uma tabela com CLOB? Precisamos criar uma stored procedure da seguinte forma:
CREATE OR REPLACE PROCEDURE p( p_idinit in int, p_idend in int, p_pdf in varchar2 )
AS
BEGIN
FOR v_LoopCounter IN p_idinit..p_idend LOOP
INSERT INTO hr.tabela_teste
VALUES (v_LoopCounter, NULL, p_pdf, SYSDATE);
END LOOP;
END;
/
Agora vamos popular a tabela:
EXEC p(1,15000, rpad('*',32000,'*') );
Ao término a tabela conterá 15000 linhas, todas elas com ID correto, na coluna 'nome' será NULL, na coluna 'pdf' 32000 '*' e na coluna 'data' a data corrente.
Finalizados os testes, o que pude observar quanto ao xDB, é que a replicação utiliza triggers e tabelas auxiliares para realizar a replicação para o PostgreSQL. É possível fazer alterações na tabela durante o processo de replicação, entretanto será necessário ajustar a tabela no PostgreSQL.
Uma limitação que pude observar é que exemplo, a coluna 'ID' foi criada com a precisão 5, se alterarmos a precisão da coluna para precisão 30, por exemplo, ao inserir um volume grande de registros a inserção falhará em função da trigger ativa na mesma para o processo de replicação, resumindo, as tabelas auxiliares do xDB criadas durante o mapeamento entre as bases não é atualizado quando se altera a precisão da tabela de origem. Solução, alterar as tabelas auxiliares do xDB no Oracle para atender a necessidade.
Nenhum comentário:
Postar um comentário