DM7使用Disql执行表空间还原

DM7仅支持表空间和表的联机还原,数据库和归档日志的还原必须通过脱机工具DMRMAN执行。本章节主要介绍如何使用DIsql工具还原表空间和表。
下面将介绍使用DIsql工具完成基本的表空间还原操作及实施一些还原策略。主要内容包括:
1. 概述
2. 表空间还原

1. 概述
在DIsql中使用RESTORE语句可以还原表空间,还原表空间需要服务器运行在归档模式下且还原之前需要将表空间脱机。启动DIsql输入以下语句即可还原表空间:

SQL> backup tablespace main to ts_main_bak backupset 'E:\dmdbms\backup\ts_main_bak';
操作已执行
已用时间: 00:00:01.066. 执行号:4.
SQL> alter tablespace main offline;
操作已执行
已用时间: 101.032(毫秒). 执行号:5.
SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak';
操作已执行
已用时间: 316.624(毫秒). 执行号:6.
SQL> alter tablespace main online;
操作已执行
已用时间: 9.330(毫秒). 执行号:7.

指定备份集“E:\dmdbms\backup\ts_main_bak”为绝对路径,如果指定相对路径,服务器自动会在默认备份路径下搜索备份集。

语法如下:

RESTORE TABLESPACE < 表空间名>
[DATAFILE< <文件编号> {,< 文件编号>} | '< 文件路径>' {,'< 文件路径>'}>]
FROM BACKUPSET '< 备份集路径>' [DEVICE TYPE < 介质类型> [PARMS '< 介质参数>']]
[IDENTIFIED BY < 加密密码>] [ENCRYPT WITH < 加密算法>]
[WITH BACKUPDIR '< 备份目录>' {,'< 备份目录>'}]
[WITH ARCHIVEDIR '归档目录'{,'归档目录'}]
[MAPPED FILE '< 映射文件>']
[TRACE FILE ''] [TRACE LEVEL ][TASK THREAD < 线程数>][NOT PARALLEL]
[UNTIL TIME '< 时间串>'] [UNTIL LSN ];

TABLESPACE:指定还原的表空间,除了temp表空间。

DATAFILE:还原指定的数据文件。可以指定数据文件编号或数据文件路径。文件编号,对应动态视图V$DATAFILE中ID列的值;文件路径,对应动态视图V$DATAFILE中PATH或者MIRROR_PATH列的值,也可以仅指定数据文件名称(相对路径),与表空间中数据文件匹配时,会使用SYSTEM目录补齐。

BACKUPSET:指定还原备份集的路径。若指定为相对路径,会在默认备份目录下搜索备份集。

DEVICE TYPE:指存储备份集的介质类型,支持DISK和TAPE,默认DISK。DISK表示备份集存储介质为磁盘,TAPE表示备份集存储介质为磁带。

PARMS:介质参数,只对介质类型为TAPE时有效。

IDENTIFIED BY:加密备份表空间时,用户设置的密码。

ENCRYPT WITH:加密算法。缺省情况下,算法为AES256_CFB。具体包含哪些加密算法请参考表空间备份的参数说明。

WITH BACKUPDIR:指定备份搜索目录,最大长度为256个字节。使用完全备份还原中,若指定的备份集路径为相对路径可通过设置此参数搜索备份集;增量备份还原中设置该参数除上述功能外还用于搜索基备份集。

WITH ARCHIVEDIR:归档日志搜索目录。如果归档日志不在配置文件中指定的目录下,或者归档日志分散在多个目录,此时就需要指定该参数用于搜索归档日志。

MAPPED FILE :指定存放还原目标路径的文件,参考3.3.5.2.1小节。

TRACE FILE: 指定生成的TRACE文件。启用TRACE,但不指定TRACE FILE时,默认在DM数据库系统的log目录下生成DM_SBTTRACE_年月.LOG文件;若使用相对路径,则生成在执行码同级目录下。若用户指定,则指定的文件不能为已经存在的文件,否则报错;也不可以为ASM文件。

TRACE LEVEL:有效值1、2,默认为1表示不启用TRACE,此时若指定了TRACE FILE,会生成TRACE文件,但不写入TRACE信息;为2启用TRACE并写入TRACE相关内容。

TASK THREAD:还原过程中数据处理过程线程的个数,取值范围0~64,默认为4,与备份过程中数据处理过程相对应。若指定为0,则调整为1;若指定超过当前系统主机核数,则调整为当前系统主机核数。

NOT PARALLEL:指定并行备份集使用非并行方式还原。对于非并行备份集,不论是否指定该关键字,均采用非并行还原。

UNTIL TIME:恢复表空间到指定的时间点。主备环境不支持。

UNTIL LSN:恢复表空间到指定的LSN。主备环境不支持。

表空间还原不建议使用UNTIL LSN或者UNTIL TIME,若要使用,则确保备份集生成之后未执行过DDL操作,否则将可能出现不可预知的后果。

使用说明:
1. 支持从非DDL_CLONE的库级备份集和表空间级备份集中还原出指定表空间,若还原目标表空间状态不是RES_OFFLINE或CORRUPT,还原指定表空间中指定数据文件。
2. 备份集路径是指备份集所在目录,其中应包含完整备份数据,包括元数据文件(.meta)和备份片文件(.bak)。
3. 还原前应该先将还原的表空间脱机,只能还原用户表空间。
4. 该功能在配置本地归档后才起作用,若为RAC库中表空间还原,则需要配置REMOTE归档。
5. MPP环境不允许进行表空间还原。
6. 若指定NOT PARALLEL,则认为并行备份不使用并行还原,默认并行备份执行并行还原。对于非并行备份集还原,则忽略。
7. 若未指定UNTIL TIME或者UNTIL LSN,则均还原到最新状态。使用UNTIL TIME(或者UNTIL LSN)的同时不能指定DATAFILE还原,否则报语法错误。
8. OPEN和MOUNT状态下支持表空间还原,SUSPEND状态下则不支持。

2. 表空间还原
本节介绍使用DIsql工具如何还原表空间。本节主要内容包括:
1. 使用表空间完全备份还原表空间
2. 使用表空间增量备份还原表空间
3. 使用数据库备份还原表空间

1.使用表空间完全备份还原表空间
表空间的还原、恢复操作是一次性完成,因此还原后不需要执行恢复操作。使用表空间完全备份还原表空间的完整步骤如下:
1) 配置归档。
2) 保证数据库处于OPEN或MOUNT状态。
3) 备份表空间。

SQL> backup tablespace main to ts_main_bak backupset 'E:\dmdbms\backup\ts_main_bak';
操作已执行
已用时间: 00:00:01.069. 执行号:9.

4) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_main_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_main_bak')
---------- ------------------------------------------------------
1          1

已用时间: 17.741(毫秒). 执行号:10.

5) 修改表空间为脱机。

SQL> alter tablespace main offline;
操作已执行
已用时间: 137.581(毫秒). 执行号:11.

6) 还原表空间。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_main_bak';
操作已执行
已用时间: 276.897(毫秒). 执行号:12.

7) 修改表空间为联机。

SQL> alter tablespace main online;
操作已执行
已用时间: 17.971(毫秒). 执行号:13.

2.使用表空间增量备份还原表空间
在增量备份与基备份同目录情况下,使用增量备份还原表空间步骤与完全备份一致。当增量备份与基备份不在同一个目录下时需要使用RESTORE TABLESPACE…WITH BACKUPDIR语句还原。这里以后面一种情况为例说明使用增量备份还原表空间。步骤如下:
1) 配置归档。
2) 保证数据库处于OPEN或MOUNT状态。
3) 完全备份表空间。

SQL> backup tablespace main to ts_main_full_bak backupset 'E:\dmdbms\backup\ts_main_full_bak';
操作已执行
已用时间: 00:00:01.095. 执行号:35.

4) 多次增量备份表空间。

SQL> begin
2   for i in 1 .. 100 loop
3    insert into t1 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 过程已成功完成
已用时间: 3.383(毫秒). 执行号:36.
SQL> backup tablespace main increment with backupdir 'E:\dmdbms\backup\ts_main_full_bak' backupset 'E:\dmdbms\backup1\ts_main_incr_bak_01';
操作已执行
已用时间: 00:00:01.079. 执行号:37.


SQL> begin
2   for i in 101 .. 200 loop
3   insert into t1 values(i);
4   end loop;
5   end;
6   /
DMSQL 过程已成功完成
已用时间: 1.274(毫秒). 执行号:38.
SQL> alter system switch logfile;
操作已执行
已用时间: 14.166(毫秒). 执行号:0.
SQL> backup tablespace main increment with backupdir 'E:\dmdbms\backup\ts_main_full_bak','E:\dmdbms\backup1\ts_main_incr_bak_01' backupset 'E:\dmdbms\backup2\ts_main_incr_bak_02';
操作已执行
已用时间: 00:00:01.081. 执行号:39.

5) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_main_full_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_main_full_bak')
---------- -----------------------------------------------------------
1          1

已用时间: 20.931(毫秒). 执行号:40.
SQL> select sf_bakset_check('disk','E:\dmdbms\backup1\ts_main_incr_bak_01');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup1\ts_main_incr_bak_01')
---------- ---------------------------------------------------------------
1          1

已用时间: 31.184(毫秒). 执行号:41.
SQL> select sf_bakset_check('disk','E:\dmdbms\backup2\ts_main_incr_bak_02');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup2\ts_main_incr_bak_02')
---------- ---------------------------------------------------------------
1          1

已用时间: 25.171(毫秒). 执行号:42.

6) 修改表空间为脱机

SQL> alter tablespace main offline;
操作已执行
已用时间: 98.420(毫秒). 执行号:43.

7) 使用增量备份E:\dmdbms\backup2\ts_main_incr_bak_02还原表空间。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup2\ts_main_incr_bak_02' with backupdir 'E:\dmdbms\backup\ts_main_full_bak','E:\dmdbms\backup1\ts_main_incr_bak_01';
操作已执行
已用时间: 370.046(毫秒). 执行号:44.

8) 修改表空间为联机。

SQL> alter tablespace main online;
操作已执行
已用时间: 15.717(毫秒). 执行号:45.
SQL> select count(*) from t1;

行号       COUNT(*)
---------- --------------------
1          200

已用时间: 1.345(毫秒). 执行号:46.

3.使用数据库备份还原表空间
使用数据库备份还原表空间可以快速还原一个或多个表空间,而不影响数据库中其他的表空间和对象。在数据库中仅有特定的表空间损坏且没有表空间备份的情况下,可以选择使用此种方式还原。
具体步骤如下:
1) 配置归档。
2) 保证数据库处于OPEN或MOUNT状态。
3) 创建数据库完全备份。

SQL> backup database full to db_jydm_full_bak backupset 'E:\dmdbms\backup\ts_jydm_full_bak';
操作已执行
已用时间: 00:00:01.198. 执行号:50.

4) 校验表空间备份。此步骤为可选,如果确定备份文件合法可不进行备份校验。

SQL> select sf_bakset_check('disk','E:\dmdbms\backup\ts_jydm_full_bak');

行号       SF_BAKSET_CHECK('disk','E:\dmdbms\backup\ts_jydm_full_bak')
---------- -----------------------------------------------------------
1          1

已用时间: 46.115(毫秒). 执行号:51.

5) 修改表空间为脱机。

SQL> alter tablespace main offline;
操作已执行
已用时间: 96.596(毫秒). 执行号:52.

6) 还原表空间。

SQL> restore tablespace main from backupset 'E:\dmdbms\backup\ts_jydm_full_bak';
操作已执行
已用时间: 326.842(毫秒). 执行号:53.

7) 修改表空间为联机。

SQL> alter tablespace main online;
操作已执行
已用时间: 17.338(毫秒). 执行号:54.
SQL> select count(*) from t1;

行号       COUNT(*)
---------- --------------------
1          200

已用时间: 1.969(毫秒). 执行号:55.

发表评论

电子邮件地址不会被公开。