oracle 碎片整理
-Constants for the options_flag parameter ofstart_redef_table
cons_use_pk CONSTANT PLS_INTEGER := 1;---主鍵重定義
cons_use_rowid CONSTANT PLS_INTEGER :=2;---rowid重定義
config:源表barcode13資料量考慮,需要轉換為分割槽表;
1,測試
SQL> exec dbms_redefinition.can_redef_table('sfcdata','barcode13');
cons_use_pk CONSTANT PLS_INTEGER := 1;---主鍵重定義
cons_use_rowid CONSTANT PLS_INTEGER :=2;---rowid重定義
config:源表barcode13資料量考慮,需要轉換為分割槽表;
1,測試
SQL> exec dbms_redefinition.can_redef_table('sfcdata','barcode13');
PL/SQL procedure successfully completed.
2
建中建表
2
建中建表
create table SFCDATA.BARCODE13_test
(
TOOLSNUM VARCHAR2(10) not null,
YEAR_CODE VARCHAR2(2) not null,
WEEK_CODE VARCHAR2(2) not null,
PLANT_CODE VARCHAR2(3) not null,
SERIALNUM VARCHAR2(4) not null,
ENGINEER_CODE VARCHAR2(3) not null,
REVISION VARCHAR2(1) not null,
CREATEDATE VARCHAR2(8),
CREATETIME VARCHAR2(6),
CREATER VARCHAR2(10),
WORKNO VARCHAR2(20),
BARCODE VARCHAR2(30)
)
partition by range(CREATEDATE)
( PARTITION P20110501 VALUES LESS THAN ('20110501'),
PARTITION P20110901 VALUES LESS THAN('20110901'),
PARTITION P20111201 VALUES LESS THAN('20111201'),
PARTITION P20120201 VALUES LESS THAN('20120201'),
PARTITION P20120401 VALUES LESS THAN('20120401'),
PARTITION P20120501 VALUES LESS THAN('20120501')
);
3,步驟三、開始進行重定義
資料量select count(*) from sfcdata.barcode13
3689834
execute dbms_redefinition.start_redef_table('sfcdata','BARCODE13','BARCODE13_test',null,2);---
資料量select count(*) from sfcdata.barcode13
3689834
execute dbms_redefinition.start_redef_table('sfcdata','BARCODE13','BARCODE13_test',null,2);---
SQL> select count(*) from sfcdata.barcode13;
COUNT(*)
----------
3689834
SQL> select count(*) from sfcdata.barcode13_test;
----------
3689834
SQL> select count(*) from sfcdata.barcode13_test;
COUNT(*)
----------
3689834
並且對錶進行DML操作
----------
3689834
並且對錶進行DML操作
delete sfcdata.barcode13 where barcode='1N1270DGY870D'
步驟四、保證資料的一致性:
execute dbms_redefinition.sync_interim_table('sfcdata','BARCODE13','BARCODE13_test');
步驟五、開始重定義之後,完成重定義之前,需要在中間表上建立與源表對應的索引、外來鍵、觸發器等,而中間表與源表對應的主鍵,如果需要按照主鍵重定義,需要再開始redefine之前建立,如果按照rowid進行重定義,對應主鍵呢?
alter table SFCDATA.BARCODE13_test
add constraint PK_BARCODE13_test primary key (YEAR_CODE, TOOLSNUM, WEEK_CODE, SERIALNUM)
using index
tablespace TBS_SFCDATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 2M
next 2M
minextents 1
maxextents unlimited
pctincrease 0
);
-- Create/Recreate indexes
create index SFCDATA.BARCODE13_testA on SFCDATA.BARCODE13_test (BARCODE, WORKNO)
tablespace TBS_SFCDATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 2M
next 2M
minextents 1
maxextents unlimited
pctincrease 0
);
步驟六、完成重定義
alter table SFCDATA.BARCODE13_test
add constraint PK_BARCODE13_test primary key (YEAR_CODE, TOOLSNUM, WEEK_CODE, SERIALNUM)
using index
tablespace TBS_SFCDATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 2M
next 2M
minextents 1
maxextents unlimited
pctincrease 0
);
-- Create/Recreate indexes
create index SFCDATA.BARCODE13_testA on SFCDATA.BARCODE13_test (BARCODE, WORKNO)
tablespace TBS_SFCDATA
pctfree 10
initrans 2
maxtrans 255
storage
(
initial 2M
next 2M
minextents 1
maxextents unlimited
pctincrease 0
);
步驟六、完成重定義
----完成重定義
SQL> execute dbms_redefinition.finish_redef_table('sfcdata','BARCODE13','BARCODE13_test');
SQL> execute dbms_redefinition.finish_redef_table('sfcdata','BARCODE13','BARCODE13_test');
PL/SQL procedure successfully completed.
desc sfcdata.BARCODE13
/
select table_name,index_name,index_type,status
from user_indexes
where table_name in ('BARCODE13','BARCODE13_TEST');
/
select table_name,index_name,index_type,status
from user_indexes
where table_name in ('BARCODE13','BARCODE13_TEST');
此時的'BARCODE13的索引為SFCDATA.BARCODE13_testA
而非原來SFCDATA.BARCODE13_test,
而非原來SFCDATA.BARCODE13_test,
BARCODE13_TEST的索引由SFCDATA.BARCODE13_test變成SFCDATA.BARCODE13_testA
表結構變成分割槽表的結構,而的BARCODE13_test的結構變成了redefine之前的的LOGIN_USER_DETAIL的普通表結構;
對於觸發器又會是什麼效果呢?
步驟七:
DROP TABLE SFCDATA.BARCODE13_test
步驟八:索引重建
select * from dba_indexes a where a.table_name='BARCODE13'
索引的狀態都是 disable
需要重建
select * from dba_indexes a where a.index_name='PK_BARCODE13'
一,normal索引重建方法
1,複製建立語句
2,刪除索引 drop index indexname
3,把複製索引語句執行下
二,對於unique或者primary key 的刪除處理方法
1, 修改表狀態為disable
ALTER TABLE SFCDATA.BARCODE13
MODIFY PRIMARY KEY DISABLE;
2,刪除索引
drop index SFCDATA.PK_BARCODE13
步驟八:索引重建
select * from dba_indexes a where a.table_name='BARCODE13'
索引的狀態都是 disable
需要重建
select * from dba_indexes a where a.index_name='PK_BARCODE13'
一,normal索引重建方法
1,複製建立語句
2,刪除索引 drop index indexname
3,把複製索引語句執行下
二,對於unique或者primary key 的刪除處理方法
1, 修改表狀態為disable
ALTER TABLE SFCDATA.BARCODE13
MODIFY PRIMARY KEY DISABLE;
2,刪除索引
drop index SFCDATA.PK_BARCODE13
3,修改表主鍵為enable,主鍵索引自動建立
ALTER TABLE SFCDATA.BARCODE13
MODIFY PRIMARY KEY ENABLE;
MODIFY PRIMARY KEY ENABLE;
以上在表和索引都在同一表空間裡
結論:
重定義的方式有2個按照rowid、主鍵;
重定義的過程中可以對錶進行DML操作;
重定義的速度還是挺快的;
重定義需要使用者有一定系統許可權(不知道是不是合適這麼說)、需要一箇中間表(中間表的結構、列名可以與be_organized的表不同)、重定義開始到重定義結束需要在中間表上建一系列約束;重定義完成之後的效果是:
be_organized的表結構、約束資訊與中間表的互相交換,二者資料量一致。
可以普通錶轉為分割槽表;
分割槽表也可以重定義。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/15187685/viewspace-733959/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- oracle表碎片整理Oracle
- oracle碎片整理方法Oracle
- Oracle資料表碎片整理Oracle
- ORACLE碎片整理一(轉載)Oracle
- ORACLE碎片整理二(轉載)Oracle
- Oracle 資料庫碎片整理Oracle資料庫
- Oracle資料庫碎片整理Oracle資料庫
- Oracle資料庫表碎片整理Oracle資料庫
- ORACLE表空間的碎片整理Oracle
- Oracle 資料庫碎片整理(zt)Oracle資料庫
- Oracle資料庫碎片整理(轉)Oracle資料庫
- Oracle 資料庫整理表碎片Oracle資料庫
- oracle表碎片以及整理(高水位線)Oracle
- MySQL表碎片整理MySql
- Oracle 整理表碎片、釋放表的空間Oracle
- MysqL碎片整理優化MySql優化
- mysql之 OPTIMIZE TABLE整理碎片MySql
- windows10系統磁碟碎片整理在哪 win10如何開啟磁碟碎片整理WindowsWin10
- Oracle 表碎片Oracle
- oracle碎片清理Oracle
- 驗證Oracle 10g線上整理碎片索引是否失效過程Oracle 10g索引
- 硬碟加速和磁碟碎片整理軟體硬碟
- MySQL碎片整理小節--例項演示MySql
- MySQL的 data_free,表碎片整理MySql
- MySQL資料碎片的整理和分析MySql
- ORACLE碎片問題Oracle
- Oracle 20c 新特性:Online SecureFiles Defragmentation 線上的 LOB 碎片整理OracleFragment
- 為什麼Linux不需要碎片整理?Linux
- 教你用Ghost整理系統磁碟碎片(轉)
- win10系統無法整理磁碟碎片提示已由其它程式建立了計劃磁碟碎片整理的解決方法Win10
- win10怎麼禁用磁碟整理_win10關閉磁碟碎片整理的方法Win10
- java/android 做題中整理的碎片小貼士(4)JavaAndroid
- win10系統如何關閉磁碟碎片整理計劃Win10
- MySQL關於表碎片整理OPTIMIZE TABLE操作的官方建議MySql
- Sqlserver的表沒有高水位但是有碎片的概念,sqlserver表的碎片的檢視和整理方法SQLServer
- oracle 表碎片太多的處理辦法Oracle
- Oracle表碎片起因及解決辦法Oracle
- oracle注入整理Oracle