金仓数据库KingbaseES服务器应用参考手册--7. sys_resetwal

7.1. 简介:

sys_resetwal— 重置一个KingbaseES数据库集簇的预写式日志以及其他控制信息

sys_resetwal会清除预写式日志(WAL)并且有选择地重置一部分存储在sys_control文件中的控制信息。如果控制文件已经被损坏,可能就需要这个功能。这只应该被用作控制文件损坏导致服务器无法启动时最后的手段。

在运行这个命令之后,就可能可以启动服务器,但是数据库可能包含部分提交事务产生的不一致数据。此时应当立刻转储数据、运行initdb并且重新载入。重新载入后,再检查不一致的数据并且据此进行修复。

sys_resetwal只能由安装服务器的用户运行,因为它需要对数据目录的读写访问权限。出于安全原因,使用时必须在命令行中指定数据目录。sys_resetwal不使用环境变量KINGBASE_DATA

如果sys_resetwal提示无法为sys_control决定合法数值,可以通过指定-f(强制)选项强制它继续。在这种情况下,丢失的数值会设置为一些程序猜测可能合理的值。

可以期望大部分值是合理的,但是下一个OID、下一个事务 ID 和纪元、下一个多事务 ID 和偏移以及 WAL 文件开始位置可能还是需要人工协助。这些域可以使用下面讨论的选项设置。

如果无法为所有这些域决定正确的值,仍然可以使用-f,但是恢复的数据库不能直接投入使用:必须立即进行一次转储和重新载入。在完成转储之前不要在该数据库中执行任何数据修改操作,因为任何这样的动作都可能使破坏更严重。

7.2. 命令行参数:

sys_resetwal [ --force | -f ] [ --dry-run | -n ] [option...] [ --kingbase_data | -D ] datadir

7.3. 参数说明:

-f

--force

即使sys_resetwal无法从sys_control中确定有效的数据(如前面所解释的),也强迫sys_resetwal继续运行。

-n

--dry-run

-n/--dry-run选项指示sys_resetwal打印从sys_control重构出来的值以及要被改变的值,然后不修改任何东西退出。这主要是一个调试工具,但是可以用来在允许sys_resetwal真正执行下去之前进行完整性检查。

-V

--version

显示版本信息然后退出。

-?

--help

显示帮助然后退出。

只有当sys_resetwal无法通过读取sys_control确定合适的值时,才需要下列选项。安全值可以按下文所述来确定。对于接收数字参数的值,可以使用前缀0x指定 16 进制值。

-c xid,xid

--commit-timestamp-ids=min_xid,max_xid

手工设置提交时间可以检索到的最老的和最新的事务 ID。

能检索到提交时间的最老事务 ID 的安全值(第一部分)可以通过在数据目录下sys_commit_ts目录中数字上最小的文件名来决定。反过来,能检索到提交时间的最新事务 ID 的安全值(第二部分)可以通过同一个目录中数字上最大的文件名来决定。文件名都是十六进制的。

-e xid_epoch

--epoch=xid_epoch

手工设置下一个事务 ID 的 epoch。

事务 ID 的 epoch 实际上并没有存储在数据库中的任何地方,除了被sys_resetwal设置在这个域中,所以只要关心的是数据库本身,任何值都可以用。你可能需要调整这个值来确保诸如Slony-I和Skytools之类的复制系统正确地工作 — 如果确实需要调整,应该可以从下游的复制数据库的状态中获得一个合适的值。

-l walfile

--next-wal-file=walfile

通过指定下一个WAL段文件名称来手工设置WAL开始位置。

下一个WAL段文件的名称应该比当前存在于数据目录下sys_wal目录中的任意 WAL 段文件名更大。这些名称也是十六进制的并且有三个部分。第一部分是“时间线 ID”并且通常应该被保持相同。例如,如果00000001000000320000004Asys_wal中最大的项,则使用-l 00000001000000320000004B或更高的值。

注意在使用非默认WAL段尺寸时,WAL文件名中的数字与系统函数和系统视图报告的LSN不同。这个选项要的是WAL文件名而不是LSN。

注意

sys_resetwal本身查看sys_wal中的文件并选择一个超出最新现存文件名的默认-l设置。因此,只有当你知道 WAL 段文件当前不在sys_wal中时,或者当sys_wal的内容完全丢失时,才需要对-l的手工调整,例如一个离线归档中的项。

-m mxid,mxid

--multixact-ids=next_mxid,min_mxid

手工设置下一个和最老的多事务 ID。

确定下一个多事务 ID(第一部分)的安全值的方法:在数据目录下的sys_multixact/offsets目录中查找最大的数字文件名,然后在它的基础上加一并且乘以 65536 (0x10000)。反过来,确定最老的多事务 ID(-m的第二部分)的方法:在同一个目录中查找最小的数字文件名并且乘以 65536。文件名是十六进制的数字,因此实现上述方法最简单的方式是以十六进制指定选项值并且追加四个零。

-o oid

--next-oid=oid

手工设置下一个 OID。

没有相对容易的方法来决定超过数据库中最大 OID 的下一个 OID。但幸运的是正确地得到下一个 OID 设置并不是决定性的。

-O mxoff

--multixact-offset=mxoff

手工设置下一个多事务偏移量。

确定安全值的方法:查找数据目录下sys_multixact/members目录中最大的数字文件名,然后在它的基础上加一并且乘以 52352 (0xCC80)。文件名是十六进制数字。没有像其他选项那样追加零的简单方法。

--wal-segsize=wal_segment_size

设置新的WAL段尺寸,以兆字节为单位。这个值必须被设为2的1次幂和1024次幂(兆字节)之间。更多信息请参考 initdb 的相同选项。

注意

虽然sys_resetwal将把WAL起始地址设置成超过最新的现有WAL段文件,但一些段尺寸的改变可能导致之前的WAL文件名被重用。如果WAL文件名重叠会导致归档策略出现问题,推荐把-l和这个选项一起使用来手动设置WAL起始地址。

-x xid

--next-transaction-id=xid

手工设置下一个事务 ID。

确定安全值的方法:在数据目录下的sys_xact目录中查找最大的数字文件名,然后在它的基础上加一并且乘以 1048576 (0x100000)。注意文件名是十六进制的数字。通常以十六进制的形式指定该选项值也是最容易的。例如,如果0011sys_xact中的最大项,-x 0x1200000就可以(五个尾部的零就表示了前面说的乘数)。

7.4. 环境变量:

SYS_COLOR

指定是否在诊断消息中使用颜色。可能的值是always , autonever.

7.5. 错误信息诊断:

7.6. 备注:

这个命令不能在服务器正在运行时被使用。如果在数据目录中发现一个服务器锁文件,sys_resetwal将拒绝启动。

如果服务器崩溃那么一个锁文件可能会被留下,在那种情况下你能移除该锁文件来让sys_resetwal运行。

但是在你那样做之前,再次确认没有服务器进程仍然存活。 sys_resetwal仅能在具有相同主版本的服务器上使用。

7.7. 参考:

sys_controldata

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值