物理备份还原

联机还原

DM 仅支持表的联机还原,数据库、表空间和归档日志的还原必须通过脱机工具 DMRMAN 执行。

表还原

语法如下:

RESTORE TABLE [<表名>][STRUCT]
[WITH INDEX | WITHOUT INDEX]
[WITH CONSTRAINT|WITHOUT CONSTRAINT]
FROM BACKUPSET'<备份集路径>'
[DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[IDENTIFIED BY <密码>] [ENCRYPT WITH <加密算法>]
[TRACE FILE '<TRACE 文件名>'] [TRACE LEVEL <TRACE 日志级别>];
注意

执行表还原,数据库必须处于 OPEN 状态,MOUNT 和 SUSPEND 状态下不允许执行表还原。表还原不需要配置归档,因为表还原是联机完全备份还原,所以不需要借助本地归档日志进行恢复。

完整的表备份还原步骤如下所示:

  1. 保证数据库为 OPEN 状态。
  2. 创建待备份的表,执行以下命令:
CREATE TABLE TAB_FOR_RES_01(C1 INT);
  1. 备份表数据,执行以下命令:
BACKUP TABLE TAB_FOR_RES_01 BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
  1. 校验备份,执行以下命令:(此步骤为可选)
SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/tab_bak_for_res_01');
  1. 还原表结构,执行以下命令:
restore table struct from backupset '/home/dm_bak/tab_bak_for_res_01';
  1. 还原表数据,执行以下命令:
RESTORE TABLE  FROM BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

指定还原时不重建索引

  1. 保证数据库为 OPEN 状态。
  2. 准备数据,创建待备份的表及索引,执行以下命令:
CREATE TABLE TAB_FOR_IDX_01(C1 INT);
CREATE INDEX I_TAB_FOR_IDX_01 ON TAB_FOR_IDX_01 (C1);

3.备份表数据,执行以下命令:

BACKUP TABLE TAB_FOR_IDX_01 BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

4.校验备份,执行以下命令:(此步骤为可选)

SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/tab_bak_for_res_01');
  1. 还原表结构,执行以下命令:
RESTORE  TABLE    STRUCT  FROM  BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
  1. 还原表数据,但不重建索引,执行以下命令:
RESTORE  TABLE    WITHOUT  INDEX  FROM  BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

指定还原时不重建约束

  1. 保证数据库为 OPEN 状态。
  2. 准备数据,创建待备份的表及索引,执行以下命令:
CREATE TABLE TAB_FOR_CONS_01(C1 INT);
CREATE INDEX I_TAB_FOR_CONS_01 ON TAB_FOR_CONS_01 (C1 INT);
  1. 备份表数据,执行以下命令:
BACKUP TABLE TAB_FOR_CONS_01 BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
  1. 校验备份,执行以下命令:(此步骤为可选)
SELECT SF_BAKSET_CHECK('DISK','/home/dm_bak/tab_bak_for_res_01');
  1. 还原表结构,执行以下命令:
RESTORE  TABLE    STRUCT  FROM  BACKUPSET '/home/dm_bak/tab_bak_for_res_01';
  1. 还原表数据,但不还原约束,执行以下命令:
RESTORE  WITHOUT  CONSTRAINT  FROM  BACKUPSET '/home/dm_bak/tab_bak_for_res_01';

脱机还原

注意

应使用与 DM 的数据库版本配套的 DMRMAN 工具进行操作。用当使用 DM7 的 DMRMAN 工具操作 DM8 数据库时,无法检测 DM8 数据库实例是否处于启动状态。

  • 源库

源库是待备份的数据库。 使用 DMRMAN 工具只可对数据库进行脱机备份,联机备份需要通过 disql 工具实现。DMRMAN 可以针对整个数据库执行脱机完全备份和增量备份,数据库可以配置归档也可以不配置。

  • 目标库

目标库是待还原的数据库,即是用来做还原的库,也称为目标还原库。目标库可以是通过 dm.ini 文件指定的数据库,也可以是目标文件目录。

  • 通过 dm.ini 指定库时,dm.ini 及其配置中的 CTL_PATH 必须有效,且库必须处于关闭状态。
  • 指定文件目录时,指定目录作为 SYSTEM_PATH 处理,可以存在,也可以不存在,但必须有效。

目前目标库的还原仅支持脱机还原,可通过 DMRMAN 和 CONSOLE 工具实现。

启动 DMRMAN

进入数据库安装目录的 bin 目录下,例如 Linux 下的目录为 /opt/dmdbms/bin,执行以下命令:

./dmrman
  • 退出 DMRMAN

在 DMRMAN 命令窗口中执行 exit。

  • DMRMAN 执行脚本文件

如创建一个名为 cmd_file.txt 的文件,文件中包含 BACKUP DATABASE'/opt/dmdbms/data/DAMENG/dm.ini 命令,保存到 /home/dm_cmd 目录下,执行以下命令:

./home/dm_cmd/cmd_file.txt
注意

DMRMAN 是按行解析命令,如果输入一行不完整的命令执行会报错,如一条完整的命令分三行输入会导致报错。

数据库还原

为避免删除重要的文件,还原前务必确保数据库系统路径下未存放无关文件。 执行以下命令:

RESTORE DATABASE <restore_type>[WITH CHECK]
FROM BACKUPSET '<备份集目录>'
[DEVICE TYPE DISK|TAPE[PARMS '<介质参数>']]
[IDENTIFIED BY <密码> [ENCRYPT WITH <加密算法>]]
[WITH BACKUPDIR '<基备份集搜索目录>'{,'<基备份集搜索目录>'}]
[MAPPED FILE '<映射文件>'][TASK THREAD <任务线程数>]
[RENAME TO '<数据库名>'];
<restore_type>::=<type1>|<type2>
<type1>::='<INI 文件路径>'[REUSE DMINI][OVERWRITE]
<type2>::= TO '<system_dbf 所在路径>' [OVERWRITE]
  • 例:联机备份、脱机还原
  1. 联机备份数据库,保证数据库运行在归档模式及 Open 状态。执行以下命令:
BACKUP DATABASE BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
  1. 准备目标库。还原目标库可以是已经存在的数据库,也可使用 dminit 工具初始化一个新库。执行以下命令:
./dminit path=/opt/dmdbms/data db_name=DAMENG_FOR_RESTORE
  1. 启动 RMAN,校验备份,校验待还原备份集的合法性。校验备份有两种方式,联机和脱机,此处使用脱机校验。执行以下命令:
CHECK BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
  1. 还原数据库。启动 DMRMAN,执行以下命令:
RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM
BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
  1. 恢复数据库。启动 DMRMAN,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' FROM BACKUPSET '/home/dm_bak/db_full_bak_for_recover_backupset';
  1. 恢复 db_magic,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' UPDATE DB_MAGIC;
注意

可通过调整 dm.ini 中的和检查点和 REDO 日志相关参数,降低检查点频率,增大 REDO 日志包大小来提升还原性能。

表空间还原

使用 RESTORE 命令完成表空间的脱机还原,还原的备份集可以是联机或脱机生成的库备份集,也可以是联机生成的表空间备份集。脱机表空间还原仅涉及表空间数据文件的重建与数据页的拷贝。不需要事先置目标表空间为 OFFLINE 状态。

表空间还原后,表空间状态被置为 RES_OFFLINE,并设置数据标记 FIL_TS_RECV_STATE_RESTORED,表示经过还原但数据不完整。执行以下命令:

RESTORE DATABASE <INI 路径> TABLESPACE <表空间名> [WITH CHECK]
[DATAFILE<<文件编号> {,<文件编号>} | '<文件路径>' {,'<文件路径>'}>]
FROM BACKUPSET '<备份集路径>' [DEVICE TYPE <介质类型> [PARMS '<介质参数>']]
[IDENTIFIED BY <加密密码>] [ENCRYPT WITH <加密算法>]
[WITH BACKUPDIR '<备份目录>' {,'<备份目录>'}]
[MAPPED FILE '<映射文件>']
[TASK THREAD <线程数>];
  • 以联机表空间备份集为例,展示 DMRMAN 如何完成表空间的还原。
  1. 在 SQL 编辑界面创建表空间,执行以下命令:
CREATE TABLESPACE TS1 DATAFILE 'TS1.DBF' SIZE 128;
  1. 创建表,指定表的存储空间为 TS1,执行以下命令:
CREATE TABLE RCT_BFHF_BKJ (C1 INT) STORAGE(ON TS1);
INSERT INTO RCT_BFHF_BKJ VALUES(1);
Commit;
  1. 联机备份数据库,保证数据库运行在归档模式及 OPEN 状态。执行以下命令:
BACKUP TABLESPACE MAIN BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
  1. 校验备份,校验待还原备份集的合法性(此步骤可选)。校验备份有两种方式,联机和脱机,此处使用脱机校验。执行以下命令:
CHECK BACKUPSET '/home/dm_bak/ts_full_bak_for_restore';
  1. 将表空间脱机,执行以下命令:
ALTER TABLESPACE TS1 OFFLINE;
  1. 还原表空间。需要注意,表空间还原的目标库只能是备份集产生的源库,否则将报错。启动 DMRMAN,执行以下命令:
RESTORE DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE MAIN FROM BACKUPSET '/home/dm_bak/db_full_bak_for_restore';
  1. 恢复表空间。启动 DMRMAN,执行以下命令:
RECOVER DATABASE '/opt/dmdbms/data/DAMENG_FOR_RESTORE/dm.ini' TABLESPACE TS1;
微信扫码
分享文档
扫一扫
联系客服