Hubert 'depesz' Lubaczewski:在给定的WAL LSN范围内哪些表被修改?
💡
原文英文,约1900词,阅读约需7分钟。
📝
内容提要
数据库故障转移导致CDC工具未能解码并发送给Debezium的WAL数据。需要查看WAL流中是否有未被看到的表被修改,并获取其ID/位置。数据量约为3kB。获取WAL文件名称可用于进一步处理。
🎯
关键要点
- 数据库故障转移导致CDC工具未能解码WAL数据。
- 需要查看WAL流中未被Debezium看到的表及其ID/位置。
- 数据量约为3kB,获取WAL文件名称用于进一步处理。
- 通过查询获取WAL文件名称,确认所有需要的WAL在同一个文件中。
- 如果起始LSN不同,需要获取更多WAL文件。
- WAL文件可能在pg_wal目录中,也可能需要从WAL归档中恢复。
- 使用pg_waldump程序查看WAL内容,重点关注Heap/Heap2行。
- 根据描述判断修改操作类型,如DELETE、INSERT、UPDATE等。
- 通过OID查询获取被修改表的名称。
- 如果表在LSN范围内被重写,可能会导致查找变得复杂。
❓
延伸问答
数据库故障转移后,如何确认哪些表被修改?
可以通过查询WAL流中未被Debezium看到的表及其ID/位置来确认被修改的表。
如何获取WAL文件的名称?
可以使用查询 `SELECT pg_walfile_name('起始LSN')` 和 `SELECT pg_walfile_name('结束LSN')` 来获取WAL文件的名称。
WAL文件可能存放在哪里?
WAL文件可能在pg_wal目录中,也可能需要从WAL归档中恢复。
如何使用pg_waldump查看WAL内容?
可以使用命令 `pg_waldump --start=起始LSN --end=结束LSN WAL文件名` 来查看指定范围内的WAL内容。
如何判断WAL记录的修改操作类型?
可以通过查看WAL记录中的描述字段,识别操作类型,如DELETE、INSERT、UPDATE等。
如果表在LSN范围内被重写,会有什么影响?
如果表在LSN范围内被重写,可能会导致查找变得复杂,因为其relfilenode会改变。
➡️