42 lines
1.6 KiB
SQL
42 lines
1.6 KiB
SQL
|
|
-- v3 达梦升级:为事实事务外的可靠日统计投影建立 Outbox 和消费幂等表。
|
||
|
|
-- 仅在 01 预检通过后执行一次;不要重复执行。
|
||
|
|
|
||
|
|
CREATE TABLE stats_projection_outbox (
|
||
|
|
event_id VARCHAR2(64) NOT NULL,
|
||
|
|
event_schema VARCHAR2(64) NOT NULL,
|
||
|
|
payload CLOB NOT NULL,
|
||
|
|
status VARCHAR2(16) DEFAULT 'PENDING' NOT NULL,
|
||
|
|
attempt_count INT DEFAULT 0 NOT NULL,
|
||
|
|
next_attempt_at TIMESTAMP DEFAULT SYSDATE,
|
||
|
|
published_at TIMESTAMP,
|
||
|
|
applied_at TIMESTAMP,
|
||
|
|
last_error VARCHAR2(2000),
|
||
|
|
created_at TIMESTAMP DEFAULT SYSDATE NOT NULL,
|
||
|
|
updated_at TIMESTAMP DEFAULT SYSDATE NOT NULL,
|
||
|
|
CONSTRAINT pk_stats_projection_outbox PRIMARY KEY(event_id),
|
||
|
|
CONSTRAINT ck_stats_projection_outbox_status
|
||
|
|
CHECK(status IN ('PENDING','FAILED','PUBLISHED','APPLIED'))
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_stats_projection_outbox_due
|
||
|
|
ON stats_projection_outbox(status,next_attempt_at,created_at);
|
||
|
|
|
||
|
|
CREATE TABLE stats_projection_applied_event (
|
||
|
|
event_id VARCHAR2(64) NOT NULL,
|
||
|
|
event_schema VARCHAR2(64) NOT NULL,
|
||
|
|
applied_at TIMESTAMP DEFAULT SYSDATE NOT NULL,
|
||
|
|
CONSTRAINT pk_stats_projection_applied PRIMARY KEY(event_id)
|
||
|
|
);
|
||
|
|
|
||
|
|
CREATE INDEX idx_stats_projection_applied_time
|
||
|
|
ON stats_projection_applied_event(applied_at);
|
||
|
|
|
||
|
|
COMMENT ON TABLE stats_projection_outbox IS
|
||
|
|
'事实批次统计 Outbox;Kafka 发布或消费失败时可持续恢复';
|
||
|
|
COMMENT ON COLUMN stats_projection_outbox.status IS
|
||
|
|
'PENDING/FAILED/PUBLISHED/APPLIED;只有 APPLIED 才允许到期清理';
|
||
|
|
COMMENT ON TABLE stats_projection_applied_event IS
|
||
|
|
'统计投影消费幂等标记;保留时间必须长于 STATS.PROJECTION Topic';
|
||
|
|
|
||
|
|
COMMIT;
|