【openGauss技术文章征集 openGauss 3.0:闪回恢复

<p>闪回概念是 Oracle 最先提出来的,其本质是为了回退错误操作产生的,避免人为的“灾难”,并且要能够快速回退。</p></p> <p>闪回恢复功能是数据库恢复技术的一环,可以有选择性的撤销一个已提交事务的影响,将数据从人为不正确的操作中进行恢复。在采用闪回技术之前,只能通过备份恢复、PITR 等手段找回已提交的数据库修改,恢复时长需要数分钟甚至数小时。采用闪回技术后,恢复已提交的数据库修改前的数据,只需要秒级,而且恢复时间和数据库大小无关。</p> <p>openGauss 的闪回分为一下两类:</p> <ul><li>闪回查询</li> <li>闪回表</li></ul> <h3>一、闪回查询</h3> <p>基于 MVCC 多版本的数据恢复:适用于误删除、误更新、误插入数据的查询和恢复,用户通过配置旧版本保留时间,并执行相应的查询或恢复命令,查询或恢复到指定的时间点或 CSN 点。</p> <p>前提条件(下面三个缺一不可)</p> <p>undo_retention_time:参数用于设置 undo 旧版本的保留时间。</p> <p>undo_zone_count=16384 ---代表的时候 undo log 的一种资源个数</p> <p>enable_default_ustore_table=on --默认指定用户创建表时使用 USTORE 存储引擎。</p> <p>存储引擎:Ustore Ustore 存储引擎将最新版本的“有效数据”和历史版本的“垃圾数据”分离存储。将最新版本的“有效数据”存储在数据页面上,并单独开辟一段 UNDO 空间,用于统一管理历史版本的“垃圾数据”,因此数据空间不会由于频繁更新而膨胀,“垃圾数据”集中回收效率更高。</p> <p>设置参数命令如下:</p> <p><code>gs_guc set -N all -I all -c "undo_retention_time=2000s" gs_guc set -N all -I all -c "undo_zone_count=16384" gs_guc set -N all -I all -c "enable_default_ustore_table=on"