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