NinGoo.net --- Oracle DBA|MySQL DBA|数据库管理,架构,监控与性能优化

    Oracle10gR2 Streams(四)全库复制之二

    上一篇中展示了使用pre_instantiation_setup/post_instantiation_setup结合rman做初始化的方式实现全库复制的过程,可以说是非常的简单。本例将使用maintain_global来配置一个单向的远程捕获的全库复制。Maintain_global使用expdp/impdp来进行初始化,所以需要目标库已经存在。如果源库比较大,采用data pump初始化可能需要比较长的时间。

    源库:ning.test
    目标库:dest.test

    一、配置directory

    因为是使用expdp/impdp来执行初始化,所以需要为expdp/impdp创建响应的directory。当然这不是必须的,data pump可以直接通过网络执行导入。

    STRMADM@ning>create directory dir_source as 'f:\oracle\source';

    Directory created.

    STRMADM@dest>create directory dir_dest as 'f:\oracle\dest';

    Directory created.

    [继续阅读全文]

    Oracle10gR2 Streams(三)全库复制之一

    在Oracle10gR2中,配置全库复制有两种方式,都是使用dbms_streams_adm中的过程来配置:

    一种是pre_instantiation_setup/post_instantiation_setup结合rman来做初始化;另外一种方式是通过maintain_global结合expdp/impdp来做初始化。这一篇展示第一种配置方式,下一篇再来试验第二种方式。

    pre_instantiation_setup/post_instantiation_setup这种方式只能配置本地捕获的全库复制,采用rman的duplicate来进行目标库的初始化,所以一开始目标库是不存在的。这两个过程都在源库中执行。

    源库:ning.test
    目标库:dest.test

    一、执行pre_instantiation_setup

    STRMADM@ning>DECLARE
      2    empty_tbs  DBMS_STREAMS_TABLESPACE_ADM.TABLESPACE_SET;
      3  BEGIN
      4    DBMS_STREAMS_ADM.PRE_INSTANTIATION_SETUP(
      5      maintain_mode        => 'GLOBAL',
      6      tablespace_names     => empty_tbs,
      7      source_database      => 'ning.test',
      8      destination_database => 'dest.test',
      9      perform_actions      => true,
     10      bi_directional       => true,
     11      include_ddl          => true,
     12      start_processes      => true,
     13      exclude_schemas      => NULL,
     14      exclude_flags        => DBMS_STREAMS_ADM.EXCLUDE_FLAGS_UNSUPPORTED +
     15                              DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DML +
     16                              DBMS_STREAMS_ADM.EXCLUDE_FLAGS_DDL);
     17  END;
     18  /

    PL/SQL procedure successfully completed.

    [继续阅读全文]

    Oracle10gR2 Streams(二)准备复制环境

    这个系列后续的几篇将具体的演示各种复制的实际配置,配置复制前需要做一些准备工作,主要有四个方面:

    一、源数据库置于归档模式

    当然,如果是双向复制,则每个库都是源库,都需要处于归档模式

    SYS@ning>archive log list
    Database log mode              Archive Mode
    Automatic archival             Enabled
    Archive destination            F:\oracle\arch\ning
    Oldest online log sequence     192
    Next log sequence to archive   194
    Current log sequence           194

    [继续阅读全文]

    Oracle10gR2 Streams(一)概念与原理

    打算写一个系列介绍下Oracle10gR2的streams,这里是第一篇,主要简单介绍下概念和原理。虽然streams号称可以支持异构数据库间的复制,但这个系列只涉及oracle数据库之间的复制问题,除非特别提及,这里的streams都是指10gR2版本的streams。

    Oracle从9i开始推出streams,用于提供灵活的复制和容灾解决方案。但是9i的streams配置相当的麻烦,少说也有十几个步骤,还容易出错。10gR2则将整个配置过程封装在几个简单的PL/SQL过程中,使得配置过程大大的简化。但是实际的配置步骤还是一样的,Oracle只是利用这些PL/SQL过程先生成对应的脚本,然后再执行脚本进行配置。这个过程可以全自动完成,也可以先将脚本生成到某个指定的目录,我们根据需要修改脚本,然后再执行脚本进行配置,这样就灵活又方便。

    Streams的原理其实很简单,通过logmnr技术从oracle的log中解析出数据,然后传递到目标库并应用,从而将源库的数据复制到目标库。当然,复制可以是双向的,也可以是单向的。双向复制还需要考虑数据冲突的问题。而多源复制其实是双向复制的基础上衍生而来的。

    整个的复制过程可以分成三个步骤:捕获(capture),传播(propagation)和应用(apply),利用高级队列(advance queue)来将这三个步骤的数据串起来,通过在步骤中定义不同的规则(rule)来控制需要复制的数据。复制可以基于全库,基于表空间,基于用户或者基于表,提供了相当大的灵活性。

    捕获进程可以直接在源库捕获日志,也可以先将日志(归档日志或者联机日志)传递另外的库中进行捕获,这就是本地捕获(local capture)和异地捕获(downstream capture)。对于异地捕获,根据是传递归档日志还是联机日志,可以分为普通的异地捕获和实时异地捕获。日志的传递其实和DataGuard中是一样的机制。Oracle11g的streams还提供了同步捕获,这里暂时不涉及了。

    [继续阅读全文]


    常用标签:

    最新评论 | Recent comments