使用vsql工具恢复

功能描述

当待恢复的备份文件是由 vb_dump 或vb_dumpall 导出的纯文本格式(FILE.sql)的文件时,可以使用以下两种方式进行备份文件的恢复:

  • 方式一:通过 vsql工具的-f选项执行文件中的命令进行恢复。
  • 方式二:使用 vsql连接到数据库后,使用\i元命令进行恢复。

注意事项

  • 本节介绍的方式仅用于恢复纯文本格式的备份文件。
  • 使用 vsql工具恢复纯文本格式的备份文件时是以追加方式进行导入的。多次导入会造成数据异常。
  • 恢复成功后,建议在每个数据库上运行ANALYZE | ANALYSE,优化程序提供有用的统计数据。
  • vb_dumpall恢复前,必须确保所有必要的表空间目录为空;否则,对于处在非默认位置的数据库,数据库创建会失败。(可以通过vsql工具的\db元命令列出所有可用的表空间。)
  • 方式二中,\i元命令用于从文件中读取内容,并将其当作输入,执行查询。更多vsql下的元命令详见vsql

命令格式

方式一:

vsql -d vexdb -p 5432 -f FILE.sql
  • -d:连接的数据库名称,默认为vexdb。
  • -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工具连接至数据库vexdb。
    vsql -d vexdb -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 -d test4 -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工具连接至数据库vexdb下。
    vsql -d vexdb -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工具连接至数据库vexdb。
    vsql -d vexdb -p 5432 -r
    
  2. 使用如下语句进行恢复:
    \i bak_all.sql
    
  3. 恢复完成后,验证恢复效果。
    select * from student;
    

    返回结果如下,表示恢复成功。
    测试表student的数据完成了导入,并且数据不重复。
    stdno |     student_age      | grade
    -------+----------------------+-------
        1 | 15.00                |    81
    (1 row)
    

需要帮助?

扫码添加企业微信
获得专业技术支持

企业微信二维码
🎯 快速响应💡 专业解答