我想使用EXCHANGE PARTITION
對錶a1_crm_query
進行備份。此表格包含具有不同狀態的行,如'錯誤','新'或'完成',如果將有另一個表(a1_crm_query_LOG
),狀態爲'錯誤'和'完成',但我的第一個表(a1_crm_query
)將只用'新'。所有的SQL使用EXCHANGE PARTITION創建備份表
首先創建我的表:
CREATE TABLE ma_user.a1_crm_query (
ID NUMBER PRIMARY KEY,
DATA VARCHAR2(200)
);
然後,我創建第二個表分區。
CREATE TABLE ma_user.a1_crm_query_LOG (
ID NUMBER PRIMARY KEY,
DATA VARCHAR2(200)
)
PARTITION BY LIST (DATA) (
PARTITION DONE_STATUS VALUES ('DONE'),
PARTITION ERROR_STATUS VALUES ('ERROR')
) ;
然後將值插入a1_crm_query
:
INSERT INTO ma_user.a1_crm_query SELECT 1 , CAST('NEW' AS VARCHAR2(200)) FROM dual;
INSERT INTO ma_user.a1_crm_query SELECT 2 , CAST('DONE' AS VARCHAR2(200)) FROM dual;
INSERT INTO ma_user.a1_crm_query SELECT 3, CAST('ERROR' AS VARCHAR2(200)) FROM dual;
現在我想建立日常的過程,應當與「完成」和「錯誤」將所有行插入表a1_crm_query_LOG
,a1_crm_query
應該只有以'新'。
我嘗試使用exchange partition
:
ALTER TABLE ma_user.a1_crm_query_LOG EXCHANGE PARTITION ERROR_STATUS WITH TABLE ma_user.a1_crm_query WITHOUT VALIDATION;
ALTER TABLE ma_user.a1_crm_query_LOG EXCHANGE PARTITION DONE_STATUS WITH TABLE ma_user.a1_crm_query WITHOUT VALIDATION;
但這ERROR_STATUS
分區後,包含所有狀態的所有行。
嗨,秋生!我應該只使用一個應該包含這兩種狀態的_log表。我無法趕上爲什麼移動所有行包括'新' – Jdzel
@Jedzel結帳我的更新。 –
Akio,謝謝,它工作,但表a1_crm_query仍然有'錯誤'和'完成'的行。坦率地說,我沒有看到這種方法的優點。我認爲EXCHANGE PARTITION應該替換INSERT-DELETE操作 – Jdzel