我想使用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