DM7使用Disql執行表還原的複雜用法

eric0435發表於2020-08-18

下面介紹一些表還原操作中複雜的還原場景。主要內容包括:
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.


來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/26015009/viewspace-2712630/,如需轉載,請註明出處,否則將追究法律責任。

相關文章