
# 逻辑解码数据找回功能
逻辑解码对外提供单节点DML数据找回能力，从WAL日志是否归档的角度分为在线日志找回和归档日志找回：
- 在线数据找回：使用pg_logical_get_area_changes函数，可以在线找回相关DML数据，具体使用参考pg_logical_get_area_changes函数的使用方法。
- 归档数据找回：OM_Agent通过pg_logical_get_area_changes函数提供OBS上归档日志的找回能力，OM_Agent从OBS下载已经归档的日志到对应节点上，并创建与WAL日志文件前8位同名的文件夹。解码完成后，将找回的数据存入文件并返回路径。
#### 约束
1. 解析的WAL日志级别为logical。
2. 数据表的复制标识必须为FULL，否则UPDATE和DELETE操作涉及到的被修改行不是全字段。
3. WAL日志记录的数据修改操作所对应的业务表，从找回起始位置到目前不能执行VACUUM FULL操作，否则该表VACUUM FULL之前的DML操作不会被数据找回。
4. 每条WAL日志不能超过500MB。
5. 不支持扩容前的Xlog日志数据找回。
6. 集群的每个分片都会生成一个结果文件，多个文件不会进行合并。
7. 仅支持归档数据找回，且需要开启归档，若数据尚未归档，则无法通过本接口找回。
8. OM_Agent在下载之前会验证本地已用空间是否大于总空间的80%，如果大于则会报错（需要额外空间用于存放解码文件），报错信息为："no enough space left on device, available space must be greater than 20%"。
9. 下载失败或解码失败后，都会将下载的WAL日志文件进行清理，如果清理不成功，不会强制结束程序，只会把错误信息记录到DN的日志中。
10. 由用户传入的时间，起始时间不能超出系统表gs_txn_lsn_time的最大时间，终止时间不能超过系统表gs_txn_lsn_time的最小时间，否则将会报错。
11. 如果进行了节点替换，不支持节点替换前的数据找回。
12. 不支持同一节点并发调用数据找回接口。
13. 只支持直连DN方式的数据找回。
14. 旧版本升级提交到新版本时，如果未基线化，则需要执行基线化（执行SELECT gs_logical_dictionary_disabled()和SELECT gs_logical_dictionary_baseline()函数）后才可以使用数据找回功能，且只支持对基线化后新产生的Xlog日志进行数据找回，升级前产生的Xlog日志无法解析。
15. 默认支持1年内的数据找回，超过1年的数据将被自动清除。如需找回超过1年的数据，需在清理前调整GUC参数logical_replication_dictionary_retention_time的值。
16. 数据找回功能依赖表的元数据信息，如果元数据异常，数据找回可能无法正常执行并报错退出。
17. 数据找回功能不支持事务粒度找回，仅支持按行找回。回滚事务会打印事务XID，需人工处理；混合事务中的DML语句找回数据，需人工核对正确性。
 
