CORE/tables/logs.sql

64 lines
3.0 KiB
SQL

/*
UPDATE sessions SET log_id = NULL;
UPDATE uploaded_file_sheets SET result_log_id = NULL;
--
DROP TABLE logs_events PURGE;
DROP TABLE logs_lobs PURGE;
DROP TABLE logs_setup PURGE;
DROP TABLE logs PURGE;
--
SELECT * FROM logs ORDER BY 1 DESC;
*/
CREATE TABLE logs (
log_id INTEGER CONSTRAINT nn_logs_log_id NOT NULL, -- NUMBER GENERATED BY DEFAULT AS IDENTITY NOT NULL
log_parent INTEGER,
--
app_id NUMBER(4) CONSTRAINT nn_logs_app_id NOT NULL,
page_id NUMBER(6),
user_id VARCHAR2(30),
flag CHAR(1) CONSTRAINT nn_logs_flag NOT NULL,
--
action_name VARCHAR2(32),
module_name VARCHAR2(48), -- 48 chars, DBMS_APPLICATION_INFO limit
module_line NUMBER(8),
module_time VARCHAR2(12), -- 00:00:00.000 - INTERVAL DAY(1) TO SECOND(3),
arguments VARCHAR2(2000),
payload VARCHAR2(4000),
--
session_id NUMBER,
created_at TIMESTAMP CONSTRAINT nn_logs_created_at NOT NULL,
--
CONSTRAINT pk_logs
PRIMARY KEY (log_id)
--
-- NO MORE CONSTRAINTS TO KEEP THIS AS FAST AS POSSIBLE
--
)
PARTITION BY RANGE (created_at)
INTERVAL (NUMTODSINTERVAL(1, 'DAY')) (
PARTITION P00 VALUES LESS THAN (TIMESTAMP '2021-01-01 00:00:00')
/*
--today VARCHAR2(10) CONSTRAINT nn_logs_today NOT NULL, -- virtual column?
PARTITION BY LIST (today, app_id) AUTOMATIC (
PARTITION "P_20210101_0" VALUES (('2021-01-01', 0)) SEGMENT CREATION IMMEDIATE
*/
);
--
COMMENT ON TABLE logs IS 'Various logs raised in application; daily partitions';
--
COMMENT ON COLUMN logs.log_id IS 'Log ID generated from LOG_ID sequence';
COMMENT ON COLUMN logs.log_parent IS 'Parent log record; dont use FK to avoid deadlocks';
COMMENT ON COLUMN logs.app_id IS 'APEX Application ID';
COMMENT ON COLUMN logs.user_id IS 'User ID';
COMMENT ON COLUMN logs.page_id IS 'APEX Application PAGE ID';
COMMENT ON COLUMN logs.flag IS 'Type of error listed in tree package specification; FK missing for performance reasons';
COMMENT ON COLUMN logs.action_name IS 'Action name to distinguish position in module or use it as warning/error names';
COMMENT ON COLUMN logs.module_name IS 'Module name (procedure or function name)';
COMMENT ON COLUMN logs.module_line IS 'Line in the module';
COMMENT ON COLUMN logs.module_time IS 'Time interval indicating successful finish';
COMMENT ON COLUMN logs.arguments IS 'Arguments passed to module';
COMMENT ON COLUMN logs.payload IS 'Formatted call stack, error stack or query with DML error';
COMMENT ON COLUMN logs.session_id IS 'Session ID (generated by APEX) from sessions table';
COMMENT ON COLUMN logs.created_at IS 'Timestamp of creation';