message_queue_his.sql 3.2 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859
  1. -- =============================================
  2. -- MESSAGE_QUEUE_HIS - History table for processed messages
  3. -- This table stores completed (success/failed) messages
  4. -- to keep MESSAGE_QUEUE table light for optimal performance
  5. -- =============================================
  6. CREATE TABLE LAOS_ESIM.MESSAGE_QUEUE_HIS (
  7. ID NUMBER(10) NOT NULL,
  8. MESSAGE_TYPE NUMBER(1) DEFAULT 1 NOT NULL,
  9. RECIPIENT VARCHAR2(500) NOT NULL,
  10. SUBJECT NVARCHAR2(500),
  11. CONTENT NCLOB,
  12. TEMPLATE_CODE VARCHAR2(100),
  13. TEMPLATE_DATA CLOB,
  14. PRIORITY NUMBER(1) DEFAULT 0,
  15. STATUS NUMBER(1) DEFAULT 0 NOT NULL,
  16. SCHEDULED_AT TIMESTAMP,
  17. PROCESSED_AT TIMESTAMP,
  18. RETRY_COUNT NUMBER(3) DEFAULT 0,
  19. MAX_RETRY NUMBER(3) DEFAULT 3,
  20. ERROR_MESSAGE VARCHAR2(2000),
  21. CREATED_BY NUMBER(10),
  22. CREATED_DATE TIMESTAMP DEFAULT SYSTIMESTAMP,
  23. MOVED_DATE TIMESTAMP DEFAULT SYSTIMESTAMP,
  24. CONSTRAINT MESSAGE_QUEUE_HIS_PK PRIMARY KEY (ID)
  25. );
  26. COMMENT ON TABLE LAOS_ESIM.MESSAGE_QUEUE_HIS IS 'History table for processed messages (success/failed)';
  27. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.ID IS 'Original ID from MESSAGE_QUEUE';
  28. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.MESSAGE_TYPE IS 'Message type: 1=Email, 2=SMS, 3=Push';
  29. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.RECIPIENT IS 'Recipient address (email/phone)';
  30. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.SUBJECT IS 'Email subject';
  31. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.CONTENT IS 'Message content';
  32. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.TEMPLATE_CODE IS 'Template code reference';
  33. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.TEMPLATE_DATA IS 'Template parameters (JSON)';
  34. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.PRIORITY IS 'Priority: 1=High, 0=Normal';
  35. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.STATUS IS 'Final status: 2=Success, 3=Failed';
  36. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.SCHEDULED_AT IS 'Scheduled send time';
  37. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.PROCESSED_AT IS 'Actual processing time';
  38. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.RETRY_COUNT IS 'Number of retries attempted';
  39. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.MAX_RETRY IS 'Maximum retries allowed';
  40. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.ERROR_MESSAGE IS 'Error message if failed';
  41. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.CREATED_BY IS 'User who created the message';
  42. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.CREATED_DATE IS 'Original creation date';
  43. COMMENT ON COLUMN LAOS_ESIM.MESSAGE_QUEUE_HIS.MOVED_DATE IS 'Date moved to history';
  44. -- Indexes for reporting and cleanup
  45. CREATE INDEX LAOS_ESIM.MESSAGE_QUEUE_HIS_DATE_IDX ON LAOS_ESIM.MESSAGE_QUEUE_HIS(MOVED_DATE);
  46. CREATE INDEX LAOS_ESIM.MESSAGE_QUEUE_HIS_STATUS_IDX ON LAOS_ESIM.MESSAGE_QUEUE_HIS(STATUS, MOVED_DATE);
  47. CREATE INDEX LAOS_ESIM.MESSAGE_QUEUE_HIS_RECIPIENT_IDX ON LAOS_ESIM.MESSAGE_QUEUE_HIS(RECIPIENT, MOVED_DATE);
  48. -- Optional: Partition by MOVED_DATE for large volume (millions of records)
  49. -- ALTER TABLE LAOS_ESIM.MESSAGE_QUEUE_HIS MODIFY
  50. -- PARTITION BY RANGE (MOVED_DATE)
  51. -- INTERVAL (NUMTOYMINTERVAL(1, 'MONTH'))
  52. -- (PARTITION p_init VALUES LESS THAN (TO_DATE('2024-01-01', 'YYYY-MM-DD')));
  53. -- Cleanup job (run monthly to delete old history)
  54. -- DELETE FROM LAOS_ESIM.MESSAGE_QUEUE_HIS WHERE MOVED_DATE < ADD_MONTHS(SYSDATE, -6);