TimesTen 数据库复制学习:15. 监控复制系统

复制系统的监控主要通过ttStatus 和 ttRepAdmin命令,也可以从系统表中得到信息。

以下的输出,基于cachedb1为复制源,cachedb2为复制目标

显示复制代理的状态

ttstatus显示复制代理状态

注意Replication agent is running. 这行

$ ttstatus
TimesTen status report as of Wed Jun 29 18:04:26 2016

Daemon pid 2644 port 53392 instance tt1122
TimesTen server pid 2653 started on port 53393
------------------------------------------------------------------------
Data store /home/oracle/TimesTen/tt1122/info/DemoDataStore/repdb1_1122
There are no connections to the data store
Replication policy  : Manual
Cache Agent policy  : Manual
PL/SQL enabled.
------------------------------------------------------------------------
Data store /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1
There are 17 connections to the data store
Shared Memory KEY 0x2c00c901 ID 3375121
PL/SQL Memory KEY 0x2d00c901 ID 3407890 Address 0x7fa0000000
Type            PID     Context             Connection Name              ConnID
Replication     6382    0x00000000035ab270  REPHOLD:1109059904              130
Replication     6382    0x00000000036000c0  REPLISTENER:1093531968          128
Replication     6382    0x000000000361e360  TRANSMITTER(M):1099831616       127
Replication     6382    0x0000000003672f90  LOGFORCE:1096681792             126
Replication     6382    0x00007fb7480009e0  FAILOVER:1103178048             131
Replication     6382    0x00007fb7480155d0  XLA_PARENT:1081403712           129
Subdaemon       2649    0x0000000000e82360  Manager                         142
Subdaemon       2649    0x0000000000ef9430  Rollback                        141
Subdaemon       2649    0x0000000000fcef50  Flusher                         140
Subdaemon       2649    0x0000000001008980  Checkpoint                      132
Subdaemon       2649    0x000000000101d570  Deadlock Detector               137
Subdaemon       2649    0x00000000010721a0  AsyncMV                         136
Subdaemon       2649    0x00000000010df8d0  IndexGC                         135
Subdaemon       2649    0x0000000001134500  Aging                           134
Subdaemon       2649    0x0000000001189130  Monitor                         133
Subdaemon       2649    0x00000000012b6130  HistGC                          139
Subdaemon       2649    0x00000000013473e0  Log Marker                      138
Replication policy  : Manual
Replication agent is running.
Cache Agent policy  : Manual
PL/SQL enabled.
------------------------------------------------------------------------
Accessible by group oracle
End of report

ttAdmin -query 显示代理启动策略

$ ttAdmin -query cachedb1
......
Replication Agent Policy        : manual
Replication Manually Started    : True
......

使用 ttDataStoreStatus 显示复制代理状态

cachedb1> call ttDataStoreStatus;
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 6422, 000000000064FAD0, application     , 2C00C901, cachedb1                      , 1 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 6382, 00000000035AB270, replication     , 2C00C901, REPHOLD:1109059904            , 130 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 6382, 00000000036000C0, replication     , 2C00C901, REPLISTENER:1093531968        , 128 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 6382, 000000000361E360, replication     , 2C00C901, TRANSMITTER(M):1099831616     , 127 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 6382, 0000000003672F90, replication     , 2C00C901, LOGFORCE:1096681792           , 126 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 6382, 00007FB7480009E0, replication     , 2C00C901, FAILOVER:1103178048           , 131 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 6382, 00007FB7480155D0, replication     , 2C00C901, XLA_PARENT:1081403712         , 129 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 0000000001008980, subdaemon       , 2C00C901, Checkpoint                    , 132 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 000000000101D570, subdaemon       , 2C00C901, Deadlock Detector             , 137 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 00000000010721A0, subdaemon       , 2C00C901, AsyncMV                       , 136 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 00000000010DF8D0, subdaemon       , 2C00C901, IndexGC                       , 135 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 0000000001134500, subdaemon       , 2C00C901, Aging                         , 134 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 0000000001189130, subdaemon       , 2C00C901, Monitor                       , 133 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 00000000012B6130, subdaemon       , 2C00C901, HistGC                        , 139 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 00000000013473E0, subdaemon       , 2C00C901, Log Marker                    , 138 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 0000000000E82360, subdaemon       , 2C00C901, Manager                       , 142 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 0000000000EF9430, subdaemon       , 2C00C901, Rollback                      , 141 >
< /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb1, 2649, 0000000000FCEF50, subdaemon       , 2C00C901, Flusher                       , 140 >

显示master(复制源)数据库信息

可使用ttRepAdmin或查询系统表

$ ttRepAdmin -dsn cachedb1 -self -list
Self host "TIMESTEN-HOL", port 12306, name "CACHEDB1", LSN 3/22901000
Operation successful

其中LSN 3/22901000 表示最老的未传输的日志位于日志文件3,LSN为22901000。

使用系统表可得到类似信息:

cachedb1> SELECT t.host_name, t.rep_port_number, t.tt_store_name
        > FROM ttrep.ttstores t, ttrep.repstores s
        > WHERE t.is_local_store = 0x01
        > AND t.tt_store_id = s.tt_store_id;
< TIMESTEN-HOL, 12306, CACHEDB1 >

显示subscriber(复制目标)数据库信息

ASP正常情况

使用ttRepAdmin

$ ttRepAdmin -dsn cachedb2 -receiver -list
Peer name         Host name                 Port    State  Proto Track
----------------  ------------------------ ------  ------- ----- -----
CACHEDB1          TIMESTEN-HOL              Auto   Start      36     0

Last Msg Sent Last Msg Recv Latency TPS     RecordsPS Logs
------------- ------------- ------- ------- --------- ----
00:00:04      00:00:13        -1.00      -1        -1    1

输出第一行表示复制的定义:cachedb2的源数据库为TIMESTEN-HOL上的CACHEDB1,复制端口自动协商(Auto), 状态Start表示正常。

第二行表示延迟和速率信息。注意Latency,-1表示无延迟。另外Last Msg Sent 和 Last Msg Recv也是很有用的信息。

ttReplicationStatus

cachedb2> call ttReplicationStatus(‘cachedb1‘, ‘timesten-hol‘);
< CACHEDB1, TIMESTEN-HOL, 0, start     , 1, 2, _ACTIVESTANDBY                , TTREP                          >
cachedb2> call ttReplicationStatus(‘cachedb1‘, ‘timesten-hol‘);
< CACHEDB1, TIMESTEN-HOL, 0, start     , 1, 0, _ACTIVESTANDBY                , TTREP
cachedb2> call ttReplicationStatus;
< CACHEDB1, TIMESTEN-HOL, 0, start     , 1, 1, _ACTIVESTANDBY                , TTREP                          >

倒数第3列表示日志滞后,2为2秒,0为无延迟

系统表查询

cachedb1>
SELECT t1.tt_store_name, t1.host_name, t1.rep_port_number,
p.state, p.protocol, p.timesend, p.timerecv, p.latency,
p.tps, p.recspersec, t3.last_log_file - p.sendlsnhigh + 1
  FROM ttrep.reppeers p, ttrep.ttstores t1, ttrep.ttstores t2, sys.monitor t3
  WHERE p.tt_store_id = t1.tt_store_id
    AND t2.is_local_store = 0X01
    AND p.subscriber_id = t2.tt_store_id
    AND p.replication_name = ‘_ACTIVESTANDBY‘
    AND p.replication_owner = ‘TTREP‘
    AND (p.state = 0 OR p.state = 1);
< CACHEDB2, TIMESTEN-HOL, 0, 0, 36, 0, 1467250954, -1.00000000000000, -1, -1, 5 >

此SQL语句不如ttRepAdmin -dsn cachedb2 -receiver -list直观。

说明一下,对于active standby pair,replication_name 固定为_ACTIVESTANDBY,replication owner 固定为TTREP。

显示复制数据库的配置

使用ttisql repschemes

cachedb2> repschemes;

Replication Scheme Active Standby:

  Master Store: CACHEDB1 on TIMESTEN-HOL
  Master Store: CACHEDB2 on TIMESTEN-HOL

  Excluded Tables:
    None

  Excluded Cache Groups:
    None

  Excluded sequences:
    None

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

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

使用ttRepAdmin -showconfig

$ ttRepAdmin -showconfig -dsn cachedb1

Self host "TIMESTEN-HOL", port auto, name "CACHEDB1", LSN 3/31297800, timeout 120, threshold 0

List of subscribers
-------------------

Peer name         Host name                 Port    State  Proto Track
----------------  ------------------------ ------  ------- ----- -----
CACHEDB2          TIMESTEN-HOL              Auto   Start      36     0

Last Msg Sent Last Msg Recv Latency TPS     RecordsPS
------------- ------------- ------- ------- ---------
00:00:04      00:00:08        -1.00      -1        -1 

List of objects and subscriptions
---------------------------------

Table details
-------------
Table : TTHR.A   Timestamp updates : -  

Master Name               Subscriber name
-----------               ---------------
CACHEDB1                  CACHEDB2                

Table details
-------------
Table : TTHR.A   Timestamp updates : -  

Master Name               Subscriber name
-----------               ---------------
CACHEDB2                  CACHEDB1                

Table details
-------------
Table : TTHR.A1   Timestamp updates : -  

Master Name               Subscriber name
-----------               ---------------
CACHEDB1                  CACHEDB2                

Table details
-------------
Table : TTHR.A1   Timestamp updates : -  

Master Name               Subscriber name
-----------               ---------------
CACHEDB2                  CACHEDB1                

Table details
-------------
Table : TTHR.A2   Timestamp updates : -  

Master Name               Subscriber name
-----------               ---------------
CACHEDB1                  CACHEDB2                

Table details
-------------
Table : TTHR.A2   Timestamp updates : -  

Master Name               Subscriber name
-----------               ---------------
CACHEDB2                  CACHEDB1                

Datastore details
-----------------
Master Name               Subscriber name
-----------               ---------------
CACHEDB1                  CACHEDB2                

Datastore details
-----------------
Master Name               Subscriber name
-----------               ---------------
CACHEDB2                  CACHEDB1  

查询系统表

SELECT t.host_name, t.rep_port_number, t.tt_store_name, s.peer_timeout,
s.fail_threshold
  FROM ttrep.ttstores t, ttrep.repstores s
    WHERE t.is_local_store = 0X01
      AND t.tt_store_id = s.tt_store_id;

< TIMESTEN-HOL, 0, CACHEDB1, 120, 0 >

SELECT t1.tt_store_name, t1.host_name, t1.rep_port_number,
       p.state, p.protocol, p.timesend, p.timerecv, p.latency,
       p.tps, p.recspersec, t3.last_log_file - p.sendlsnhigh + 1
  FROM ttrep.reppeers p, ttrep.ttstores t1, ttrep.ttstores t2, sys.monitor t3
    WHERE p.tt_store_id = t2.tt_store_id
      AND t2.is_local_store = 0X01
      AND p.subscriber_id = t1.tt_store_id
      AND (p.state = 0 OR p.state = 1);

< CACHEDB1, TIMESTEN-HOL, 0, 0, 36, 1467270082, 0, -1.00000000000000, -1, -1, 1 >

SELECT ds_obj_owner, DS_OBJ_NAME, t1.tt_store_name,t2.tt_store_name
  FROM ttrep.repelements e, ttrep.repsubscriptions s,
      ttrep.ttstores t1, ttrep.ttstores t2
    WHERE s.element_name = e.element_name
      AND e.master_id = t1.tt_store_id
      AND s.subscriber_id = t2.tt_store_id
    ORDER BY ds_obj_owner, ds_obj_name;

< TTHR                           , A                              , CACHEDB1, CACHEDB2 >
< TTHR                           , A                              , CACHEDB2, CACHEDB1 >
< TTHR                           , A1                             , CACHEDB1, CACHEDB2 >
< TTHR                           , A1                             , CACHEDB2, CACHEDB1 >
< TTHR                           , A2                             , CACHEDB1, CACHEDB2 >
< TTHR                           , A2                             , CACHEDB2, CACHEDB1 >
< TTHR                           , A3                             , CACHEDB1, CACHEDB2 >
< TTHR                           , A3                             , CACHEDB2, CACHEDB1 >
< TTHR                           , __DATASTORE                    , CACHEDB1, CACHEDB2 >
< TTHR                           , __DATASTORE                    , CACHEDB2, CACHEDB1 >
< TTREP                          , CLIENTFAILOVER                 , CACHEDB1, CACHEDB2 >
< TTREP                          , CLIENTFAILOVER                 , CACHEDB2, CACHEDB1 >
cachedb1>

显示复制日志

先来看一下重要的概念:

In a replicated database, transactions remain in the transaction log buffer and transaction log files until the master replication agent confirms they have been fully processed by the subscriber. In an active standby pair replication scheme that contains subscribers, transactions remain in the transaction logs until the active master confirms that they are processed by both the standby master and any subscribers. Only then can the active master consider purging them from the log buffer and transaction log files. When the log space is exhausted, subsequent updates on the master database are aborted.

这点说的是只有当日志被所有的复制库,包括standby和只读subscriber完全处理成功后,active master才能删除日志。所以,如果复制的层级或目标很多,网络故障对系统的影响是很严重的。

Transactions are stored in the log in the form of log records. You can use bookmarks to detect which log records have or have not been replicated by a master database. A bookmark consists of log sequence numbers (LSNs) that identify the location of particular records in the transaction log that you can use to gauge replication performance. The LSNs associated with a bookmark are: hold LSN, last written LSN, and last LSN forced to disk. The hold LSN describes the location of the lowest (or oldest) record held in the log for possible transmission to a subscriber. You can compare the hold LSN with the last written LSN to determine the amount of data in the transaction log that have not yet been transmitted to the subscribers. The last LSN forced to disk describes the last records saved in a transaction log file on disk.

通过 TTREP.REPPEERS 系统表查看

从数据库的目标端(standby或subscriber)看才有意义。

这里的SENDLSNHIGH实际上为日志文件号,其包含最高的LSN而已。而SENDLSNHIGH是偏移量


即使没有数据需要传输,这个SENDLSNLOW不断增大,应该是发送的确认心跳信号。

cachedb2> select replication_name, SENDLSNHIGH, SENDLSNLOW, LATENCY, TPS from  TTREP.REPPEERS;
< _ACTIVESTANDBY                 , 3, 23111944, -1.00000000000000, -1 >
< _ACTIVESTANDBY                 , 3, 32391432, -1.00000000000000, -1 >

通过 ttLogHolds 过程查看

cachedb1> call ttLogHolds;
< 3, 31778816, Checkpoint                    , cachedb1.ds1 >
< 3, 31784960, Checkpoint                    , cachedb1.ds0 >
< 3, 31930632, Replication                   , TIMESTEN-HOL:CACHEDB2 >

cachedb2> call ttLogHolds;
< 3, 31920392, Replication                   , TIMESTEN-HOL:CACHEDB1 >
< 3, 31948800, Checkpoint                    , cachedb2.ds0 >
< 3, 31952896, Checkpoint                    , cachedb2.ds1 >

输出的第一二列分别为:

HoldLFN:transaction log file number of the hold

HoldLFO:transaction log file offset of the hold

通过 ttRepAdmin 过程查看

$ ttRepAdmin -dsn cachedb1 -bookmark
Replication hold LSN ...... 3/31697160
Last written LSN .......... 3/31764888
Last LSN forced to disk ... 3/31764480

下面的输出比较详细,也比较全面
$ ttRepAdmin -showstatus cachedb1

Replication Agent Status as of: 2016-06-30 02:59:44

DSN                         : cachedb1
Process ID                  : 8132 (Started)
Replication Agent Policy    : manual
Host                        : TIMESTEN-HOL
RepListener Port            : 59317 (AUTO)
Last write LSN              : 3.32696584
Last LSN forced to disk     : 3.32696320
Replication hold LSN        : 3.32688392

Replication Peers:
   Name                     : CACHEDB2
   Host                     : TIMESTEN-HOL
   Port                     : 42280 (AUTO) (Connected)
   Replication State        : STARTED
   Communication Protocol   : 36

TRANSMITTER thread(s):
 For                     : CACHEDB2 (track 0)
   Start/Restart count   : 1
   Send LSN              : 3.32694536
   Transactions sent     : 0
   Total packets sent    : 228
   Tick packets sent     : 218
   MIN sent packet size  : 64
   MAX sent packet size  : 155
   AVG sent packet size  : 65
   Last packet sent at   : 02:59:40
   Total Packets received: 227
   MIN rcvd packet size  : 64
   MAX rcvd packet size  : 128
   AVG rcvd packet size  : 118
   Last packet rcvd‘d at : 02:59:40
   TXNs Allocated        : 1
   TXNs In Use           : 0
   ACTs Allocated        : 0
   ACTs In Use           : 0
   ACTs Data Allocated   : 0
   Most recent errors (max 5):
     TT16025 in repagent.c (line 1227) at 02:42:55 on 06-30-2016
     TT16285 in transmitter.c (line 1020) at 02:42:55 on 06-30-2016
     TT16999 in transmitter.c (line 1340) at 02:42:55 on 06-30-2016

RECEIVER thread(s):
 For                     : CACHEDB2 (track 0)
   Start/Restart count   : 1
   Transactions received : 0
   Total packets sent    : 221
   Tick packets sent     : 0
   MIN sent packet size  : 64
   MAX sent packet size  : 120
   AVG sent packet size  : 119
   Last packet sent at   : 02:59:43
   Total Packets received: 222
   MIN rcvd packet size  : 64
   MAX rcvd packet size  : 155
   AVG rcvd packet size  : 64
   Last packet rcvd‘d at : 02:59:43
   rxWaitCTN             : 0.0
   prevCTN               : 0.0
   STA Blk Data Allocated: 0
   STA Data Allocated    : 0
   Most recent errors (max 5):
     TT16025 in repagent.c (line 1227) at 02:42:56 on 06-30-2016

从前面的 SENDLSNLOW = 31697160,和这里的hold LSN对比,发现是一致的,说明数据已经完全同步了。

不过SENDLSNLOW通常比hold LSN大,因为确认都是异步的。即使传输模式是同步,复制的确认也是异步的。

Because replication acknowledgements are asynchronous for better performance, the send LSN can also be some distance behind. Nonetheless, the send LSN for a subscriber is the most accurate value available and is always ahead of the hold LSN.

下面的显示其实没有意义,因为cachedb2没有复制下家了。

$ ttRepAdmin -dsn cachedb2 -bookmark
Replication hold LSN ...... 3/32033032
Last written LSN .......... 3/32041224
Last LSN forced to disk ... 3/32040960

通过 ttBookMark 过程查看

bookmark可以确定一个日志记录是否传输,bookmark包含三个元素:

last written LSN:已写buffer的日志记录, 本项与hold LSN的差就是未传输的日志。

last LSN forced to disk:已持久化到盘的日志记录。表示已durable commit

hold LSN: 已传输的最老的日志记录

看一下英文的说明:

Last write LSN - The location of the most recently generated transaction log record for the database

Last LSN forced - to disk The location of the most recent transaction log record written to the disk.

Replication hold LSN - The location of the lowest (or oldest) record held in the log for possible transmission to a subscriber. A value of -1/-1 indicates replication is in the stop state with respect to all subscribers

Note that the Replication hold LSN, the Last write LSN and the Last LSN forced to disk are very close, which indicates that replication is operating satisfactorily. If the Replication hold LSN falls behind the Last write LSN and the Last LSN, then replication is not keeping up with updates to the master.

You can compare the hold LSN with the last written LSN to determine the amount of data in the transaction log that have not yet been transmitted to the subscribers. The last LSN forced to disk describes the last records saved in a transaction log file on disk.

这三个元素的值越接近,表示越正常。

cachedb1> call ttBookMark();
< 3, 31758744, 3, 31758336, 3, 31697160 >

cachedb1> call ttBookMark();
< 3, 31910152, 3, 31909888, 3, 31899912 >

cachedb2> call ttBookMark();
< 3, 31957256, 3, 31956992, 3, 31920392 >

看一个异常的传输数据的例子。

通过停止standby的复制代理,然后观察复制情况。

cachedb2> call ttrepstop;
cachedb1> select * from a;
< 1, beijing >
< 2, shanghai >
cachedb1> call ttLogHolds;
< 3, 32315392, Checkpoint                    , cachedb1.ds1 >
< 3, 32823296, Checkpoint                    , cachedb1.ds0 >
< 3, 32993544, Replication                   , TIMESTEN-HOL:CACHEDB2 >

cachedb1> insert into a values(3, ‘guangzhou‘);
cachedb1> call ttLogHolds;
< 3, 32315392, Checkpoint                    , cachedb1.ds1 >
< 3, 32823296, Checkpoint                    , cachedb1.ds0 >
< 3, 32993544, Replication                   , TIMESTEN-HOL:CACHEDB2 >

$ ttRepAdmin -dsn cachedb1 -bookmark
Replication hold LSN ...... 3/32993544
Last written LSN .......... 3/33005832
Last LSN forced to disk ... 3/33005568

cachedb1> insert into a values(4, ‘nanjing‘);
[[email protected] ~]$ ttRepAdmin -dsn cachedb1 -bookmark
Replication hold LSN ...... 3/32993544
Last written LSN .......... 3/33009928
Last LSN forced to disk ... 3/33009664

可以看到,当复制无法进行时,hold LSN就保持3/32993544不变,但由于源端还不断有提交的数据,因此Last written LSN不断增大,与hold LSN的差距越来越大,表示有问题了。

使用 ttRepAdmin 显示复制状态

$ ttRepAdmin -showstatus cachedb1

Replication Agent Status as of: 2016-06-30 03:30:44

DSN                         : cachedb1
Process ID                  : 8132 (Started)
Replication Agent Policy    : manual
Host                        : TIMESTEN-HOL
RepListener Port            : 59317 (AUTO)
Last write LSN              : 3.33026312
Last LSN forced to disk     : 3.33026048
Replication hold LSN        : 3.32993544

Replication Peers: <- 复制目标
   Name                     : CACHEDB2
   Host                     : TIMESTEN-HOL
   Port                     : 38045 (AUTO) (Connected)
   Replication State        : STARTED
   Communication Protocol   : 36

TRANSMITTER thread(s): <- 在源数据库上
 For                     : CACHEDB2 (track 0)
   Start/Restart count   : 2
   Send LSN              : 3.32999688 <- 重要!
   Transactions sent     : 2
   Total packets sent    : 315 <- packet包含心跳和交易
   Tick packets sent     : 294
   MIN sent packet size  : 64
   MAX sent packet size  : 1194
   AVG sent packet size  : 69
   Last packet sent at   : 03:30:43 <- 重要!
   Total Packets received: 312 <- 目标数据库接收的
   MIN rcvd packet size  : 64
   MAX rcvd packet size  : 128
   AVG rcvd packet size  : 117
   Last packet rcvd‘d at : 03:30:43
   TXNs Allocated        : 4
   TXNs In Use           : 2
   ACTs Allocated        : 2
   ACTs In Use           : 2
   ACTs Data Allocated   : 416
   Most recent errors (max 5):
     TT16290 in transmitter.c (line 8411) at 03:05:35 on 06-30-2016
     TT16999 in repagent.c (line 1276) at 03:05:35 on 06-30-2016
     TT16025 in repagent.c (line 1227) at 03:05:38 on 06-30-2016
     TT16285 in transmitter.c (line 1020) at 03:05:38 on 06-30-2016
     TT16999 in transmitter.c (line 1340) at 03:05:38 on 06-30-2016

RECEIVER thread(s): <- 在目标数据库上
 For                     : CACHEDB2 (track 0)
   Start/Restart count   : 1
   Transactions received : 0
   Total packets sent    : 7
   Tick packets sent     : 0
   MIN sent packet size  : 64
   MAX sent packet size  : 120
   AVG sent packet size  : 98
   Last packet sent at   : 03:30:44
   Total Packets received: 8 <- 源数据库接收到的确认,因此此数与TRANSMITTER thread的数不一致,因为后者包含心跳包
   MIN rcvd packet size  : 64
   MAX rcvd packet size  : 155
   AVG rcvd packet size  : 77
   Last packet rcvd‘d at : 03:30:44
   rxWaitCTN             : 0.0
   prevCTN               : 0.0
   STA Blk Data Allocated: 0
   STA Data Allocated    : 0
   Most recent errors (max 5):

$ ttRepAdmin -showstatus cachedb2

Replication Agent Status as of: 2016-06-30 03:32:55

DSN                         : cachedb2
Process ID                  : 8626 (Started)
Replication Agent Policy    : manual
Host                        : TIMESTEN-HOL
RepListener Port            : 38045 (AUTO)
Last write LSN              : 3.33278216
Last LSN forced to disk     : 3.33277952
Replication hold LSN        : 3.33274120

Replication Peers:
   Name                     : CACHEDB1
   Host                     : TIMESTEN-HOL
   Port                     : 59317 (AUTO) (Connected)
   Replication State        : STARTED
   Communication Protocol   : 36

TRANSMITTER thread(s): <- 在源数据库
 For                     : CACHEDB1 (track 0)
   Start/Restart count   : 1
   Send LSN              : 3.33274120
   Transactions sent     : 0
   Total packets sent    : 35
   Tick packets sent     : 31
   MIN sent packet size  : 64
   MAX sent packet size  : 155
   AVG sent packet size  : 67
   Last packet sent at   : 03:32:50
   Total Packets received: 34
   MIN rcvd packet size  : 64
   MAX rcvd packet size  : 120
   AVG rcvd packet size  : 115
   Last packet rcvd‘d at : 03:32:50
   TXNs Allocated        : 1
   TXNs In Use           : 0
   ACTs Allocated        : 0
   ACTs In Use           : 0
   ACTs Data Allocated   : 0
   Most recent errors (max 5):
     TT16025 in repagent.c (line 1227) at 03:30:41 on 06-30-2016
     TT16285 in transmitter.c (line 1020) at 03:30:41 on 06-30-2016
     TT16999 in transmitter.c (line 1340) at 03:30:41 on 06-30-2016

RECEIVER thread(s):
 For                     : CACHEDB1 (track 0)
   Start/Restart count   : 1
   Transactions received : 2
   Total packets sent    : 39
   Tick packets sent     : 0
   MIN sent packet size  : 64
   MAX sent packet size  : 128
   AVG sent packet size  : 110
   Last packet sent at   : 03:32:53
   Total Packets received: 47
   MIN rcvd packet size  : 64
   MAX rcvd packet size  : 298
   AVG rcvd packet size  : 83
   Last packet rcvd‘d at : 03:32:53
   rxWaitCTN             : 0.0
   prevCTN               : 0.0
   STA Blk Data Allocated: 64
   STA Data Allocated    : 8192
   Most recent errors (max 5):
     TT16025 in repagent.c (line 1227) at 03:30:43 on 06-30-2016

检查 return service 的状态

查询 return service是否被禁???

cachedb1> CALL ttRepSyncSubscriberStatus (‘cachedb2‘);
< 0 >
cachedb2> call ttrepstop;
cachedb1> CALL ttRepSyncSubscriberStatus (‘cachedb2‘);
< 0 >

cachedb1> call ttrepstop;
cachedb1> alter active standby pair alter store cachedb2 set RETURN SERVICES OFF WHEN REPLICATION STOPPED;
cachedb1> call ttrepstart;
cachedb1> CALL ttRepSyncSubscriberStatus (‘cachedb2‘);
< 0 >

$ ttRepAdmin -receiver -name cachedb2 -state stop cachedb1
Cannot set a receiver state to STOP in an Active Standby scheme

CALL ttRepSubscriberStateSet( , , , , 1 );
cachedb1> CALL ttRepSubscriberStateSet( , , , , 2 );
17037: The receiver state in an ACTIVE STANDBY scheme cannot be set to STOP

p65 rep guide

Setting the transaction log failure threshold 一节

0表示没有被禁,即使复制代理停止,return service也不一定被禁

检查最近一次的return service的返回状态

先必须通过ttRepXactTokenGet得到token, 然后将token带入到

由于之前是no return

cachedb1> call ttRepXactTokenGet(‘RR’); <- RR表示return receipt, RT表示return twosafe

8187: A Return receipt transaction has not been executed on this connection

不得已重建

cachedb1> create active standby pair cachedb1, cachedb2 return receipt;

cachedb1> call ttrepstart;

cachedb1> call ttrepstateget;

< IDLE, NO GRID >

cachedb1> call ttrepstateset(‘active’);

ttRepAdmin?duplicate?fromcachedb1?hosttimesten?hol?uidrepadmin?pwdtimestencachedb2(reverse?i?search)‘tt′:ttRepAdmin?duplicate?fromcachedb1?hosttimesten?hol?uidrepadmin?pwdtimestencachedb2[oracle@timesten?holinfo] ttisql -v1 -e “set prompt ‘cachedb2> ‘” “dsn=cachedb2;uid=tthr;pwd=timesten;oraclepwd=oracle”

cachedb2> call ttrepstart;

cachedb2> call ttrepstart;

12026: The agent is already running for the data store.

cachedb2> call ttrepstateget;

< STANDBY, NO GRID >

cachedb1> insert into a values(1, ‘beijing’);

cachedb1> call ttRepXactTokenGet(‘RR’);

< 7EEAF21F7BC2E405D312D1B96D877A88C80100000100000000000000000000009CE97457000000000A0B0000000000009CE97457000000000A0B00000000000080467447436D6CCA00000000000000000000000000000000 >

好怪异,不会用

cachedb1> call ttRepXactStatus;

< [email protected] , AP, >

返回的状态说明:

‘NS’ - Transaction not sent to the subscriber.

‘RC’ - Transaction received by the subscriber agent.

‘CT’ - Transaction applied at the subscriber store. (Does not convey whether the transaction ran into an error when being applied.)

‘AP’ - Transaction has been durably applied on the subscriber.

分析日志中未传输的交易

异常时:

cachedb2> call ttrepstop;
cachedb1> insert into a values(2, ‘shanghai‘);
Warning  8170: Receipt or commit acknowledgement not returned in the specified timeout interval for XID:1.234

记住此XID:1.234

$ ttXactLog -v1 -logAnalyze cachedb1
Summary:
Total transactions left to replicate: 1
Total rows left to replicate: 1
Size of transactions left to replicate: 520.00 B
Size of rows left to replicate: 166.00 B
Total inserts remaining: 1

Start LSN = 4.3856648
End   LSN = 4.3868936

[[email protected] ~]$ ttXactLog -v2 -logAnalyze cachedb1
Track analysis for track number: 0
Transactions left to replicate: 1
Rows left to replicate: 1
Size of transactions left to replicate: 520.00 B
Size of rows left to replicate: 166.00 B
Total inserts remaining: 1

Summary:
Total transactions left to replicate: 1
Total rows left to replicate: 1
Size of transactions left to replicate: 520.00 B
Size of rows left to replicate: 166.00 B
Total inserts remaining: 1

Start LSN = 4.3856648
End   LSN = 4.3868936

[[email protected] ~]$ ttXactLog -v3 -logAnalyze cachedb1
Transaction id: 1.234
Track for this xid: 0
Logmarker before this xid: 3003
Rows left to replicate: 1
Transaction size: 520.00 B
Size of rows left: 166.00 B
Total inserts remaining: 1

Track analysis for track number: 0
Transactions left to replicate: 1
Rows left to replicate: 1
Size of transactions left to replicate: 520.00 B
Size of rows left to replicate: 166.00 B
Total inserts remaining: 1

Summary:
Total transactions left to replicate: 1
Total rows left to replicate: 1
Size of transactions left to replicate: 520.00 B
Size of rows left to replicate: 166.00 B
Total inserts remaining: 1

Start LSN = 4.3856648
End   LSN = 4.3868936

$ ttXactLog -logAnalyze -xid 1.234 cachedb1
$ ttXactLog -logAnalyze -xid 1.234 cachedb1
Summary:
Total transactions left to replicate: 1
Total rows left to replicate: 1
Size of transactions left to replicate: 520.00 B
Size of rows left to replicate: 166.00 B
Total inserts remaining: 1

Start LSN = 4.3856648
End   LSN = 4.3868936

正常时:

cachedb2> call ttrepstart;

$ ttXactLog -logAnalyze -xid 1.234 cachedb1
Summary:
Total transactions left to replicate: 0
Total rows left to replicate: 0
Size of transactions left to replicate: 0.00 B
Size of rows left to replicate: 0.00 B

Start LSN = 4.3877128
End   LSN = 4.3881224

$ ttXactLog -logAnalyze -xid 1.234 cachedb1
Summary:
Total transactions left to replicate: 0
Total rows left to replicate: 0
Size of transactions left to replicate: 0.00 B
Size of rows left to replicate: 0.00 B

Start LSN = 4.3885600
End   LSN = 4.3889416

[[email protected] ~]$ ttXactLog -v3 -logAnalyze cachedb1
Track analysis for track number: 0
Transactions left to replicate: 0
Rows left to replicate: 0
Size of transactions left to replicate: 0.00 B
Size of rows left to replicate: 0.00 B

Summary:
Total transactions left to replicate: 0
Total rows left to replicate: 0
Size of transactions left to replicate: 0.00 B
Size of rows left to replicate: 0.00 B

Start LSN = 4.3920136
End   LSN = 4.3922184
时间: 2024-10-18 03:54:14

TimesTen 数据库复制学习:15. 监控复制系统的相关文章

TimesTen 应用层数据库缓存学习:5. 异步读写缓存

eleAsynchronous Write Through(AWT) cache group, 即TimesTen的异步写缓存.数据只允许在TimesTen中修改,然后同步到Oracle.当然,TimesTen中的数据最初是从Oracle加载而来. 对于熟悉存储的人来说,cache 分为write-through和write back.而TimesTen的AWT对应的就是存储的write-back. 由于有双向的数据流动,因此对于AWT,除了只读缓存组所需的cache agent外,还需要一个r

TimesTen 数据库复制学习:19. 解决复制冲突

本文针对的是classic复制的双向复制模式 复制冲突是如何产生的 有update冲突,insert冲突,delete/update冲突,在本节中都有示例说明.基本都是由于两个master同时操作同一条记录所致,导致从两方发出的操作交织在一起,导致不一致,如果是串行的倒也无所谓了.还需强调一点,这些冲突可以检测到,但并不会自动解决,需要应用来处理 Within a single database, update conflicts are prevented by the locking pro

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 [ma

TimesTen 数据库复制学习:2. 配置Active Standby Pair

本文为一个动手实验,配置Active Standby Pair,配置3个数据库, master, standby和一个subscriber.拓扑如下: 在本实验中,为简化,三个数据库皆位于同一主机. 创建DSN [ODBC Data Sources] master1=TimesTen 11.2.2 Driver master2=TimesTen 11.2.2 Driver subscriber1=TimesTen 11.2.2 Driver [master1] Driver=/home/orac

TimesTen 数据库复制学习:7. 管理Active Standby Pair(无缓存组)

Active Standby Pair是TimesTen复制的一种固定模式,就是1个active到1个standby,再到0个或127个subscriber,如下图: 配置 Active Standby Pair (不带缓存组) 大致步骤如下: 1. 创建数据库 2. 使用CREATE ACTIVE STANDBY PAIR创建复制 3. 调用Call ttRepStateSet('ACTIVE'),将active数据库的角色设为ACTIVE 4. 调用Call ttRepStart, 启动复制

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

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

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

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

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

TimesTen 数据库复制学习:9. 更改Active Standby Pair

在Active Standby Pair中复制DDL语句 在以下的例子中,active master为cachedb2, standby master为cachedb1 在Active Standby Pair复制数据库对象 DDLReplicationLevel 连接属性可以控制复制对象的行为. DDLReplicationLevel = 1:不复制表,索引和同义词的create 和 drop,只复制复制表的添加和删除列操作 DDLReplicationLevel = 2: 缺省,复制表,索引