2.2.?转储恢复

ux_dump生成的文本文件可以由uxsql程序读取。从转储中恢复的常用命令是:

uxsql dbname < dumpfile

其中dumpfile就是ux_dump命令的输出文件。这条命令不会创建数据库dbname,用户必须在执行uxsql前以数据库template0为模板创建(例如,用命令createdb -T template0 dbname)。uxsql支持类似ux_dump的选项用以指定要连接的数据库服务器和要使用的用户名。非文本文件转储可以使用ux_restore工具来恢复。

在开始恢复之前,目标库中必须已经存在转储库中对象的拥有者以及在对象上被授予权限的用户。如果它们不存在,那么恢复过程将无法将对象创建成具有原来的所属关系以及权限的状态。

默认情况下,uxsql脚本在遇到一个SQL错误后会继续执行。如果希望在遇到一个SQL错误后让uxsql退出,那么可以设置ON_ERROR_STOP变量来运行uxsql,这将使uxsql在遇到SQL错误后退出并返回状态3:

uxsql --set ON_ERROR_STOP=on dbname < infile

不管怎样,最终将只能得到一个部分恢复的数据库。作为另一种选择,可以指定让整个恢复作为一个单独的事务运行,这样恢复要么完全完成要么完全回滚。这种模式可以通过向uxsql传递-1(数字1)或--single-transaction命令行选项来指定。在使用这种模式时,即使是很小的一个错误也会导致运行了数小时的恢复被回滚。

由于ux_dump和uxsql拥有读写管道的能力,可以直接从一个服务器转储一个数据库到另一个服务器,例如:

ux_dump -h host1 dbname | uxsql -h host2 dbname

重要

ux_dump产生的转储是相对于template0。这意味着在template1中添加的任何语言、过程等都会被ux_dump转储。如果在恢复时使用的是一个自定义的template1,那么必须从template0创建一个空的数据库,正如上面的例子所示。

当恢复完成,建议在每个数据库上运行ANALYZE,这样优化器就有可用的统计数据。

XML 地图 | Sitemap 地图