Files
FTC25009/sql/bas_api_log.sql
2026-06-24 09:13:18 +08:00

183 lines
5.5 KiB
Transact-SQL
Raw Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
-- 外部接口日志表和 30 天保留策略
-- 目标库:FTC25009-WMS
IF OBJECT_ID(N'dbo.bas_api_log', N'U') IS NULL
BEGIN
CREATE TABLE dbo.bas_api_log (
id bigint IDENTITY(1,1) NOT NULL,
direction varchar(16) NOT NULL,
sys_code varchar(50) NULL,
interface_name nvarchar(100) NULL,
request_url nvarchar(500) NULL,
request_method varchar(20) NULL,
request_body nvarchar(max) NULL,
response_body nvarchar(max) NULL,
msg_type varchar(20) NULL,
http_status int NULL,
cost_ms bigint NULL,
status varchar(30) NULL,
error_msg nvarchar(2000) NULL,
source_ip varchar(80) NULL,
trace_id varchar(80) NULL,
create_time datetime2(7) NOT NULL CONSTRAINT DF_bas_api_log_create_time DEFAULT GETDATE(),
CONSTRAINT PK_bas_api_log PRIMARY KEY CLUSTERED(id)
);
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'direction') IS NULL
BEGIN
ALTER TABLE dbo.bas_api_log ADD direction varchar(16) NULL;
EXEC(N'UPDATE dbo.bas_api_log SET direction = ''UNKNOWN'' WHERE direction IS NULL');
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'request_method') IS NULL
BEGIN
ALTER TABLE dbo.bas_api_log ADD request_method varchar(20) NULL;
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'source_ip') IS NULL
BEGIN
ALTER TABLE dbo.bas_api_log ADD source_ip varchar(80) NULL;
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'trace_id') IS NULL
BEGIN
ALTER TABLE dbo.bas_api_log ADD trace_id varchar(80) NULL;
END
GO
IF COLUMNPROPERTY(OBJECT_ID(N'dbo.bas_api_log'), 'id', 'IsIdentity') = 0
AND NOT EXISTS (
SELECT 1
FROM sys.default_constraints dc
JOIN sys.columns c ON c.object_id = dc.parent_object_id AND c.column_id = dc.parent_column_id
WHERE dc.parent_object_id = OBJECT_ID(N'dbo.bas_api_log') AND c.name = N'id'
)
BEGIN
DECLARE @apiLogStartId bigint;
SELECT @apiLogStartId = ISNULL(MAX(CAST(id AS bigint)), 0) + 1 FROM dbo.bas_api_log;
IF OBJECT_ID(N'dbo.seq_bas_api_log_id', N'SO') IS NULL
BEGIN
DECLARE @createSeqSql nvarchar(max) = N'CREATE SEQUENCE dbo.seq_bas_api_log_id AS bigint START WITH '
+ CAST(@apiLogStartId AS nvarchar(30)) + N' INCREMENT BY 1';
EXEC(@createSeqSql);
END;
ALTER TABLE dbo.bas_api_log ADD CONSTRAINT DF_bas_api_log_id DEFAULT (NEXT VALUE FOR dbo.seq_bas_api_log_id) FOR id;
END
GO
IF EXISTS (
SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
AND name = N'request_url'
AND max_length < 1000
)
BEGIN
ALTER TABLE dbo.bas_api_log ALTER COLUMN request_url nvarchar(500) NULL;
END
GO
IF EXISTS (
SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
AND name = N'request_body'
AND system_type_id IN (167, 231)
AND max_length <> -1
)
BEGIN
ALTER TABLE dbo.bas_api_log ALTER COLUMN request_body nvarchar(max) NULL;
END
GO
IF EXISTS (
SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
AND name = N'response_body'
AND system_type_id IN (167, 231)
AND max_length <> -1
)
BEGIN
ALTER TABLE dbo.bas_api_log ALTER COLUMN response_body nvarchar(max) NULL;
END
GO
IF EXISTS (
SELECT 1 FROM sys.columns
WHERE object_id = OBJECT_ID(N'dbo.bas_api_log')
AND name = N'error_msg'
AND system_type_id IN (167, 231)
AND max_length < 4000
)
BEGIN
ALTER TABLE dbo.bas_api_log ALTER COLUMN error_msg nvarchar(2000) NULL;
END
GO
IF NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.bas_api_log') AND name = N'IX_bas_api_log_create_time')
BEGIN
EXEC(N'CREATE INDEX IX_bas_api_log_create_time ON dbo.bas_api_log(create_time)');
END
GO
IF COL_LENGTH(N'dbo.bas_api_log', N'direction') IS NOT NULL
AND NOT EXISTS (SELECT 1 FROM sys.indexes WHERE object_id = OBJECT_ID(N'dbo.bas_api_log') AND name = N'IX_bas_api_log_direction_sys')
BEGIN
EXEC(N'CREATE INDEX IX_bas_api_log_direction_sys ON dbo.bas_api_log(direction, sys_code, create_time DESC)');
END
GO
IF OBJECT_ID(N'dbo.proc_clean_bas_api_log', N'P') IS NOT NULL
BEGIN
DROP PROCEDURE dbo.proc_clean_bas_api_log;
END
GO
CREATE PROCEDURE dbo.proc_clean_bas_api_log
AS
BEGIN
SET NOCOUNT ON;
DELETE FROM dbo.bas_api_log
WHERE create_time < DATEADD(DAY, -30, GETDATE());
END
GO
DECLARE @apiLogJobId bigint = 9010;
DECLARE @jobIdIsIdentity bit = COLUMNPROPERTY(OBJECT_ID(N'dbo.sys_job'), 'job_id', 'IsIdentity');
IF NOT EXISTS (SELECT 1 FROM dbo.sys_job WHERE invoke_target = N'apiLogCleanupTask.cleanExpiredApiLogs()')
BEGIN
IF @jobIdIsIdentity = 1
SET IDENTITY_INSERT dbo.sys_job ON;
INSERT INTO dbo.sys_job (
job_id, job_name, job_group, invoke_target, cron_expression,
misfire_policy, concurrent, status, create_by, create_time, update_by, update_time, remark
)
VALUES (
@apiLogJobId, N'外部接口日志30天清理', N'DEFAULT', N'apiLogCleanupTask.cleanExpiredApiLogs()', N'0 30 2 * * ?',
N'3', N'1', N'0', N'admin', GETDATE(), N'', NULL, N'清理 bas_api_log 中 30 天前的日志'
);
IF @jobIdIsIdentity = 1
SET IDENTITY_INSERT dbo.sys_job OFF;
END
ELSE
BEGIN
UPDATE dbo.sys_job
SET job_name = N'外部接口日志30天清理',
cron_expression = N'0 30 2 * * ?',
misfire_policy = N'3',
concurrent = N'1',
status = N'0',
update_time = GETDATE(),
remark = N'清理 bas_api_log 中 30 天前的日志'
WHERE invoke_target = N'apiLogCleanupTask.cleanExpiredApiLogs()';
END
GO