码迷,mamicode.com
首页 > 数据库 > 详细

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

时间:2018-08-12 21:41:14      阅读:330      评论:0      收藏:0      [点我收藏+]

标签:rom   style   最大的   时间   ttl   find   ntc   head   start   

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;
		}
	}


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

标签:rom   style   最大的   时间   ttl   find   ntc   head   start   

原文地址:http://blog.51cto.com/yanzongshuai/2158527

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!