TimesTen 数据库复制学习:3. 配置Classic Replication单表复制

本文为一个动手实验,配置传统复制模式中的单表复制(非复制整库),配置2个数据库, master和一个subscriber。拓扑如下:

为简化,master和subscriber位于同一主机。同时,为和上一个实验保持一致,master和subscriber的DSN分别为master1和subscriber1。

创建DSN

[ODBC Data Sources]

master1=TimesTen 11.2.2 Driver

subscriber1=TimesTen 11.2.2 Driver

[master1]

Driver=/home/oracle/TimesTen/tt1122/lib/libtten.so

DataStore=/tmp/master1

DatabaseCharacterSet=AL32UTF8

ConnectionCharacterSet=AL32UTF8

[subscriber1]

Driver=/home/oracle/TimesTen/tt1122/lib/libtten.so

DataStore=/tmp/subscriber1

DatabaseCharacterSet=AL32UTF8

ConnectionCharacterSet=AL32UTF8

在master中创建表和复制

$ ttisql master1

Command>
  CREATE TABLE employees
  ( employee_id NUMBER(6) PRIMARY KEY,
  first_name VARCHAR2(20),
  last_name VARCHAR2(25) NOT NULL,
  email VARCHAR2(25) NOT NULL UNIQUE,
  phone_number VARCHAR2(20),
  hire_date DATE NOT NULL,
  job_id VARCHAR2(10) NOT NULL,
  salary NUMBER(8,2),
  commission_pct NUMBER(2,2),
  manager_id NUMBER(6),
  department_id NUMBER(4)
  ) ; 

  CREATE REPLICATION tablerep
  ELEMENT e TABLE employees
  MASTER master1
  SUBSCRIBER subscriber1;

Command> repschemes;

Replication Scheme ORACLE.TABLEREP:

  Element: E
  Type: Table ORACLE.EMPLOYEES
  Master Store: MASTER1 on TIMESTEN-HOL Transmit Durable
  Subscriber Store: SUBSCRIBER1 on TIMESTEN-HOL 

  Store: MASTER1 on TIMESTEN-HOL
    Port: (auto)
    Log Fail Threshold: (none)
    Retry Timeout: 120 seconds
    Compress Traffic: Disabled

  Store: SUBSCRIBER1 on TIMESTEN-HOL
    Port: (auto)
    Log Fail Threshold: (none)
    Retry Timeout: 120 seconds
    Compress Traffic: Disabled

1 replication scheme found.

CREATE REPLICATION创建一个classic replication scheme。

ELEMENT可以是整库,也可以是一张表

在subscriber上创建表和复制

执行的步骤与上一步完全相同

$ ttisql subscriber1
Command>
  CREATE TABLE employees
  ( employee_id NUMBER(6) PRIMARY KEY,
  first_name VARCHAR2(20),
  last_name VARCHAR2(25) NOT NULL,
  email VARCHAR2(25) NOT NULL UNIQUE,
  phone_number VARCHAR2(20),
  hire_date DATE NOT NULL,
  job_id VARCHAR2(10) NOT NULL,
  salary NUMBER(8,2),
  commission_pct NUMBER(2,2),
  manager_id NUMBER(6),
  department_id NUMBER(4)
  ) ; 

  CREATE REPLICATION tablerep
  ELEMENT e TABLE employees
  MASTER master1
  SUBSCRIBER subscriber1;
  ```

## 在主库和复制库中都启动复制代理

Command> call ttrepstart;

Command> call ttrepstateget;

< IDLE, NO GRID >

1 row found.


两个数据库的状态都是IDLE,因为其不是ASP

## 在master库中插入数据
注意,由于我们定义的是单向复制,因此subscriber是只读的,如果插入数据会报错:

8151: ORACLE.EMPLOYEES’s replication role disallows the requested operation

The command failed.


我们仍回到主库中插入数据, 并确认数据已成功复制到subscriber:

$ ttisql master1

Command>

INSERT INTO employees VALUES

( 202,

‘Pat’,

‘Fay’,

‘PFAY’,

‘603-123-7777’,

TO_DATE(‘17-AUG-1997’, ‘dd-MON-yyyy’),

‘MK_REP’,

6000,

NULL,

201,

20

);

$ ttisql -v1 subscriber1

Command> select * from employees;

< 202, Pat, Fay, PFAY, 603-123-7777, 1997-08-17 00:00:00, MK_REP, 6000, , 201, 20 >


## 监控复制环境

Command> repschemes;

Replication Scheme ORACLE.TABLEREP:

Element: E

Type: Table ORACLE.EMPLOYEES

Master Store: MASTER1 on TIMESTEN-HOL Transmit Durable

Subscriber Store: SUBSCRIBER1 on TIMESTEN-HOL

Store: MASTER1 on TIMESTEN-HOL

Port: (auto)

Log Fail Threshold: (none)

Retry Timeout: 120 seconds

Compress Traffic: Disabled

Store: SUBSCRIBER1 on TIMESTEN-HOL

Port: (auto)

Log Fail Threshold: (none)

Retry Timeout: 120 seconds

Compress Traffic: Disabled


使用ttstatus监控数据库状态, 可以看到复制代理已经启动

$ ttstatus

TimesTen status report as of Mon May 30 17:49:26 2016

Daemon pid 2652 port 53392 instance tt1122

TimesTen server pid 2661 started on port 53393

Data store /tmp/subscriber1

There are 15 connections to the data store

Shared Memory KEY 0x0200c902 ID 2392080

PL/SQL Memory KEY 0x0300c902 ID 2424849 Address 0x7fa0000000

Type PID Context Connection Name ConnID

Replication 4006 0x0000000004017480 LOGFORCE:1089546560 129

Replication 4006 0x0000000004080e60 REPHOLD:1104329024 130

Replication 4006 0x00000000040d5a90 REPLISTENER:1085208896 131

Replication 4006 0x0000000004161f20 RECEIVER:1098897728 128

Subdaemon 2656 0x000000000157f360 Manager 142

Subdaemon 2656 0x00000000015f6430 Rollback 141

Subdaemon 2656 0x00000000016d5c80 Flusher 140

Subdaemon 2656 0x000000000175d610 HistGC 139

Subdaemon 2656 0x00000000017b2240 Deadlock Detector 138

Subdaemon 2656 0x0000000001806e70 AsyncMV 137

Subdaemon 2656 0x000000000185baa0 IndexGC 136

Subdaemon 2656 0x00000000018b06d0 Aging 135

Subdaemon 2656 0x0000000001905300 Log Marker 134

Subdaemon 2656 0x0000000001959f30 Checkpoint 133

Subdaemon 2656 0x00000000019aeb60 Monitor 132

Replication policy : Manual

Replication agent is running.

Cache Agent policy : Manual

PL/SQL enabled.

Data store /tmp/master1

There are 15 connections to the data store

Shared Memory KEY 0x0600ce42 ID 2457618

PL/SQL Memory KEY 0x0700ce42 ID 2490387 Address 0x7fa0000000

Type PID Context Connection Name ConnID

Replication 4034 0x000000000334d430 LOGFORCE:1101445440 129

Replication 4034 0x0000000003393530 REPLISTENER:1107417408 131

Replication 4034 0x00000000033b6ea0 REPHOLD:1093810496 130

Replication 4034 0x00000000034acb10 TRANSMITTER(M):1110567232 128

Subdaemon 2658 0x00000000006fe360 Manager 142

Subdaemon 2658 0x0000000000775430 Rollback 141

Subdaemon 2658 0x000000000083ce50 Flusher 140

Subdaemon 2658 0x0000000000851b60 Monitor 138

Subdaemon 2658 0x00000000008a69b0 Checkpoint 134

Subdaemon 2658 0x00000000008bb5a0 Aging 137

Subdaemon 2658 0x00000000008d0190 Log Marker 136

Subdaemon 2658 0x00000000008e4ea0 AsyncMV 135

Subdaemon 2658 0x000000000097a070 IndexGC 133

Subdaemon 2658 0x00007f7114021670 HistGC 132

Subdaemon 2658 0x00007f711c0008c0 Deadlock Detector 139

Replication policy : Manual

Replication agent is running.

Cache Agent policy : Manual

PL/SQL enabled.

Accessible by group oracle

End of report

$ ttrepadmin -showconfig master1

Self host “TIMESTEN-HOL”, port auto, name “MASTER1”, LSN 0/16414984, timeout 120, threshold 0

List of subscribers

Peer name Host name Port State Proto Track



SUBSCRIBER1 TIMESTEN-HOL Auto Start 36 0

Last Msg Sent Last Msg Recv Latency TPS RecordsPS



00:00:02 - -1.00 -1 -1

List of objects and subscriptions

Table details

Table : ORACLE.EMPLOYEES Timestamp updates : -

Master Name Subscriber name

———– —————

MASTER1 SUBSCRIBER1

$ ttrepadmin -showstatus master1

Replication Agent Status as of: 2016-05-30 18:01:18

DSN : master1

Process ID : 4034 (Started)

Replication Agent Policy : manual

Host : TIMESTEN-HOL

RepListener Port : 44907 (AUTO)

Last write LSN : 0.16462088

Last LSN forced to disk : 0.16461824

Replication hold LSN : 0.16455944

Replication Peers:

Name : SUBSCRIBER1

Host : TIMESTEN-HOL

Port : 50197 (AUTO) (Connected)

Replication State : STARTED

Communication Protocol : 36

TRANSMITTER thread(s):

For : SUBSCRIBER1 (track 0)

Start/Restart count : 1

Send LSN : 0.16460040

Transactions sent : 1

Total packets sent : 183

Tick packets sent : 176

MIN sent packet size : 64

MAX sent packet size : 1691

AVG sent packet size : 73

Last packet sent at : 18:01:13

Total Packets received: 182

MIN rcvd packet size : 64

MAX rcvd packet size : 120

AVG rcvd packet size : 118

Last packet rcvd’d at : 18:01:13

TXNs Allocated : 2

TXNs In Use : 0

ACTs Allocated : 1

ACTs In Use : 0

ACTs Data Allocated : 0

Most recent errors (max 5):

TT16025 in repagent.c (line 1227) at 17:47:40 on 05-30-2016

TT16285 in transmitter.c (line 1020) at 17:47:40 on 05-30-2016

TT16999 in transmitter.c (line 1340) at 17:47:40 on 05-30-2016

$ ttRepAdmin -log master1

1 log file retained by replication

[[email protected] ~]$ ttRepAdmin -self -list master1

Self host “TIMESTEN-HOL”, port auto, name “MASTER1”, LSN 0/16507144

Operation successful

[[email protected] ~]$ ttRepAdmin -self -list subscriber1

Self host “TIMESTEN-HOL”, port auto, name “SUBSCRIBER1”, LSN -1/-1

Operation successful

[[email protected] ~]$ ttrepadmin -receiver -list master1

Peer name Host name Port State Proto Track



SUBSCRIBER1 TIMESTEN-HOL Auto Start 36 0

Last Msg Sent Last Msg Recv Latency TPS RecordsPS Logs



00:00:04 - -1.00 -1 -1 1

$ ttRepAdmin -wait -name master1 subscriber1

Replication has caught up after 0 seconds

$ ttRepAdmin -wait -name subscriber1 master1

Timed out after 0 seconds waiting for replication to catch up

[[email protected] ~]ttRepAdmin?bookmarkmaster1ReplicationholdLSN……0/16855304LastwrittenLSN……….0/16865544LastLSNforcedtodisk…0/16865280[oracle@timesten?hol ] ttRepAdmin -bookmark master1

Replication hold LSN …… 0/16865544

Last written LSN ………. 0/16869640

Last LSN forced to disk … 0/16869376

[[email protected] ~]$ ttRepAdmin -bookmark master1

Replication hold LSN …… 0/16865544

Last written LSN ………. 0/16871688

Last LSN forced to disk … 0/16871424


## 清理复制环境
包括停止复制代理,删除复制关系和删除表。

在所有数据库中执行:

CALL ttRepStop;

DROP REPLICATION tablerep;

DROP TABLE employees;


最后删除数据库:

ttdestroymasterds ttdestroy subscriberds

“`

总结

  • TimesTen的Classic Replication(传统复制)是以element为基础复制单元的,element既可以是单个对象如表,也可以是整个库,如datastore。
  • 传统复制可以是单向的,也可以是双向的。单向复制时,subscriber端只读;双向复制时,两个库都可以写
  • 传统复制需要在两个库中建立相同的schema。而在ASP复制中,只需在master中建schema,然后克隆出standby和subscriber。
  • 复制的表需要主键和唯一索引,这和缓存组的要求是一样的。
  • 复制中每一个库都需要启动一个对应的复制代理
时间: 2024-10-05 13:40:37

TimesTen 数据库复制学习:3. 配置Classic Replication单表复制的相关文章

TimesTen 数据库复制学习:6. 利用STORE关键字设定复制网络传输的属性

利用STORE关键字,可以在CREATE ACTIVE STANDBY PAIR, ALTER ACTIVE STANDBY PAIR, CREATE REPLICATION, 和 ALTER REPLICATION 设置复制的属性,如超时,压缩,commit行为,表定义检查,return service,对于classic复制,还可以设置表一级的数据冲突 设定return service的超时 缺省的超时为10秒,可用RETURN WAIT TIME设定超时,例如: Command> ALTE

TimesTen 数据库复制学习:16. 一个缓存组,复制,客户端自动切换的串烧实验

简介 这时一个集只读,AWT缓存组,Active Standby 复制,client auto failover为一体的集成实验. 整个过程来至于Doc ID 1359840.1, 本文基于此文档按照自己的环境重做了一遍,并更正了其中的小错误,增加了自己的理解. 本文省略了在Oracle端设置缓存组的过程,可以参见前面的文章. 搭建的环境为虚拟机 timesten-hol 上安装了两个TimesTen实例, 实例名分别为tt1122和ttnew, 分别驻留在端口53392(缺省)和55555 t

TimesTen 数据库复制学习:11. ASP带缓存组复制的几种固定架构模式

概述 对于带缓存组的复制,推荐的复制策略是 Active-Standby (A/S) pair.因为其复制整个库,并且复制和恢复都比较简单和直接,而且错误切换和恢复都是自动的. 带AWT缓存组的ASP复制 - 单站点 此种复制不支持灾备 注意数据的流向 带只读缓存组的ASP复制 注意数据的流向 带AWT缓存组的ASP复制 - 多站点 此种复制支持灾备 从standby到subscriber的克隆使用特殊的ttRepadmin复制选项 参考 HOWTO : Understand Combining

数据库 --- 37 行(记录)操作 单表查询

一.插入数据  inset ①  insert into 表名(字段1,字段2,...)values(值1,值2,...); 指定字段插入数据,插入的值要和你之前的字段相匹配 ②  insert  into 表名  values (值1,值2,....); 不指定字段时,就按照默认的几个字段来插入数据 ③插入多条记录(用逗号分隔) insert into 表名 values (值1,值2,....), (值1,值2,....), (值1,值2,....); ④将查询结果插入新表(字段要对应好)

TimesTen 数据库复制学习:1. TimesTen复制概述

本文为TimesTen数据库复制系列的第一篇. 什么是复制 复制就是在多个数据库中存在多份数据拷贝,对性能影响最小的同时保证数据高可用,除了数据恢复外,还可以均衡工作负载,以最大化性能和实现滚动升级和维护 TT复制的实现是在master和subscriber数据库都有复制代理,一个负责读,一个负责加载,数据在rep agent间传递 TT推荐的方法是ASP(active standby pair),TT支持复制整库,部分表,cache group, sequence等.ASP是唯一支持复制cac

GoldenGate复制单表开并行

最近有几项业务下线,需要从一张表中删除6.8亿多条数据.想办法把数据删除掉了,但对应的ogg灾备端复制时有了的延迟,而且延迟的时间起来越长. 对于表太多造成的延迟可以把所有表分为多个组来做复制,于是想复制进程是否可以对单表复制开并行.上网查到了相关的资料,可以使用@RANGE函数对单表作表内的拆分,通过对表上主键列作hash算法将该表上发生的变更均分到多个replicat上来降低单个replicat组件的负载. 动手实验一下: ogg搭建过程不再重复,从网上就可以查到. 实验过程:模拟在源端对表

hibernate学习---单表查询

我们都知道SQL是非常强大的,为什么这么说呢?相信学过数据库原理的同学们都深有体会,SQL语句变化无穷,好毫不夸张的说可以实现任意符合我们需要的数据库操作,既然前面讲到Hibernate非常强大,所以Hibernate也是能够实现SQL的一切数据库操作. 在SQL中,单表查询是最常用的语句,同理Hibernate最常用到的也是查询语句,所以今天就来讲讲Hibernate的单表查询: 今天要将的内容分以下几点: 查询所有 查询结果排序 为查询参数动态赋值 分页查询 模糊查询 唯一性查询 聚合函数查

TimesTen 数据库复制学习:10. 定义classic复制

设计高可用系统 复制的目标为: 1. 提供一个或多个复制数据库,保证数据可以为应用所用 2. 提供复制数据库用于恢复 3. 负载均衡 4. 无中断的软件升级和维护 classic replication scheme支持以下形式: Unidirectional - 这个和ASP有和区别,会切换角色吗 Bidirectional split workload - 双向,属于互备型,两个数据库负责不同的工作负载 Bidirectional distributed workload - 双向,属于双活

TimesTen 数据库复制学习:5. 设定复制网络传输的return service

return service指在复制源和目标之间的同步模式,可以是no return(异步),return receipt(准同步)和return twosafe(全同步). 本文的描述对于active standby和classic replication都适用. 脚本准备 $ cat insert1.sql INSERT INTO employees VALUES ( 202, 'Pat', 'Fay', 'PFAY', '603-123-7777', TO_DATE('17-AUG-199