就我所知 Oracle 的 streams 或者 Quest 的 shareplex 之类的工具。
是分析 Oracle 得 redolog 来找到数据库最近执行的 sql 语句,在响应到
目标复制数据库的。但是有这么几个问题我不知道,这些工具是如何解决的。问题:
1 如果在没有打开 suppliment loggin 的情况下 Oracle 的 redolog 的
update SQL语句是只纪录 ROWID 条件的。如果这句 SQL 语句到目标复制数
据库上当然会无效,我看 Quest 好像说不强制要求打开 suppliment loggin。
这是怎么回事?2 如果遇到 rollback 所产生的 SQL 语句,Oracle 得 redolog 是肯定只纪录
rowid 条件的(无论有没有打开 suppliment loggin),把这句 SQL 放至目
标复制数据库,也应该是无效的。望知道者赐教,这里先谢过。
是分析 Oracle 得 redolog 来找到数据库最近执行的 sql 语句,在响应到
目标复制数据库的。但是有这么几个问题我不知道,这些工具是如何解决的。问题:
1 如果在没有打开 suppliment loggin 的情况下 Oracle 的 redolog 的
update SQL语句是只纪录 ROWID 条件的。如果这句 SQL 语句到目标复制数
据库上当然会无效,我看 Quest 好像说不强制要求打开 suppliment loggin。
这是怎么回事?2 如果遇到 rollback 所产生的 SQL 语句,Oracle 得 redolog 是肯定只纪录
rowid 条件的(无论有没有打开 suppliment loggin),把这句 SQL 放至目
标复制数据库,也应该是无效的。望知道者赐教,这里先谢过。
可以在console中找到这两种方式
我并不是想知道怎么用 oracle 得复制,只是想知道他们实现的原理。
oracle 自己的也好,第三方的也好。可能我对问题的阐述不够明确,我来举例说明吧 有 test1 表结构如下
SQL> desc test1;
名称 是否为空? 类型
------- ---------- --------
ID NUMBER
STR VARCHAR2(20) 执行的 SQL 语句
SQL> insert into test1 (id, str) values(1, 'test1');
SQL> rollback;如此这样后用 LogMnr 分析 redolog 后得知响应得日志为SCN CSCN ROLLBACK SQL_REDO
------- ------- --------- ------------------------
244437 244439 0 insert into "SYSTEM"."TEST1"("ID","STR") values ('1','test1');
244438 244439 1 delete from "SYSTEM"."TEST1" where ROWID = 'AAAHrhAABAAAIRvAAA';
244439 244439 0 rollback;由此可见其实 rollback 是会产生一个相应的反操作 sql 语句的。然而这个 sql 语句只
可能纪录 rowid 条件(无论开不开 supplement logging)。那样的话如何将这句相应至
目标数据库,那里的 rowid 因该肯定不一样的。quest 的那个一点也摸不到边,不知道他是怎么干的。oralce 的 streams 因为他要设一个
队列,所以怀疑,队列中回滚得 SQL 语句撤销的。但这好像又有问题了,如果队列太小,回滚太多
是不是两边数据就不一致了?
(注:以上的测试环境为 Win2000 Server SP4, Oracle 9.0 和 Linux 2.4.18, Oracle 9.2)