下面介绍一些表还原操作中复杂的还原场景。主要内容包括:
- 指定还原时不重建索引
- 指定还原时不重建约束
1.指定还原时不重建索引
表备份时会默认备份表中的索引,还原时使用RESTORE TABLE…WITHOUT INDEX…语句可选择不还原索引。完整示例如下:
- 保证数据库为OPEN状态。
- 准备数据。创建待备份的表及索引。
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.
- 备份表数据。
SQL> backup table tab_for_idx_01 backupset 'E:\dmdbms\backup\tab_for_idx_01_bak';
操作已执行
已用时间: 00:00:01.099. 执行号:111.
- 校验备份。此步骤为可选。
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.
- 还原表数据,但不重建索引。
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
查询表TAB_FOR_IDX_01的索引就只有聚集索引,而创建的B树索引没有被还原
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…语句可选择还原时不重建约束。完整示例如下:
- 保证数据库为OPEN状态。
- 准备数据。创建待备份的表及索引。
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.
- 备份表数据。
SQL> backup table tab_for_cons_01 backupset 'E:\dmdbms\backup\tab_for_cons_01_bak';
操作已执行
已用时间: 00:00:01.128. 执行号:144.
- 校验备份。此步骤为可选。
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.
- 还原表数据,但不还原约束。
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.
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。




