使用vsql工具恢复
功能描述
当待恢复的备份文件是由vb_dump或vb_dumpall导出的纯文本格式(FILE.sql)的文件时,可以使用以下两种方式进行备份文件的恢复:
方式一
通过vsql工具的
-f
选项执行文件中的命令进行恢复。方式二
使用vsql连接到数据库后,使用
\i
元命令进行恢复。
注意事项
本节介绍的方式仅用于恢复纯文本格式的备份文件。
使用vsql工具恢复纯文本格式的备份文件时是以追加方式进行导入的。多次导入会造成数据异常。
恢复成功后,建议在每个数据库上运行ANALYZE,优化程序提供有用的统计数据。
vb_dumpall恢复前,必须确保所有必要的表空间目录为空;否则,对于处在非默认位置的数据库,数据库创建会失败。(可以通过vsql工具的
\db
元命令列出所有可用的表空间。)方式二中,
\i
元命令用于从文件中读取内容,并将其当作输入,执行查询。更多vsql下的元命令详见vsql元命令参考。
命令格式
方式一:
vsql -c -d vastbase -p 5432 -f FILE.sql
- -c
只运行单个命令(SQL或internal)并退出。
- -d
连接的数据库名称,默认为vastbase。
- -p
连接的数据库端口号,默认为5432。
- -f
执行文件FILE.sql中的命令,然后退出。
方式二:
\i FILE
使用vsql工具连接到数据库后才能执行
-i
元命令。FILE:待恢复的备份文件名称(包括路径)。
示例
示例1: 恢复备份文件backup4_2.sql。备份时指定了-C,因此恢复时会自行创建名为test4的数据库。
1、使用vsql工具连接至数据库vastbase。
vsql -d vastbase -p 5432 -r
2、删除名为test4的数据库(如果存在)。
请注意当前操作对业务的影响,谨慎操作。
若预先已存在名为test4的数据库,再次导入时会导致数据重复。
drop database if exists test4;
3、执行导入操作。
\i backup4_2.sql
4、导入时会切换连接至test4数据库下,在test4数据库中执行以下语句查询导入结果:
select * from table1;
select * from table2;
select * from table3;
返回结果如下,表示已成功导入test4库,数据库中的每张表都有且仅有一条数据。
name | id
-------+----
alice | 1
(1 row)
name | id
------+----
jack | 2
(1 row)
name | id
------+----
bob | 3
(1 row)
示例2:恢复备份文件backup4_3.sql。备份时指定了-c,表示在导入test4库之前先删除数据库对象。
1、执行以下语句恢复备份文件backup4_3.sql。
vsql -c -d vastbase -p 5432 -f backup4_3.sql
2、连接至数据库test4下。
vsql -d test4 -p 5432 -r
3、使用以下语句查看导入结果:
select * from table1;
select * from table2;
select * from table3;
返回结果如下,表示已成功导入test4数据库,每张表都有且仅有一条数据,并未重复。
name | id
-------+----
alice | 1
(1 row)
name | id
------+----
jack | 2
(1 row)
name | id
------+----
bob | 3
(1 row)
示例3: 新建数据库并恢复备份文件backup4_5.sql。备份时仅备份了所有表的定义(模式)。
1、使用vsql工具连接至数据库vastbase下。
vsql -d vastbase -p 5432 -r
2、创建用于导入的数据库db_test。
create database db_test;
3、切换至数据库db_test下。
\c db_test
4、将备份文件导入到当前数据库中。
\i backup4_5.sql
5、导入完成后,查看导入结果。
select * from table1;
select * from table2;
select * from table3;
返回结果如下,表示已成功将table1、table2、table3导入到数据库db_test中,只包括定义(模式),不包括数据。
name | id
------+----
(0 rows)
name | id
------+----
(0 rows)
name | id
------+----
(0 rows)
示例4: 恢复vb_dumpall导出的示例2,备份文件为bak_all.sql。备份时指定了-c,在重新创建数据库之前,会执行SQL语句清理(删除)这些数据库。因此导入后的表数据不会重复。
1、使用vsql工具连接至数据库vastbase。
vsql -d vastbase -p 5432 -r
2、使用如下语句进行恢复:
\i bak_all.sql
3、恢复完成后,验证恢复效果。
select * from student;
返回结果如下,表示恢复成功。
测试表student的数据完成了导入,并且数据不重复。
stdno | student_age | grade
-------+----------------------+-------
1 | 15.00 | 81
(1 row)