2.8.?ux_resetwal

2.8.1. 用法
2.8.2. 描述
2.8.3. 选项
2.8.4. 注解

ux_resetwal — 重置一个UXDB数据库集群的预写式日志以及其他控制信息

2.8.1.?用法

ux_resetwal [-f] [-n] [option...] {[-D] datadir}

2.8.2.?描述

ux_resetwal会清除预写式日志(WAL)并且有选择地重置存储在ux_control文件中的一些其他控制信息。如果这些文件已经被损坏,某些时候就需要这个功能。当服务器由于这样的损坏而无法启动时,这只应该被用作最后的手段。

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

这个工具只能被安装服务器的用户运行,因为它要求对数据目录的读写访问。出于安全原因,你必须在命令行中指定数据目录。ux_resetwal不使用环境变量UXDATA

如果ux_resetwal因为无法为ux_control确定有效数据暂停,可以通过指定-f(强制)选项强制它继续。在这种情况下,丢失的数据将被替换为看似合理的值。可以期望大部分域是匹配的,但是下一个 OID、下一个事务 ID 和纪元、下一个多事务 ID 和偏移以及WAL开始位置域可能还是需要人工协助。这些域可以使用下面讨论的选项设置。如果你不能为所有这些域决定正确的值,-f还是可以被使用,但是恢复的数据库还是值得怀疑:一次立即的转储和重新载入是势在必行的。在你转储之前不要在该数据库中执行任何数据修改操作,因为任何这样的动作都可能使破坏更严重。

2.8.3.?选项

-Z

使用分布式文件系统(UXFS)。

-D directory

指定数据库集群的数据目录

-f

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

-n

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

-V
--version

显示版本信息然后退出。

-?
--help

显示帮助然后退出。

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

-c xid,xid

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

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

-e xid_epoch

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

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

-l walfile

手工设置WAL开始地址。

WAL起始地址应该比当前存在于数据目录下ux_wal目录中的劝拿庞蜗菲教ㄗ⒉嵬锯 WAL 段文件名更大。这些名称也是十六进制的并且有三个部分。第一部分是时间线ID并且通常应该被保持相同。例如,如果00000001000000320000004Aux_wal中最大的项,则使用-l 00000001000000320000004B或更高的值。

注意

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

-m mxid,mxid

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

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

-o oid
--next-oid=oid

手工设置下一个OID。

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

-O mxoff
--multixact-offset=mxoff

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

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

-x xid
--next-transaction-id=xid

手工设置下一个事务ID。

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

2.8.4.?注解

这个命令不能在服务器正在运行时被使用。如果在数据目录中发现一个服务器锁文件,ux_resetwal将拒绝启动。如果服务器崩溃那么一个锁文件可能会被留下,在那种情况下你能移除该锁文件来让ux_resetwal运行。但是在你那样做之前,再次确认没有服务器进程仍然存活。

ux_resetwal仅能在具有相同主版本的服务器上使用。

XML 地图 | Sitemap 地图