-- 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;