183 lines
5.5 KiB
Transact-SQL
183 lines
5.5 KiB
Transact-SQL
-- 外部接口日志表和 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
|