ORACLE11GR2 中使用 IGNORE_ROW_ON_DUPKEY_INDEX
我們經常需要把部分線上系統表的資料進行部分備份,例如門診醫生站和門診收費的中間表outp_orders_costs
建立備份表並 把資料備份過來:
時間A 的時候
點選(此處)摺疊或開啟
-
create table OUTP_ORDERS_COSTS_BAK as
-
select * from OUTP_ORDERS_COSTS ;
-
-
alter table OUTP_ORDERS_COSTS_BAK
-
add constraint PK_OUTP_ORDERS_COSTS_BAK primary key (SERIAL_NO, ORDER_CLASS, ORDER_NO, ITEM_NO);
-
- create index IN1_2_OUTP_ORDERS_COSTS_BAK on OUTP_ORDERS_COSTS_BAK (VISIT_DATE, VISIT_NO);
原始表只保留部分資料:
點選(此處)摺疊或開啟
-
truncate table OUTP_ORDERS_COSTS ;
-
-
-
insert /*+ append */ into OUTP_ORDERS_COSTS
- select * from OUTP_ORDERS_COSTS_BAK where visit_date < sysdate -1;
假設系統又執行了很長時間,OUTP_ORDERS_COSTS 又多了很多資料,有需要清理。
如果直接insert into OUTP_ORDERS_COSTS_BAK 因為時間A 中的部分資料在OUTP_ORDERS_COSTS 和OUTP_ORDERS_COSTS_BAK 都存在,因此可能報錯,例如:
點選(此處)摺疊或開啟
-
SQL> insert /*+ append*/ into OUTP_ORDERS_COSTS_BAK
-
2 select * from OUTP_ORDERS_COSTS ;
-
insert /*+ append*/ into OUTP_ORDERS_COSTS_BAK
-
*
-
ERROR at line 1:
- ORA-00001: unique constraint (HR.PK_OUTP_ORDERS_COSTS_BAK) violated
以前只有寫SQL 把這些資料剝離出來, 例如加個where子句,把兩個表的交集剃掉。例如:
點選(此處)摺疊或開啟
-
into OUTP_ORDERS_COSTS_BAK
-
select *
-
from OUTP_ORDERS_COSTS
-
where (SERIAL_NO, ORDER_CLASS, ORDER_NO, ITEM_NO) not in
-
(select SERIAL_NO, ORDER_CLASS, ORDER_NO, ITEM_NO
- from OUTP_ORDERS_COSTS_BAK);
在ORACLE11GR2 之後,可以這樣:
點選(此處)摺疊或開啟
-
insert /*+ IGNORE_ROW_ON_DUPKEY_INDEX(OUTP_ORDERS_COSTS_BAK,PK_OUTP_ORDERS_COSTS_BAK)*/
-
into OUTP_ORDERS_COSTS_BAK
- select * from OUTP_ORDERS_COSTS ;
處理起來更簡單。
IGNORE_ROW_ON_DUPKEY_INDEX 針對的只要是唯一索引即可,不一定要求一定是主鍵。雖然主鍵一般會有一個唯一性索引。
在使用上可以指定索引名,如上例,也可以指定列名,如下例。
點選(此處)摺疊或開啟
這個提示,是更適合在增量備份中使用。
來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/9036/viewspace-1393307/,如需轉載,請註明出處,否則將追究法律責任。
相關文章
- Oracle11gr2新增提示IGNORE_ROW_ON_DUPKEY_INDEXOracleIndex
- hint IGNORE_ROW_ON_DUPKEY_INDEXIndex
- Oracle11gR2——RAC中的服務Oracle
- oracle11Gr2安裝ASM,使用裸裝置OracleASM
- Oracle11gR2使用RMAN duplicate複製資料庫Oracle資料庫
- Oracle11gR2 RAC配置中各種listener,IP的詳解Oracle
- Oracle11gR2 Active DataGuardOracle
- Oracle11gR2 Dataguard搭建Oracle
- 11G 新特性: 新加的提示IGNORE_ROW_ON_DUPKEY_INDEXIndex
- Oracle11.2新特性之INSERT提示IGNORE_ROW_ON_DUPKEY_INDEXOracleIndex
- oracle11gR2的資料庫示例使用者安裝說明Oracle資料庫
- 把AIX中的Oracle10gR2資料遷移到HP 叢集Oracle11gR2中AIOracle
- Oracle11gr2之orapwd變化Oracle
- 解除安裝Oracle11gr2 for SolarisOracle
- Oracle11gR2官方下載列表Oracle
- Oracle11gr2延遲段建立Oracle
- Oracle11gr2新增版本功能(二)Oracle
- Oracle11gr2新增版本功能(一)Oracle
- Oracle11gr2新增版本功能(三)Oracle
- 【Oracle】Windows安裝oracle11gR2 clientOracleWindowsclient
- linux下安裝oracle11gR2LinuxOracle
- oracle11gR2 警告檔案的位置Oracle
- 在異構平臺配置Oracle11gR2 Streams同時再配置相同平臺的Oracle11gR2 DataguardOracle
- oracle11GR2 RAC節點crash故障分析Oracle
- Oracle11gr2 AUDIT清除功能增強(三)Oracle
- Oracle11gr2新增APPEND_VALUES提示OracleAPP
- Oracle11gr2 AUDIT清除功能增強(四)Oracle
- Oracle11gr2 AUDIT清除功能增強(二)Oracle
- Oracle11gr2 AUDIT清除功能增強(一)Oracle
- Oracle11gr2新增遞迴WITH語句(三)Oracle遞迴
- Oracle11gr2新增遞迴WITH語句(二)Oracle遞迴
- Oracle11gr2新增遞迴WITH語句(一)Oracle遞迴
- Oracle11gR2 效能KPI 定義規則OracleKPI
- Oracle11gr2新增CREATE OR REPLACE FORCE TYPE功能Oracle
- Oracle11gr2資料泵新特性(五)Oracle
- Oracle11gr2資料泵新特性(四)Oracle
- Oracle11gr2資料泵新特性(三)Oracle
- Oracle11gr2資料泵新特性(二)Oracle