ALLSTARS_ORACLE 发表于 2013-11-17 16:48:48

TimesTen的Active-standby配置中如何安全重启Active节点主机

TimesTen的Active-standby配置中如何安全重启Active节点主机

TimesTen的Active-Standby pair是TimesTen中的HA配置,但是和Oracle的Physical/Logical Standby又有区别。其同步方法和Logical Standby类似,是应用Active主机的transaction log.
  
但是Standby主机是只读的。
  
重启Standby主机没有问题,日志会堆积在Active端,等standby重启后会自动接续。
  
但是很多客户发现重启Active主机,经常会导致Active-Standby pair丢失。即使用户先将Standby转换成Active,再重启原来的Active主机(转换后的standby)也不行。
  
这将总是需要重建原来的Active主机(转换后的standby)上的数据库,在数据量巨大时,这个过程将非常缓慢。


经过反复实验和考证,我们现在可以确认问题出在哪里:
  
1)Active主机在重启前,并未将所有的transaction都同步到Standby,如果一旦Active和Standby角色互换,会造成Standby上存在Active上并不存在的transaction,产生TT16227错误:
  
TT16227: Standby store has replicated transactions not present on the active. Local CTN=1377070661.7568, Backup CTN=1376558513.698865, Received CTN=1377070661.7564.
  
2)用户只是用了./ttdaemonadmin -stopserver -force来尝试中止所有应用连接。
  
需要指出的是TimesTen有两种连接,一种是C/S,一种是直连。


  https://blogs.oracle.com/Database4CN/resource/TimesTen/tt2_1.gif


C/S是指应用程序和TimesTen不在同一台主机上的连接方式。对于同一台主机上的程序,可以使用直连。
  
而./ttdaemonadmin -stopserver只会停止C/S连接。
  
同一台主机上,仍可以通过ttisql登录数据库。
  
3)如果停止所有应用,并确认Active-standby两侧的transaction同步后,可以做任意重启操作。如果要使用force或者杀进程停止transaction的话,一定要确认回滚完毕并且两侧确认同步后,再重启。可以用dsmap工具来实现确认动作。


下面给出了详细的重启Active主机的确认步骤:



  
1)停止Server来中断已有的并阻止未来的client/Server连接.
  
./ttdaemonadmin -stopserver -force


2)杀用户进程,主要是杀Direct link连接:
  
Command> host ttXactAdmin -connections
  
2013-08-26 14:32:44.696
  
/home/oracle/TimesTen/tt1121/info/HHCBEDATA
  
TimesTen Release 11.2.1.9.8


ID   PID     Context    Name           Program        State TransID     UID


1 32654   0x082723b8 hhcbedata      ttIsqlCmd      Run      1.88     TTADMIN <==========ttIsqlCmd连接需要kill
  
2 32663   0x0a1ff1b0 REPHOLD        timestenrepd   Run               SYS
  
3 32663   0x0a24fda0 FAILOVER       timestenrepd   Run               SYS
  
4 32663   0x92c00468 REPLISTENER    timestenrepd   Run               SYS
  
5 32663   0x0a2a0990 XLA_PARENT     timestenrepd   Run               SYS
  
6 32663   0x0a17ca18 LOGFORCE       timestenrepd   Run               SYS
  
7 32663   0x0a3117e8 TRANSMITTER    timestenrepd   Run               SYS
  
8 32663   0x0a3623d8 RECEIVER       timestenrepd   Run               SYS
  
9 437     0x09cfaba0 hhcbedata      ttIsqlCmd      Run               ORACLE <=========这是你的当前连接
  
2032 32564   0x0830e340 Manager        timestensubd   Run               SYS
  
2033 32564   0x08360e98 Rollback       timestensubd   Run               SYS
  
2034 32564   0x0842f538 Flusher        timestensubd   Run               SYS
  
2035 32564   0x084a05a0 Monitor        timestensubd   Run               SYS
  
2036 32564   0x084f13a0 Deadlock Detector timestensubd   Run               SYS
  
2037 32564   0x085421a0 Checkpoint     timestensubd   Run               SYS
  
2038 32564   0x08592fa0 Aging          timestensubd   Run               SYS
  
2039 32564   0x085e3da0 Log Marker     timestensubd   Run               SYS
  
2040 32564   0x08634ba0 AsyncMV        timestensubd   Run               SYS
  
2041 32564   0x086859a0 HistGC         timestensubd   Run               SYS


3)等待并确认Active-standby两侧的transaction同步:


Command> call ttRepSubscriberWait(null, null, null, null, -1);


TIMEOUT:   00
  
Command> vertical 1;
  
Command> select * from ttrep.reppeers;


COMMIT_TIMESTAMP:    1377498342
  
COMMIT_SEQNUM:       352                   <==============352


-bash-3.2$ cd ../support
  
-bash-3.2$ ./dsmap -shmid 4161544 -hdr| grep -i ctn  <===========4161544 是通过ttstatus命令获得的shared memory ID
  
latch                   = 9     (SbCTNWrapLatch)
  
latch                   = 10    (SbRepCTNLatch)
  
replBackupCTN             = <0.0>
  
locCTN                    = <1377498342.352>
  
appliedCTN                = <1377498342.352> <==============352
  
lastLocalAwtCTN           = <0.0>
  
lastGlobalAwtCTN          = <0.0>


<======需要等到COMMIT_TIMESTAMP.COMMIT_SEQNUM=dsmap命令结果中的locCTN,并且等于appliedCTN


4)在standby上执行角色转换,(如果应用不需要在这段时间内切换到Standby上,也可以不执行):


call ttrepstateset('ACTIVE');
  
call ttrepstateget;


5)在以前的Active上执行以下命令然后:
  
./ttAdmin -repStop HHCBEDATA
  
./ttadmin -ramunload  "dsn=HHCBEDATA"
  
./ttDaemonAdmin -stop


<====现在可以安全重启Active主机了
页: [1]
查看完整版本: TimesTen的Active-standby配置中如何安全重启Active节点主机