PostgreSQL中控制文件的解析与恢复

最近遇到有人问起PG中控制文件的一些使用问题,总结了一下。

1、PG控制文件简介

1.1、存储的位置

它的路径位于:

相关信息,可以用命令pg_controldata得到:

[10:41:27-postgres@centos2:/var/lib/pgsql/14/data/global]$ pg_controldata -D $PGDATA
pg_control version number:            1300
Catalog version number:               202107181
Database system identifier:           7138432685960386315
Database cluster state:               in production
pg_control last modified:             Sun 11 Dec 2022 11:19:22 AM CST
Latest checkpoint location:           1/2A000180
Latest checkpoint's REDO location:    1/2A000148
Latest checkpoint's REDO WAL file:    00000001000000010000002A
Latest checkpoint's TimeLineID:       1
Latest checkpoint's PrevTimeLineID:   1
Latest checkpoint's full_page_writes: on
Latest checkpoint's NextXID:          0:1461
Latest checkpoint's NextOID:          31466
Latest checkpoint's NextMultiXactId:  1
Latest checkpoint's NextMultiOffset:  0
Latest checkpoint's oldestXID:        727
Latest checkpoint's oldestXID's DB:   1
Latest checkpoint's oldestActiveXID:  1461
Latest checkpoint's oldestMultiXid:   1
Latest checkpoint's oldestMulti's DB: 1
Latest checkpoint's oldestCommitTsXid:0
Latest checkpoint's newestCommitTsXid:0
Time of latest checkpoint:            Sun 11 Dec 2022 11:19:22 AM CST
Fake LSN counter for unlogged rels:   0/3E8
Minimum recovery ending location:     0/0
Min recovery ending loc's timeline:   0
Backup start location:                0/0
Backup end location:                  0/0
End-of-backup record required:        no
wal_level setting:                    replica
wal_log_hints setting:                off
max_connections setting:              100
max_worker_processes setting:         8
max_wal_senders setting:              10
max_prepared_xacts setting:           0
max_locks_per_xact setting:           64
track_commit_timestamp setting:       off
Maximum data alignment:               8
Database block size:                  8192
Blocks per segment of large relation: 131072
WAL block size:                       8192
Bytes per WAL segment:                16777216
Maximum length of identifiers:        64
Maximum columns in an index:          32
Maximum size of a TOAST chunk:        1996
Size of a large-object chunk:         2048
Date/time type storage:               64-bit integers
Float8 argument passing:              by value
Data page checksum version:           0
Mock authentication nonce:            aaa8abf569631ec60ba05e3f625495da70007738b831e46e1cfda0d26c370987

1.2、什么是控制文件

控制文件里存储了数据库唯一系统标识符、系统状态数据、数据库启动前系统必须恢复到的检查点信息、数据库的配置兼容backend进程执行的参数、指明类型timestamp、interval、time内部格式的标志、指明不同类型传值(pass-by-value)状态的标志以及一些数据库的重要信息。

我们可以通过pg_controldata命令直接读取PostgreSQL控制文件内容。

控制文件内容主要分为是三部分,初始化静态信息、WAL及检查点的动态信息、一些数据库配置信息。

控制文件物理路径PGDATA/global/pgc​ontrol相关信息,可以用命令pgc​ontroldata得到:¨G0G¨K27K控制文件里存储了数据库唯一系统标识符、系统状态数据、∗∗数据库启动前系统必须恢复到的检查点信息∗∗、数据库的配置兼容backend进程执行的参数、∗∗指明类型timestamp、interval、time内部格式的标志∗∗、指明不同类型传值(pass−by−value)状态的标志以及一些数据库的重要信息。我们可以通过pgc​ontroldata命令直接读取PostgreSQL控制文件内容。控制文件内容主要分为是三部分,初始化静态信息、WAL及检查点的动态信息、一些数据库配置信息。控制文件物理路径PGDATA/global/pg_control,源码路径src/include/catalog/pg_control.h。

2、控制文件解析

通过pg_controldata命令查看控制文件内容,我们按照初始化静态信息、WAL及检查点的动态信息、一些数据库配置信息三部分进行解析。

2.1、初始静态信息解析

[10:41:27-postgres@centos2:/var/lib/pgsql/14/data/global]$ pg_controldata -D $PGDATA
pg_control version number:            1300
Catalog version number:               202107181
Database system identifier:           7138432685960386315
Database cluster state:               in production

pg_control last modified: Sun 11 Dec 2022 11:19:22 AM CST

外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传

我们找一下pg_control.h中的信息:(pg14的codeline)

source path: 
C:\tools\pgsql\14.4\include\server\catalog\pg_control.h
C:\SAPDevelop\3rdpart\postgres\postgres\src\include\catalog\pg_control.h/* Version identifier for this pg_control format */
#define PG_CONTROL_VERSION    1300

pg_control version number: 1300 是控制文件版本号。

source path:
C:\SAPDevelop\3rdpart\postgres\postgres\src\include\catalog\catversion.h#ifndef CATVERSION_H
#define CATVERSION_H/*
 * We could use anything we wanted for version numbers, but I recommend
 * following the "YYYYMMDDN" style often used for DNS zone serial numbers.
 * YYYYMMDD are the date of the change, and N is the number of the change
 * on that day.  (Hopefully we'll never commit ten independent sets of
 * catalog changes on the same day...)
 *//*                            yyyymmddN */
#define CATALOG_VERSION_NO    202107181

Catalog version number: 202107181。是系统表版本号,格式是yyyymmddN。记录系统不兼容性的改变。N是yyymmdd当天改变的次数。具体可以查看源码文件src/include/catalog/catversion.h。

Database system identifier: 7138432685960386315 数据库系统号,这个标识串是一个64bit的整数,其中包含了创建数据库的时间戳和initdb时初始化的进程号,具体初始化方法可查看源码文件src/backend/access/transam/xlog.c。创建时间可以通过to_timestamp转换查看到(这个时间就是数据库安装的时间)。

Database cluster state: in production 记录实例的状态。源码文件中看到数据库的几种状态,源码在pg_control.h中:

/*
 * System status indicator.  Note this is stored in pg_control; if you change
 * it, you must bump PG_CONTROL_VERSION
 */
typedef enum DBState
{
    DB_STARTUP = 0,
    DB_SHUTDOWNED,
    DB_SHUTDOWNED_IN_RECOVERY,
    DB_SHUTDOWNING,
    DB_IN_CRASH_RECOVERY,
    DB_IN_ARCHIVE_RECOVERY,
    DB_IN_PRODUCTION
} DBState;

含义如下:

  • starting up:表示数据库正在启动状态。
  • shut down:数据库实例(非Standby)正常关闭后控制文件中就是此状态。
  • shut down in recovery:Standby实例正常关闭后控制文件中就是此状态。
  • shutting down:正常停库时,先做checkpoint,开始做checkpoint时,会把状态设置为此状态,做完后把状态设置为shut down。
  • in crash recovery:数据库实例非异常停止后,重新启动后,会先

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.mzph.cn/news/766070.shtml

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

深度学习十大算法之长短时记忆网络(LSTM)

一、长短时记忆网络(LSTM)的基本概念 长短时记忆网络(LSTM)是一种特殊类型的循环神经网络(RNN),主要用于处理和预测序列数据的任务。LSTM由Hochreiter和Schmidhuber于1997年提出,其…

自动驾驶建图--道路边缘生成方案探讨

自动驾驶建图–道路边缘生成方案探讨 一、背景 对于自动驾驶来说,建图是必不可少的,目前主流厂商技术都在从HD到"无图"进行过渡筹备中,不过想要最终实现真正的"无图"还是有很长的一段路要走。 对于建图来说,…

二.寄存器

1. 2. 例如:h即为high(高位),l即为low(低位) 3.一个字是两个字节 4.在写一条汇编指令或一个寄存器的名称时不区分大小写。 5.al,ah,ax在接受汇编指令时,并不相等&…

【计算机毕业设计】基于ssm038框架的网上招聘系统的设计与实现lw7

基于ssm038框架的网上招聘系统的设计与实现lw7: 本课题是基于ssm框架(springMVC,spring,mybatis)的招聘系统,是标准的MVC模式,将系统分为表现层、controller层、service层、DAO层四层,使用spring MVC负责请求的转发和视…

在pycharm中运行程序时总是以tests方式运行

## 问题描述 前两天在使用python写机器学习的算法时,有一个程序一直以Python tests的方式运行,并且一直运行失败,截图如下: 解决方法 到设置中:File->Settings->Tools->Python integrated Tools 文件->…

DBO优化朴素贝叶斯分类预测(matlab代码)

DBO-朴素贝叶斯分类预测matlab代码 蜣螂优化算法(Dung Beetle Optimizer, DBO)是一种新型的群智能优化算法,在2022年底提出,主要是受蜣螂的的滚球、跳舞、觅食、偷窃和繁殖行为的启发。 数据为Excel分类数据集数据。 数据集划分为训练集、验证集、测试…

基于springboot+vue的教学改革项目管理系统(源码+论文)

作者主页:Java码库 主营内容:SpringBoot、Vue、SSM、HLMT、Jsp、PHP、Nodejs、Python、爬虫、数据可视化、小程序、安卓app等设计与开发。 收藏点赞不迷路 关注作者有好处 文末获取源码 技术选型 【后端】:Java 【框架】:spring…

vs2019新建Qt工程中双击 .ui 文件无法打开

vs2019 中创建的 Qt 工程,在使用的过程中,经常会有:双击 .ui 文件,闪退的情况,也即 .ui 文件无法打开! 针对该问题的详细解决步骤如下: 1、右击该 .ui 文件,选择“打开方式” 2、…

6、kubenetes 卷

1、什么是卷 在某些场景下,我们可能希望新的容器可以在之前容器结束的位 置继续运⾏,⽐如在物理机上重启进程。可能不需要(或者不想要) 整个⽂件系统被持久化,但又希望能保存实际数据的⽬录。 Kubernetes通过定义存储…

指尖论文能用吗 #经验分享#微信

指尖论文是一款非常好用、靠谱、方便的论文写作、查重降重工具。无论是学生还是学者,都可以通过指尖论文轻松完成论文写作任务。指尖论文提供了丰富的论文模板和参考资料,让论文写作变得更加简单和高效。 指尖论文还内置了强大的查重和降重功能&#xff…

Centos上安装Harbor并使用

harbor的安装与使用 Harbor介绍安装前的准备工作为Harbor自签发证书安装Harbor安装docker开启包转发功能和修改内核参数安装harbor扩展 Harbor 图像化界面使用说明测试使用harbor私有镜像仓库从harbor仓库下载镜像 Harbor介绍 容器应用的开发和运行离不开可靠的 镜像管理&…

2024年阿里云服务器优惠价格表_一张表清晰明了

2024年腾讯云服务器优惠价格表,一张表整理阿里云服务器最新报价,阿里云服务器网整理云服务器ECS和轻量应用服务器详细CPU内存、公网带宽和系统盘详细配置报价单,大家也可以直接移步到阿里云CLUB中心查看 aliyun.club 当前最新的云服务器优惠券…

Mac上玩《赛博朋克2077》mac电脑怎么玩这个游戏

X用户crushovitz_b最近发现,在《赛博朋克2077》游戏主菜单页面,将鼠标停在版本号选项卡上面足够长时间,就会发现游戏当前的版本号由2.12变为了2.0.77,这是对游戏标题2077的致敬彩蛋。 《赛博朋克2077》的叙事总监兼续集副总监Pawe…

C语言实现三子棋强化学习算法AI,思路详解+完整代码

写个三子棋的强化学习AI玩玩。写这玩意只需要有一点C语言基础就可以了,至于AI部分,也是很好理解的。 三子棋 在3*3的棋盘中,先手方画O,后手方画X,连成3个就赢了。事实上,只需要很简单的试验,你…

大学期末考试搜题软件?这4款足够解决问题 #知识分享#笔记#职场发展

当代大学生面临着繁重的学业压力和海量的知识点,如何高效地进行学习和搜题成了他们关注的焦点。幸运的是,随着科技的不断进步,我们有越来越多的日常搜题和学习软件可以帮助我们更好地应对这些挑战。在本文中,我将为大家介绍10款备…

最新消息!Stable Diffusion核心研究团队已集体辞职!Stable Diffusion 3后可能再无开源

最新消息,Stable Diffusion核心研究团队已集体辞职! 名单包括研究团队领导、论文一作Robin Rombach,共同一作Andreas Blattmann,以及另一位作者Dominik Lorenz合作开发了图像生成模型Stable Diffusion。这项技术帮助Stability AI…

linux下线程分离属性

linux下线程分离属性 一、线程的属性---分离属性二、线程属性设置2.1 线程创建前设置分离属性2.2 线程创建后设置分离属性 一、线程的属性—分离属性 什么是分离属性? 首先分离属性是线程的一个属性,有了分离属性的线程,不需要别的线程去接合…

oracle设置主键自增步骤

设置主键自增步骤: 每一张表都要设置序列,然后设置触发器。比mysql繁琐。 一、设置序列 选中表后,—》 文件—》新建—》其他—》序列. 设置如下四个值即可。 crtls保存。 给序列起个名字,一定要全大写字母。 二、设置触发器…

移相全桥DC-DC变换器

本篇将基于PPEC-86CA3A移相全桥数字电源控制芯片以及PPEC Workbench开发软件带领大家进行实际移相全桥DC-DC变换器的设计与开发 。 一、移相全桥变换器设计与开发 1、外围电路设计与硬件平台搭建 1)外围电路设计 这里给出了PPEC-86CA3A移相全桥数字电源控制芯片的…

校招C++大概学习到什么程度?

游戏引擎、图形学的主要开发语言就是C,所以在面试中回答了了几个C问题。我在面试之前完全没有看过任何面试经验,也没有做过类似的题目。可能是因为招实习生,也可能是因为不是C开发,所以问题我觉得都比较简单。在开始前我有一些资料…