签到成功

知道了

CNDBA社区CNDBA社区

Oracle goldengate复制@range 作用详解:

2017-12-14 09:57 5352 0 原创 goldengate
作者: Anshen

Oracle goldengate复制@range 作用详解:
使用该@RANGE函数跨两个或更多Oracle GoldenGate进程划分任何表的行。它可以用来增加大量访问量大的表的吞吐量,也可以用来将数据划分成集合以分发到不同的目的地。FILTER在a TABLE或者MAP语句的子句中指定每个范围。http://www.cndba.cn/redhat/article/2477

http://www.cndba.cn/redhat/article/2477

@RANGE是安全和可扩展的。它保证了数据的完整性,保证同一行总是由同一个进程组来处理。为确保行不会将分区转移到另一个进程组,并且DML按照正确的顺序执行,@RANGE在进行运行期间,基于分区的列不得更改。对分区列的更新可能会导致“找不到行”错误或唯一约束错误。

@RANGE计算输入中指定的列的哈希值。如果没有指定列,则使用or 语句的KEYCOLS子句来确定要散列的列(如果存在子句)。否则,使用主键列。TABLEMAPKEYCOLShttp://www.cndba.cn/redhat/article/2477

Oracle GoldenGate会调整总数范围,以便在指定范围内优化均匀分布。

由于可以为此函数指定任何列,因此必须将具有相互约束约束的表中的行组合到同一个进程或路径中,以保持参照完整性。

http://www.cndba.cn/redhat/article/2477
http://www.cndba.cn/redhat/article/2477

注意:
使用Extract来计算范围比使用Replicat更有效。在目标侧计算范围需要Replicat读取整个轨迹以查找符合每个范围规格的数据。
句法

@RANGE(range,total_ranges [,column ] [,column ] [,…])
range
分配给指定进程或跟踪的范围。有效值是1,2,3,等等,具有最大值是由下式定义的值total_ranges。http://www.cndba.cn/redhat/article/2477

total_ranges
分配的范围总数。例如,要将数据分成三组,请使用该值3。

column
范围分配所基于的列的名称。这个参数是可选的。如果不使用,则Oracle GoldenGate根据表的主键分配范围。

例子

例1
在以下示例中,基于ID源acct表的列将复制工作负载分成三个范围(在三个Replicat进程之间)。

(复制组1参数文件)http://www.cndba.cn/redhat/article/2477

MAP sales.acct,TARGET sales.acct,FILTER(@RANGE(1,3,ID));
(复制组2参数文件)

MAP sales.acct,TARGET sales.acct,FILTER(@RANGE(2,3,ID));
(复制组3参数文件)

MAP sales.acct,TARGET sales.acct,FILTER(@RANGE(3,3,ID));
例2
在下面的例子中,一个Extract进程将处理负载分解成两条路径。由于没有定义范围计算的列,因此Oracle GoldenGate将使用主键列。

RMTTRAIL / ggs / dirdat / aa
TABLE fin.account,FILTER(@RANGE(1,2));
RMTTRAIL / ggs / dirdat / bb
TABLE fin.account,FILTER(@RANGE(2,2));
例3
在以下示例中,两个表具有基于order_ID列的相对操作。该order_master表的key order_ID,和order_detail表的key order_ID和item_number。因为密钥order_ID建立了相关性,所以在@RANGE两个表的过滤器中使用它来保持参照完整性。负载分成两个范围。

(参数文件#1)

http://www.cndba.cn/redhat/article/2477
http://www.cndba.cn/redhat/article/2477

MAP sales.order_master,TARGET sales.order_master,
FILTER(@RANGE(1,2,order_ID));
MAP sales.order_detail,TARGET sales.order_detail,
FILTER(@RANGE(1,2,order_ID));
(参数文件#2)

MAP sales.order_master,TARGET sales.order_master,
FILTER(@RANGE(2,2,order_ID));
MAP sales.order_detail,TARGET sales.order_detail,
FILTER(@RANGE(2,2,order_ID));

http://www.cndba.cn/redhat/article/2477

版权声明:本文为博主原创文章,未经博主允许不得转载。

Oracle goldengate复制@range 作用详解:

用户评论
* 以下用户言论只代表其个人观点,不代表CNDBA社区的观点或立场
Anshen

Anshen

关注

成功不是将来才有的,而是从决定去做的那一刻起,持续累积而成。

  • 69
    原创
  • 0
    翻译
  • 5
    转载
  • 8
    评论
  • 访问:287142次
  • 积分:326
  • 等级:中级会员
  • 排名:第13名
精华文章
    最新问题
    查看更多+
    热门文章
      热门用户
      推荐用户
        Copyright © 2016 All Rights Reserved. Powered by CNDBA · 皖ICP备2022006297号-1·

        QQ交流群

        注册联系QQ