linuxsir首页 LinuxSir.Org | Linux、BSD、Solaris、Unix | 开源传万世,因有我参与欢迎您!
网站首页 | 设为首页 | 加入收藏
您所在的位置:主页 > Linux数据库 >

PostgreSQL启动恢复期间,恢复到的时间线的确定

时间:2019-02-26  来源:未知  作者:admin666

1、启动恢复时,确定恢复到的时间线recoveryTargetTLI

 1)归档恢复点比checkpoint中记录的时间线大,那么选择归档恢复点作为目标时间线

 2)否则,checkpoint记录中的时间线作为目标时间线

StartupXLOG-
 if (ControlFile- minRecoveryPointTLI
  ControlFile- checkPointCopy.ThisTimeLineID)
  recoveryTargetTLI = ControlFile- minRecoveryPointTLI;
 else
  recoveryTargetTLI = ControlFile- checkPointCopy.ThisTimeLineID;
 ...

2、接着从recovery.conf文件中读取

 1)若设置了recovery_target_timeline值,并且设为latest,那么history列表最大的时间线即为目标时间线

 2)否则是recovery.conf文件中设置的时间线值

 3)若没有设置recovery_target_timeline值,则目标时间线为第一步中的值

StartupXLOG- readRecoveryCommandFile()-
 for (item = head; item; item = item- next){
  if (strcmp(item- name, "restore_command") == 0){
   ...
  }else if ...
  else if(strcmp(item- name, "recovery_target_timeline") == 0){
   rtliGiven = true;
   if (strcmp(item- value, "latest") == 0)
    rtli = 0;
   else
    rtli = (TimeLineID) strtoul(item- value, NULL, 0);
  }else if...
 }
 if (rtliGiven){
  if (rtli){
   recoveryTargetTLI = rtli;
   recoveryTargetIsLatest = false;
  }else{
   /* We start the "latest" search from pg_control's timeline */
   recoveryTargetTLI = findNewestTimeLine(recoveryTargetTLI);
   recoveryTargetIsLatest = true;
  }
 }

Linux公社的RSS地址:https://www.linuxidc.com/rssFeed.aspx

友情链接