使用Disql执行表还原的复杂用法

下面介绍一些表还原操作中复杂的还原场景。主要内容包括:
1. 指定还原时不重建索引
2. 指定还原时不重建约束

1.指定还原时不重建索引
表备份时会默认备份表中的索引,还原时使用RESTORE TABLE…WITHOUT INDEX…语句可选择不还原索引。完整示例如下:
1) 保证数据库为OPEN状态。
2) 准备数据。创建待备份的表及索引。

SQL> create table tab_for_idx_01(c1 int);
操作已执行
已用时间: 6.323(毫秒). 执行号:108.
SQL> begin
2   for i in 1 .. 10 loop
3   insert into tab_for_idx_01 values(i);
4   end loop;
5   end;
6   /
DMSQL 过程已成功完成
已用时间: 1.236(毫秒). 执行号:109.

SQL> create index i_tab_for_idx_01 on tab_for_idx_01(c1);
操作已执行
已用时间: 11.300(毫秒). 执行号:110.

3) 备份表数据。

SQL> backup table tab_for_idx_01 backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
操作已执行
已用时间: 00:00:01.099. 执行号:111.

4) 校验备份。此步骤为可选。

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

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

已用时间: 20.171(毫秒). 执行号:112.

5) 还原表数据,但不重建索引。

SQL> restore table tab_for_idx_01 without index from backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
restore table tab_for_idx_01 without index from backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
[-8327]:还原表中存在二级索引或冗余约束.
已用时间: 31.373(毫秒). 执行号:0.
SQL> restore table tab_for_idx_01 struct from backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
操作已执行
已用时间: 44.737(毫秒). 执行号:125.
SQL> restore table tab_for_idx_01 without index from backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
操作已执行
已用时间: 78.096(毫秒). 执行号:126.
SQL> select * from tab_for_idx_01;

行号       C1
---------- -----------
1          1
2          2
3          3
4          4
5          5
6          6
7          7
8          8
9          9
10         10

SQL> select owner,table_name,index_name from dba_indexes where owner='SYSDBA' and table_name='TAB_FOR_IDX_01';

行号       OWNER  TABLE_NAME     INDEX_NAME
---------- ------ -------------- -------------
1          SYSDBA TAB_FOR_IDX_01 INDEX33555549

已用时间: 35.494(毫秒). 执行号:132.

2.指定还原时不重建约束
表备份时会默认备份表中的索引定义,还原时使用RESTORE TABLE…WITHOUT CONSTRAINT…语句可选择还原时不重建约束。完整示例如下:
1) 保证数据库为OPEN状态。
2) 准备数据。创建待备份的表及索引。

SQL> create table tab_for_cons_01(c1 int);
操作已执行
已用时间: 4.824(毫秒). 执行号:134.
SQL> alter table tab_for_cons_01 add constraint unique_cons1 unique(c1);
操作已执行
已用时间: 7.979(毫秒). 执行号:135.
SQL> select owner,table_name,index_name from dba_indexes where owner='SYSDBA' and table_name='TAB_FOR_CONS_01';

行号       OWNER  TABLE_NAME      INDEX_NAME
---------- ------ --------------- -------------
1          SYSDBA TAB_FOR_CONS_01 INDEX33555551
2          SYSDBA TAB_FOR_CONS_01 INDEX33555552

已用时间: 32.121(毫秒). 执行号:136.

SQL> select owner,constraint_name,constraint_type,table_name from dba_constraints where owner='SYSDBA' and table_name='TAB_FOR_CONS_01';

行号       OWNER  CONSTRAINT_NAME CONSTRAINT_TYPE TABLE_NAME
---------- ------ --------------- --------------- ---------------
1          SYSDBA UNIQUE_CONS1    U               TAB_FOR_CONS_01

已用时间: 17.818(毫秒). 执行号:138.
SQL> begin
2   for i in 1 .. 10 loop
3   insert into tab_for_cons_01 values(i);
4   end loop;
5   commit;
6   end;
7   /
DMSQL 过程已成功完成
已用时间: 3.485(毫秒). 执行号:143.

3) 备份表数据。

SQL> backup table tab_for_cons_01 backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
操作已执行
已用时间: 00:00:01.128. 执行号:144.

4) 校验备份。此步骤为可选。

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

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

已用时间: 33.044(毫秒). 执行号:145.

5) 还原表数据,但不还原约束。

SQL> truncate table tab_for_cons_01;
操作已执行
已用时间: 5.036(毫秒). 执行号:146.
SQL> select * from tab_for_cons_01;
未选定行

已用时间: 1.542(毫秒). 执行号:147.
SQL> restore table tab_for_cons_01 without constraint from backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
restore table tab_for_cons_01 without constraint from backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
[-8327]:还原表中存在二级索引或冗余约束.
已用时间: 33.927(毫秒). 执行号:0.
SQL> restore table tab_for_cons_01 struct from backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
操作已执行
已用时间: 38.765(毫秒). 执行号:149.
SQL> restore table tab_for_cons_01 without constraint from backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
操作已执行
已用时间: 75.178(毫秒). 执行号:150.
SQL> select * from tab_for_cons_01;

行号       C1
---------- -----------
1          1
2          2
3          3
4          4
5          5
6          6
7          7
8          8
9          9
10         10

10 rows got

已用时间: 2.870(毫秒). 执行号:151.
SQL>  select owner,table_name,index_name from dba_indexes where owner='SYSDBA' and table_name='TAB_FOR_CONS_01';

行号       OWNER  TABLE_NAME      INDEX_NAME
---------- ------ --------------- -------------
1          SYSDBA TAB_FOR_CONS_01 INDEX33555551

已用时间: 21.005(毫秒). 执行号:152.

查询约束发现确实没有被还原

SQL> select owner,constraint_name,constraint_type,table_name from dba_constraints where owner='SYSDBA' and table_name='TAB_FOR_CONS_01';
未选定行

已用时间: 9.087(毫秒). 执行号:153.

发表评论

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