Oracle並行新增主鍵
環境:Oracle 11.2.0.3
需求:生產庫幾張大的分割槽表,分別有主鍵約束和索引,當定期清理掉過期資料後(基本3個月內資料),global index失效,rebuild耗時成本相對新建大,於是決定先drop再create主鍵,最好是並行執行:
1.直接新增,提示ora-3001:未實施的功能;只能單執行緒建立主鍵
SQL> alter table t add constraint pk_t primary key (object_id) using index online parallel 2; alter table t add constraint pk_t primary key (object_id) using index online parallel 2 ORA-03001: 未實施的功能 SQL> alter table t add constraint pk_t primary key (object_id) using index online; Table altered SQL> alter table t drop primary key; Table altered
2.考慮先並行新增惟一性索引,再新增主鍵
SQL> create unique index pk_t on t(object_id) parallel 2 online; Index created SQL> alter table t add constraint pk_t primary key (object_id); Table altered SQL> alter index pk_t noparallel; Index altered
3.對比主鍵和惟一性索引的區別
SQL> desc t Name Type Nullable Default Comments -------------- ------------- -------- ------- -------- OWNER VARCHAR2(30) Y OBJECT_NAME VARCHAR2(128) Y SUBOBJECT_NAME VARCHAR2(30) Y OBJECT_ID NUMBER DATA_OBJECT_ID NUMBER Y OBJECT_TYPE VARCHAR2(19) Y CREATED DATE Y LAST_DDL_TIME DATE Y TIMESTAMP VARCHAR2(19) Y STATUS VARCHAR2(7) Y TEMPORARY VARCHAR2(1) Y GENERATED VARCHAR2(1) Y SECONDARY VARCHAR2(1) Y NAMESPACE NUMBER Y EDITION_NAME VARCHAR2(30) Y SQL> alter table t drop primary key; Table altered SQL> desc t Name Type Nullable Default Comments -------------- ------------- -------- ------- -------- OWNER VARCHAR2(30) Y OBJECT_NAME VARCHAR2(128) Y SUBOBJECT_NAME VARCHAR2(30) Y OBJECT_ID NUMBER Y DATA_OBJECT_ID NUMBER Y OBJECT_TYPE VARCHAR2(19) Y CREATED DATE Y LAST_DDL_TIME DATE Y TIMESTAMP VARCHAR2(19) Y STATUS VARCHAR2(7) Y TEMPORARY VARCHAR2(1) Y GENERATED VARCHAR2(1) Y SECONDARY VARCHAR2(1) Y NAMESPACE NUMBER Y EDITION_NAME VARCHAR2(30) Y
注意:
對於已有大量資料的表無法並行建立主鍵,可以先並行建立惟一性索引然後再加上主鍵。
主鍵不能為空,惟一性索引可以為空。
另外獲得的一個經驗教訓是:
我們知道oracle監聽關閉後新session無法連線,已經存在的session仍會繼續存活.當我關閉監聽要並行建立索引時提示有重複資料,於是去除重複資料。
納悶的是刪除完重複資料後即刻又出現了重複資料,只是數量較原來少.後來和同事溝通才恍然大悟。oracle監聽關閉原理都明白,真正應用到實踐中還是需要用心體察。最後,在關閉oracle監聽情況下重啟資料庫,再並行建立唯一索引,然後新增對應主鍵,問題終於得到解決.
最後,本案例過程中涉及到的刪除重複資料請參見:http://blog.itpub.net/29119536/viewspace-1661040/
主鍵與主鍵索引關係請參見:http://blog.itpub.net/29119536/viewspace-1661582/
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/30557618/viewspace-1833695/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- 向Mysql主鍵自增長表中新增資料並返回主鍵MySql
- oracle新增主鍵的四種方法:Oracle
- Oracle主鍵Oracle
- mysql-刪除和新增主鍵MySql
- MySQL新增自增主鍵的坑MySql
- Oracle主鍵與複合主鍵的效能分析Oracle
- Oracle並行操作——並行DML操作Oracle並行
- MyBatis在Oracle中插入資料並返回主鍵的問題解決MyBatisOracle
- Oracle並行操作——從序列到並行Oracle並行
- Oracle根據主鍵查詢外來鍵Oracle
- Oracle並行FAQOracle並行
- Oracle的並行Oracle並行
- Oracle 建立主鍵自增表Oracle
- myBatis插入oracle獲取主鍵MyBatisOracle
- oracle 聯合主鍵學習Oracle
- ORACLE設定遞增主鍵Oracle
- 在已存在的表結構上新增主鍵、外來鍵、聯合主鍵、聯合索引的例子索引
- Oracle並行操作——並行查詢(Parallel Query)Oracle並行Parallel
- oracle增加主鍵也不會了Oracle
- oracle的並行世界Oracle並行
- Oracle中的並行Oracle並行
- 獲取不同資料庫新增記錄主鍵值資料庫
- Oracle並行操作——淺議使用並行的時機Oracle並行
- Oracle刪除主鍵保留索引的方法Oracle索引
- Oracle主鍵、唯一鍵與唯一索引的區別Oracle索引
- Oracle並行基礎一Oracle並行
- Oracle並行基礎二Oracle並行
- Oracle Redo 並行機制Oracle Redo並行
- Oracle的並行操作[轉]Oracle並行
- oracle 之 控制oracle RAC 進行並行運算Oracle並行
- js操作 新增刪除table行,並進行重新整理JS
- Oracle-新增一個欄位並設定日期Oracle
- 使用Spring JDBC新增記錄如何返回自增主鍵值SpringJDBC
- MySQL新增列、刪除列,建立主鍵等常用操作總結MySql
- 主鍵與主鍵索引的關係索引
- 通用mapper用oracle序列作為主鍵APPOracle
- Oracle主鍵選擇對插入的影響Oracle
- mybatis入門程式:向資料庫中新增使用者&&自增主鍵和非自增主鍵的返回MyBatis資料庫