概述
增加sequence及sequence 同步,进程中新增加表 (已经配置好ogg信息,并且启用了ddl同步)
源端 oracle_sid test,
目标端oracle_sid testogg
--源端创建sequence ,创建sequence的时候,要加上nocache,不然默认会cache 20个。然后源端和目标端查询last_number会不一致。drop掉后,加上nocache重新即可
create sequence bb.t1_seq1 minvalue 1 maxvalue 999999999999999999999999 start with 1 increment by 1 nocache; -- 要加上nocache ,默认是cache 20
select last_number from user_sequences where sequence_name='T1_SEQ1';
select bb.t1_seq1.nextval from dual;
BB@test>select last_number from user_sequences where sequence_name='T1_SEQ1';
LAST_NUMBER
-----------
14
BB@test>
BB@testogg>select last_number from user_sequences where sequence_name='T1_SEQ1';
LAST_NUMBER
-----------
14
BB@testogg>
-- sequence 配置
extdb1
sequence bb.t1_seq1; -- 源端抽取进程加上这个
pumdb1
sequence bb.t1_seq1; -- 源端pump进程加上这个
repdb1
map bb.t1_seq1,target bb.t1_seq1; -- 目标端replicat进程添加这个
-- 验证同步
BB@test>insert into bb.t1 values(t1_seq1.nextval,'i',sysdate);
1 row created.
BB@test>commit;
BB@test>select * from bb.t1;
ID NAME TIME
---------- ---- -------------------
14 i 2020-04-16 10:19:04
BB@test>
BB@testogg>select * from bb.t1;
ID NAME TIME
---------- ---- -------------------
14 i 2020-04-16 10:19:04
BB@testogg>
-- 创建一个job ,5分钟执行一次 ,在源端插入数据 (测试结果是,源端创建了job,目标端并没有这个job。原因是job的元数据是存放在sys.job$这个表里面的)
-- 先创建一个存储过程 ,job调用存储过程,然后可以在目标端看到ogg生成了这个存储过程
conn bb/oracle
create or replace procedure insert_bb_t1 as
begin
insert into bb.t1 values(t1_seq1.nextval,'i',sysdate);
commit;
end;
BB@testogg>select name,type,text from dba_source where owner='BB' and name='INSERT_BB_T1';
NAME TYPE TEXT
------------ ------------ ------------------------------------------------------------
INSERT_BB_T1 PROCEDURE procedure insert_bb_t1 as
INSERT_BB_T1 PROCEDURE begin
INSERT_BB_T1 PROCEDURE insert into bb.t1 values(t1_seq1.nextval,'i',sysdate);
INSERT_BB_T1 PROCEDURE commit;
INSERT_BB_T1 PROCEDURE end; /* GOLDENGATE_DDL_REPLICATION */
BB@testogg>
-- 创建job ,生成的job号是 23 ,并且在目标端没有生成job ?
declare
jobno number;
begin
sys.dbms_job.submit(
job=>jobno,
what=>'bb.insert_bb_t1;',
next_date=>sysdate,
interval=>'SYSDATE+5/24/60');
commit;
end;
BB@test>select job,what from user_jobs where log_user='BB';
JOB WHAT
---------- ------------------------------
23 bb.insert_bb_t1;
BB@test>
BB@testogg>select * from user_jobs; -- 居然没有job
no rows selected
BB@testogg>
exec dbms_job.run(23);
-- 对比源端和目标端数据,发现同步过来了 。但是目标端没有产生job 。
BB@test>select * from t1;
ID NAME TIME
---------- ---- -------------------
14 i 2020-04-16 10:19:04
15 i 2020-04-16 10:39:03
16 i 2020-04-16 10:44:03
17 i 2020-04-16 10:48:51
BB@test>
BB@testogg>select * from t1;
ID NAME TIME
---------- ------------ -------------------
14 i 2020-04-16 10:19:04
15 i 2020-04-16 10:39:03
16 i 2020-04-16 10:44:03
17 i 2020-04-16 10:48:51
BB@testogg>
-- 测试在抽取进程中新增加一个表 t2 ,使用原有的表
BB@test>select count(*) from t2;
COUNT(*)
----------
1
BB@test>desc t2
Name Null? Type
----------------------------------------- -------- ----------------------------
ID NOT NULL NUMBER
NAME VARCHAR2(4)
BB@test>
--源端抽取进程添加 bb.t1,pump进程添加 ,然后重启extract 进程
extdb1
table bb.t2;
pumdb1
table bb.t2;
stop extract *
start extract *
add trandata bb.t2
-- 目标端添加 replicat,并重启
repdb2
map bb.t2,target bb.t2;
stop replicat repdb2
start replicat repdb2
-- 查看scn 并导出
BB@test>select sysdate,current_scn from v$database;
SYSDATE CURRENT_SCN
------------------- -----------
2020-04-16 11:30:57 1360471
BB@test>
expdp bb/oracle directory=DUMP dumpfile=t2.dmp tables=t2 FLASHBACK_SCN=1360471
-- 目标端导入
impdp "'/as sysdba'" directory=DUMP dumpfile=t2.dmp
-- 验证 ,表t2 同步过去了。
BB@test>insert into t2 values(2,'b');
1 row created.
BB@test>commit;
Commit complete.
BB@test>select * from t2;
ID NAME
---------- ----
2 b
1 a
BB@test>
BB@testogg>select * from t2;
ID NAME
---------- ------------
1 a
2 b
BB@testogg>
-- 验证原来的表t1,没有影响 。进程中添加表完毕 (注意这里有sysdate,目标端被解析成了sysdate函数,而不是具体的日期)。
BB@test>select * from t1;
ID NAME TIME
---------- ---- -------------------
14 i 2020-04-16 10:19:04
15 i 2020-04-16 10:39:03
16 i 2020-04-16 10:44:03
17 i 2020-04-16 10:48:51
18 i 2020-04-16 10:53:54
24 i 2020-04-16 11:23:56
19 i 2020-04-16 10:58:54
20 i 2020-04-16 11:03:54
21 i 2020-04-16 11:08:55
22 i 2020-04-16 11:13:55
23 i 2020-04-16 11:18:55
ID NAME TIME
---------- ---- -------------------
25 i 2020-04-16 11:28:56
26 i 2020-04-16 11:33:56
13 rows selected.
BB@test>
BB@testogg>select * from t1;
ID NAME TIME
---------- ------------ -------------------
14 i 2020-04-16 10:19:04
15 i 2020-04-16 10:39:03
16 i 2020-04-16 10:44:03
17 i 2020-04-16 10:48:51
18 i 2020-04-16 10:53:54
19 i 2020-04-16 10:58:54
20 i 2020-04-16 11:03:54
21 i 2020-04-16 11:08:55
22 i 2020-04-16 11:13:55
23 i 2020-04-16 11:18:55
24 i 2020-04-16 11:23:56
ID NAME TIME
---------- ------------ -------------------
25 i 2020-04-16 11:28:56
26 i 2020-04-16 11:33:56
13 rows selected.
BB@testogg>
-- 关于job为什么在目标端没有生成(ogg没有把job同步到目标端)。原因是job是存放在sys.job这个视图里面的,对比下源端和目标端这个视图中的记录,就明白了。
BB@test>select count(*) from sys.job$;
COUNT(*)
----------
4
BB@test>
BB@testogg>select count(*) from sys.job$;
COUNT(*)
----------
3
BB@testogg>
END
最后
以上就是怡然音响为你收集整理的ogg中同步sequence及在进程中新增加要同步的表的全部内容,希望文章能够帮你解决ogg中同步sequence及在进程中新增加要同步的表所遇到的程序开发问题。
如果觉得靠谱客网站的内容还不错,欢迎将靠谱客网站推荐给程序员好友。
发表评论 取消回复