重庆分公司,新征程启航
为企业提供网站建设、域名注册、服务器等服务
使用disql执行表空间还原
介绍使用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.