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)
- TimesTen 数据库复制学习:14. 使用指定端口通讯的数据库复制
- TimesTen 数据库复制学习:1. TimesTen复制概述
- TimesTen 数据库复制学习:18. classic复制的典型设计模式-双向复制
- TimesTen 数据库复制学习:10. 定义classic复制
- TimesTen 数据库复制学习:13. 设置复制系统
- TimesTen 数据库复制学习:15. 监控复制系统
- TimesTen 数据库复制学习:17. 更改classic复制
- TimesTen 数据库复制学习:19. 解决复制冲突
- TimesTen 数据库复制学习:5. 设定复制网络传输的return service
- TimesTen 数据库复制学习:6. 利用STORE关键字设定复制网络传输的属性
- TimesTen 数据库复制学习:16. 一个缓存组,复制,客户端自动切换的串烧实验
- TimesTen 数据库复制学习:11. ASP带缓存组复制的几种固定架构模式
- TimesTen 数据库复制学习:12. Classic带缓存组复制的几种固定架构模式
- TimesTen 数据库复制学习:2. 配置Active Standby Pair
- TimesTen 数据库复制学习:9. 更改Active Standby Pair
- TimesTen数据库复制对于时间同步的要求
- TimesTen 应用层数据库缓存学习:21. AWT复制Oracle事务失败时的处理
- TimesTen 数据库复制学习:3. 配置Classic Replication单表复制
- Git的相关用法
- ViewGroup获取导入view的高宽数据(没走完onCreate)
- JS闭包知识点整理
- 写在大三即将结束前
- new方法的实现原理、构造方法、类工厂方法、instancetype和id
- TimesTen 数据库复制学习:14. 使用指定端口通讯的数据库复制
- 图像视觉博客资源
- Vue.js学习 Item2 -- 原理概述
- 《一个普通IT人的十年回顾》金旭亮——警醒自己!
- C++ 最近面试题中遇到的一些问题
- HDU 4915 (贪心)
- TimesTen 数据库复制学习:15. 监控复制系统
- 编译原理-LR(0)分析法
- SCU2016-02 R题概率dp