4

最近我正在使用Tungsten Replicator在异构数据库之间进行复制。我们有一个 mysql master 和一个 oracle slave。根据文档,这样的设置应该可以工作。我正在使用 tungsten-replicator-2.0.5。我打电话

$TUNGSTEN_HOME/tools/configure \
    --verbose \
    --home-directory=$INSTALL_HOME \
    --cluster-hosts=$MA_HOST,$SL_HOST \

在主节点上用于在两个节点上创建基本安装。注意:由于异构设置,使用安装程序(推荐)失败,因为安装程序无法在从节点上找到 mysql 实例。通过在 conf 目录中添加 static-$SERVICENAME.properties 并修改 conf/services.properties 来配置复制器实例(replicator.host=$HOSTNAME,replicator.masterListenPortStart=12112,replicator.rmi_port=20000)。

由于 SQL 语句中缺少“时间戳”关键字,在 tungsten 模式中针对 trep_commit_seqno 发出更新语句时,启动复制器会导致 ORA-01850。只是为了克服这个错误,我将 update_timestamp 和 extract_timestamp 的数据类型更改为 varchar。复制器现在正在启动并在复制的地方进行一些简单的插入,但是当测试脚本发出

DROP TABLE IF EXISTS table1;

由于“IF EXISTS”子句,复制因 ORA-00933 而失败。我不确定这是否是我的配置错误,或者 tungsten 总体上是否存在这两种产品之间 DDL 语句差异的问题。有人用钨成功地建立了类似的复制吗?

4

2 回答 2

2

Tungsten 文档有一些有用的指导。特别是,“高级操作原理”中的这一点是相关的:“此外,除了最简单的 CREATE TABLE 表达式之外,DDL 语句很少可移植。”。在您的情况下,DROP TABLE IF EXISTS table1;不是有效的 Oracle DDL。

在这里阅读

于 2011-11-14T11:16:08.273 回答
2

对于任何感兴趣的人:到目前为止,Tungsten 没有在异构环境中执行任何 ddl 语句的转换(如 MithunSasidharan 所写)。现在我编写了一个自定义过滤器,它使用正则表达式跳过 ddl 语句。为了同步模式定义,我们将使用Apache DdlUtils,它非常适合在 mysql 和 oracle 之间转换模式定义。我认为它同样适用于其他供应商。谢谢。

于 2011-11-15T16:55:00.523 回答