测试环境:
Version 11.2.1.0.24 18876493 OGGCORE_11.2.1.0.0OGGBP_PLATFORMS_140623.2214_FBO
Solaris, sparc, 64bit (optimized), Oracle 11g on Jun 25 2014 04:55:01
对比两种创建方式
使用create table as 手动创建的表 方式
create table TTT.ogg_test01 (id number,name varchar2(32));
insert into TTT.ogg_test01 values (1,'aaa');
insert into TTT.ogg_test01 values (2,'bbb');
commit;
create table TTT.ogg_test02 as select * from TTT.ogg_test01;
insert into TTT.ogg_test02 values (3,'ccc');
commit;
update TTT.ogg_test02 set name='DDD' where id=2;
commit;
delete from TTT.ogg_test02;
commit;
drop table TTT.ogg_test02 purge;
成功!
使用create table insert 手动创建的表 方式
drop table TTT.ogg_test01 purge;
create table TTT.ogg_test01 (id number,name varchar2(32));
insert into TTT.ogg_test01 values (1,'aaa');
insert into TTT.ogg_test01 values (2,'bbb');
commit;
update TTT.ogg_test01 set name='CCC' where id=2;
commit;
delete from TTT.ogg_test01 ;
commit;
成功!
使用create table as 系统自身的表
create table TTT.ogg_test03 as select username,user_id from dba_users order by 2;
insert into TTT.ogg_test03 values (118,'LLL');
commit;
update TTT.ogg_test03 set name='DDD' where id=118;
commit;
delete from TTT.ogg_test03;
commit;
drop table TTT.ogg_test03 purge;
这种测试方法是不成立的,所以才会造成replicat进程abend!
因为在源端 select username,user_id from dba_users order by 2;
与备端select username,user_id from dba_users order by 2;的结果并不一致!,不可以想当然哦?!
DDL在ogg11g中仍然是使用DDL trigger转化为DML来实现的,因此传递到备端的是整句的sql语句!
本文在Oracle 11g环境下测试了使用`create table as`和传统方式创建表的区别,探讨了在GoldenGate (OGG)中这两种方式的影响。通过示例展示了`create table as select`在不同场景下的操作,强调了当源端和备端数据不一致时,可能导致replicat进程异常。OGG中的DDL触发器将DDL语句转化为DML,因此原句SQL会传递到备端,提醒读者注意数据一致性。
681

被折叠的 条评论
为什么被折叠?



