TimesTen 数据库复制学习:14. 使用指定端口通讯的数据库复制

来源:互联网 发布:淘宝发货地与实际不符 编辑:程序博客网 时间:2024/03/28 22:45

通常,数据库复制时,无需指定固定的复制端口,而是两个数据库之间进行在线协商,使用动态的端口。
不过某些特殊情况下需要指定固定的端口,例如TimesTen的Daemon端口为非缺省时。

下面的例子给出了设置指定固定端口复制的完整过程,为了测试简便,我在一个虚拟机里安装了两个TimesTen实例,它们的版本不同,Daemon端口分别为53392和55555:

[oracle@timesten-hol info]$ ttversionTimesTen Release 11.2.2.6.2 (64 bit Linux/x86_64) (tt1122:53392) 2014-01-03T07:01:05Z  Instance admin: oracle  Instance home directory: /home/oracle/TimesTen/tt1122  Group owner: oracle  Daemon home directory: /home/oracle/TimesTen/tt1122/info  PL/SQL enabled.[oracle@timesten-hol info]$ ttversionTimesTen Release 11.2.2.8.11 (64 bit Linux/x86_64) (ttnew:55555) 2016-02-09T19:36:50Z  Instance admin: oracle  Instance home directory: /u01/TimesTen/ttnew  Group owner: oracle  Daemon home directory: /u01/TimesTen/ttnew/info  PL/SQL enabled.

在instance_info中也可以看到类似的信息:

$ vi /etc/TimesTen/instance_info#SUM 55602     1[ tt1122 ]Product=TimesTen11.2.2.6.2InstallDir=/home/oracle/TimesTen/tt1122InstanceAdministrator=oracleDaemonHome=/home/oracle/TimesTen/tt1122/infoBitLevel=64Component=Client/Server and DataManagerTT_PORT=53392[ ttnew ]Product=TimesTen11.2.2.8.11InstallDir=/u01/TimesTen/ttnewInstanceAdministrator=oracleDaemonHome=/u01/TimesTen/ttnew/infoBitLevel=64Component=Client/Server and DataManagerTT_PORT=55555

暂且就把这两个实例称为tt1122和ttnew吧。我们准备建立一个active standby pair, active为cachedb1,位于tt1122, standby为cachedb2, 位于ttnew。
首先在不同的终端上启动TimesTen Daemon,由于环境变量不同,启动ttnew时需要先初始化环境变量:

. /u01/TimesTen/ttnew/bin/ttenv.shexport TT_HOME=/u01/TimesTen/ttnewttdaemonadmin -start

然后我们建立一个ASP,并试图克隆standby,失败了,原因是两个数据库实例使用的并非缺省的端口。

cachedb1> CREATE ACTIVE STANDBY PAIR cachedb1 on "timesten-hol", cachedb2 on "timesten-hol";ttnew$ ttRepAdmin -duplicate -from cachedb1 -host timesten-hol -uid repadmin -pwd timesten cachedb2TT12039: Could not get port number of TimesTen replication agent on remote host. Either the replication agent was not started, or it was just started and has not communicated its port number to the TimesTen daemon

翻了下手册,发现可用-remoteDaemonPort指定TimesTen Daemon端口,不过仍失败了。因为这个选项不能用于动态端口的情形:

ttnew$ ttRepAdmin -duplicate -from cachedb1 -host timesten-hol -remoteDaemonPort 53392 -uid repadmin -pwd timesten cachedb2TT12048: Error performing backup at source.  More information can be found in the source's message logTT12048: Error text: [1084782912, 0, noAwt] CACHEDB1:receiver.c(6840): TT16266: The -remoteDaemonPort cannot be used for this -duplicate operation because the sending datastore has stores which use auto automatic port allocation.. 

在MOS上搜了下,发现只能在创建ASP时指定端口才行,因此,删掉ASP重建:

CREATE ACTIVE STANDBY PAIR cachedb1 on "timesten-hol", cachedb2 on "timesten-hol"store cachedb1 port 12306 store cachedb2 port 12307;cachedb1> 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: 12306    Log Fail Threshold: (none)    Retry Timeout: 120 seconds    Compress Traffic: Disabled  Store: CACHEDB2 on TIMESTEN-HOL    Port: 12307    Log Fail Threshold: (none)    Retry Timeout: 120 seconds    Compress Traffic: Disabledcachedb1> call ttrepstart;

由于只启动了active master数据库的rep agent,因此只有端口12306占用:

[oracle@timesten-hol info]$ netstat -an|grep 12306tcp        0      0 0.0.0.0:12306               0.0.0.0:*                   LISTEN      [oracle@timesten-hol info]$ netstat -an|grep 12307

信心满满,居然又失败了!

[oracle@timesten-hol info]$ ttRepAdmin -duplicate -from cachedb1 -host timesten-hol -remoteDaemonPort 53392 -uid repadmin -pwd timesten cachedb2TT12048: Error performing backup at source.  More information can be found in the source's message logTT8144: [1111923008, 0, noAwt] CACHEDB1:receiver.c(6735): TT8144: Duplicate not permitted.  Reason: Attempted duplicate from a non-ACTIVE Master to Master. Duplicate is only permitted from the ACTIVE store to the STANDBY store, from the STANDBY store to a SUBSCRIBER, or from the ACTIVE store to a SUBSCRIBER if the STANDBY store has failedTT16025: [1111923008, 0, noAwt] CACHEDB1:repagent.c(1227): TT16025: Thread 'RECEIVER' (context 0x4826d50) starting

不过错误很明显,因为active master的角色没有设置。

cachedb1> call ttrepstateset('active');cachedb1> call ttrepstateget;< ACTIVE, NO GRID >

一波三折,终于成功了!!!

[oracle@timesten-hol info]$ ttRepAdmin -duplicate -from cachedb1 -host timesten-hol -remoteDaemonPort 53392 -uid repadmin -pwd timesten cachedb2[oracle@timesten-hol info]$ echo $?0

启动standby的rep agent,自动进入STANDBY状态

ttnew$ ttisql -v1 -e "set prompt 'cachedb2> '" "dsn=cachedb2;uid=tthr;pwd=timesten;oraclepwd=oracle"cachedb2> call ttrepstateget;< IDLE, NO GRID >cachedb2> call ttrepstart;cachedb2> call ttrepstateget;< STANDBY, NO GRID >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: 12306    Log Fail Threshold: (none)    Retry Timeout: 120 seconds    Compress Traffic: Disabled  Store: CACHEDB2 on TIMESTEN-HOL    Port: 12307    Log Fail Threshold: (none)    Retry Timeout: 120 seconds    Compress Traffic: Disabledcachedb2> 

这时可以看到端口的状态:

[oracle@timesten-hol info]$ netstat -a|grep 12306tcp        0      0 *:12306                     *:*                         LISTEN      tcp        0      0 timesten-hol:29005          timesten-hol:12306          ESTABLISHED tcp        0      0 timesten-hol:12306          timesten-hol:29005          ESTABLISHED [oracle@timesten-hol info]$ netstat -an|grep 12307tcp        0      0 0.0.0.0:12307               0.0.0.0:*                   LISTEN      tcp        0      0 127.0.0.1:12307             127.0.0.1:57495             ESTABLISHED tcp        0      0 127.0.0.1:57495             127.0.0.1:12307             ESTABLISHED [root@timesten-hol ~]# lsof|grep 12307timestenr 4860    oracle   17u     IPv4              20352                   TCP timesten-hol:57495->timesten-hol:12307 (ESTABLISHED)timestenr 4939    oracle   13u     IPv4              20345                   TCP *:12307 (LISTEN)timestenr 4939    oracle   16u     IPv4              20353                   TCP timesten-hol:12307->timesten-hol:57495 (ESTABLISHED)[root@timesten-hol ~]# lsof|grep 12306timestenr 4860    oracle   13u     IPv4              19992                   TCP *:12306 (LISTEN)timestenr 4860    oracle   15u     IPv4              20347                   TCP timesten-hol:12306->timesten-hol:29005 (ESTABLISHED)timestenr 4939    oracle   15u     IPv4              20346                   TCP timesten-hol:29005->timesten-hol:12306 (ESTABLISHED)

最终可以看到TRANSMITTER和RECEIVER subdaemon;

[oracle@timesten-hol info]$ ttstatusTimesTen status report as of Wed Jun 29 00:41:20 2016Daemon pid 4611 port 55555 instance ttnewTimesTen server pid 4620 started on port 55556------------------------------------------------------------------------Data store /home/oracle/TimesTen/tt1122/info/DemoDataStore/cachedb2There are 18 connections to the data storeShared Memory KEY 0x0a020080 ID 2719764PL/SQL Memory KEY 0x0b020080 ID 2752533 Address 0x7fa0000000Type            PID     Context             Connection Name              ConnIDReplication     4939    0x000000000320bd70  LOGFORCE:0x411b8940             127Replication     4939    0x000000000328eb50  REPHOLD:0x40444940              130Replication     4939    0x00000000032fb870  TRANSMITTER(M):0x41b31940       126Replication     4939    0x0000000003398f70  RECEIVER:0x41e32940             125Replication     4939    0x00007f65f8002e20  REPLISTENER:0x40c38940          131Replication     4939    0x00007f66000008c0  FAILOVER:0x40937940             128Replication     4939    0x00007f6600015b40  XLA_PARENT:0x41830940           129Subdaemon       4615    0x00000000016e2350  Manager                         142Subdaemon       4615    0x0000000001759a80  Rollback                        141Subdaemon       4615    0x000000000181b250  Deadlock Detector               140Subdaemon       4615    0x0000000001860620  Log Marker                      138Subdaemon       4615    0x00000000018b58e0  Checkpoint                      137Subdaemon       4615    0x000000000190aba0  Monitor                         136Subdaemon       4615    0x000000000195fe60  Aging                           135Subdaemon       4615    0x0000000001a24070  Flusher                         134Subdaemon       4615    0x0000000001a44860  HistGC                          139Subdaemon       4615    0x0000000001b26c40  AsyncMV                         132Subdaemon       4615    0x00007f88fc0008c0  IndexGC                         133Replication policy  : ManualReplication agent is running.Cache Agent policy  : ManualPL/SQL enabled.------------------------------------------------------------------------Accessible by group oracleEnd of report

参考

* HOWTO : Resolve TimesTen Error TT12039 - Could not get port number of TimesTen replication agent on remote host. (Doc ID 855521.1)
* HOWTO : Resolve TimesTen Error TT12038 When Configuring/Starting Replication (Doc ID 420004.1)
* TT12038: Could Not Connect To Timesten Daemon On Remote Host %S (Doc ID 563391.1)

0 0
原创粉丝点击