VastbaseG100

基于openGauss内核开发的企业级关系型数据库。

Menu

使用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~示例3中待恢复的备份文件来自vb_dump的示例4

  • 示例4中待恢复的备份文件来自vb_dumpall的示例2

示例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)