如何截断具有两个月以上数据的分区?
例如,我有下面的表/分区名称:
select table_name, partition_name from all_tab_partitions where table_name='TABLENAME';
TABLENAME partitionname1_P30 30
TABLENAME partitionname2_P60 60
TABLENAME partitionname3_P90 90
TABLENAME partitionname4_P120 120
TABLENAME partitionname5_P150 150
TABLENAME partitionname6_P180 180
TABLENAME partitionname7_210 210
TABLENAME partitionname8_P240 240
TABLENAME partitionname9_P270 270
TABLENAME partitionname10_P300 300
TABLENAME partitionname11_P330 330
TABLENAME partitionname12_P360 360
表每月进行分区。如果我们当前在9月,该如何截断两个月以上的分区?
期望的是,只有Aug-Sep(分区名8-9)中的记录会保留,而其余部分将被截断。
CREATE TABLE dbo1.TABLENAME
( PARTITION_ID NUMBER(4, 0) NOT NULL,
TABLE_DATE DATE NOT NULL,
TABLE_TIMESTAMP NUMBER(19, 0) NOT NULL,
TABLE_BUNDLE_ID VARCHAR2(240 BYTE) NOT NULL,
TABLE_TYPE NUMBER(8, 0) NOT NULL,
TABLE_SEVERITY NUMBER(19, 0) NOT NULL,
TABLE_FACILITY NUMBER(19, 0) NOT NULL,
TABLE_HOST VARCHAR2(120 BYTE) NOT NULL,
TABLE_PROCESS VARCHAR2(240 BYTE) NOT NULL,
TABLE_SYSTEM VARCHAR2(240 BYTE) NOT NULL,
TABLE_SESSION_ID VARCHAR2(240 BYTE) NOT NULL,
TABLE_PRINCIPAL VARCHAR2(120 BYTE) NOT NULL,
OBJECT_ID VARCHAR2(120 BYTE),
OBJECT_TYPE VARCHAR2(2 BYTE),
CLIENT_HOST VARCHAR2(120 BYTE),
ACCESS_HOST VARCHAR2(120 BYTE),
SCOPE_ID VARCHAR2(120 BYTE),
STATUS NUMBER(19, 0),
OBJECT_HISTORY NUMBER(19, 0),
TABLE_DETAILS VARCHAR2(4000 BYTE)
)
PARTITION BY RANGE (PARTITION_ID)
(
PARTITION partitionname1_P30 VALUES LESS THAN (30)
,<repeat partition by 30s up to 360, total of 12 partitions>
答案 0 :(得分:0)
您可以这样做:
class HomePage(Page):
body = RichTextField(blank=True)
def special_events(self):
return EventPage.objects.descendant_of(self)
这将适用于基于RANGE或INTERVAL的分区,但是在这种情况下,您的需求将毫无用处,因为您将永远保留空分区。通常,您会删除旧的分区,为此只需将const chargeCard = async (
stripeToken,
amount,
currency,
phoneNumber,
animalName,
numberOfHorses
) => {
try {
const charge = await
stripe.charges.create({
amount: amount.replace('.', ''),
currency: currency,
description: `Charge from ${phoneNumber} for ${animalName}`,
source: stripeToken,
metadata: {
phoneNumber,
animalName,
numberOfHorses
}
});
return charge;
} catch (error) {
console.log(error);
logger.error(error);
return error;
}
}
替换为DECLARE
CURSOR PartTables IS
SELECT TABLE_NAME, PARTITION_NAME, HIGH_VALUE
FROM USER_TAB_PARTITIONS
WHERE TABLE_NAME = 'TABLENAME';
highValue TIMESTAMP;
BEGIN
FOR aTab IN PartTables LOOP
EXECUTE IMMEDIATE 'BEGIN :ret := '||aTab.HIGH_VALUE||'; END;' USING OUT highValue;
IF highValue < ADD_MONTHS(SYSDATE, -2) THEN
EXECUTE IMMEDIATE 'ALTER TABLE TABLENAME TRUNCATE PARTITION '||aTab.PARTITION_NAME||' UPDATE INDEXES';
END IF;
END LOOP;
END;
。
如果您的分区基于LIST,即月号,解决方案将是这样:
TRUNCATE
根据您奇怪的分区定义,条件将是
DROP
但是如果您在12月26日至31日之间运行该过程,则可能会遇到问题。