1. 数据异常跟踪

由于不知道数据异常的原因,所有就只能在异常数据的表或存储过程中添加跟踪日志。

--首先创建日志表
CREATE TABLE [dbo].[mps_debug_inputbuffer](
    [EventType] [nvarchar](30) NULL,
    [Parameters] [smallint] NULL,
    [EventInfo] [nvarchar](4000) NULL
) ON [PRIMARY]

GO
--在要跟踪的表(触发器)或存储过程中添加如下代码
insert into mps_debug_inputbuffer
exec('dbcc INPUTBUFFER( @@SPID )')

-- 异常时查询原因
select * from mps_debug_inputbuffer

1.1. 实例

比如记录权限设置的表出现数据异常的情况,可用触发器记录原因

CREATE TABLE dbo.mps_permission_log (
    mp_logid int NOT NULL  primary key IDENTITY(1,1),
    mp_id     int NOT NULL,
    mp_cmpid int NULL DEFAULT ((0)),
    mp_type varchar(20) NULL DEFAULT (''),
    mp_ctgid int NULL DEFAULT ((0)),
    mp_group int NULL DEFAULT ((0)),
    mp_ppid int NULL DEFAULT ((0)),
    mp_objid1 int NULL DEFAULT ((0)),
    mp_objid2 int NULL DEFAULT ((0)),
    mp_caption nvarchar(200) NULL DEFAULT (''),
    mp_sql nvarchar(2000) NULL DEFAULT (''),
    mp_order int NULL DEFAULT ((0)),
    mp_updated int NULL DEFAULT ((0)),
    mp_level int NOT NULL DEFAULT ((0)),
    [mp_EventType] [nvarchar](30) NULL,
    [mp_Parameters] [smallint] NULL,
    [mp_EventInfo] [nvarchar](4000) NULL,
  mp_operatedate datetime default(getdate()),
  mp_hostname varchar(100) default(''),
    mp_loginname varchar(100) default(''),
    mp_logintime datetime,
    mp_programe_name nvarchar(100) default('')
);
GO
ALTER  trigger [dbo].[mps_permission_delete] on [dbo].[mps_permission] for delete as
begin

        declare @cmpid int 
        select top 1 @cmpid = mp_cmpid from  deleted 
        set @cmpid = isnull(@cmpid,0)

        if (not exists (select 1 from mps_command where cmd_cmpid=@cmpid and cmd_code='rightPart')) 
        begin
            insert into mps_command(cmd_code,cmd_cmpid) values('rightPart',@cmpid) 
        end 

        declare @t table (
            [EventType] [nvarchar](30) NULL,
            [Parameters] [smallint] NULL,
            [EventInfo] [nvarchar](4000) NULL
        ) 

        insert into @t
        exec('dbcc INPUTBUFFER( @@SPID )')

        insert into mps_permission_log(
                mp_id,
                mp_cmpid,
                mp_type,
                mp_ctgid,
                mp_group,
                mp_ppid,
                mp_objid1,
                mp_objid2,
                mp_caption,
                mp_sql,
                mp_order,
                mp_updated,
                mp_level,
                mp_EventType,
                mp_Parameters,
                mp_EventInfo,
            mp_hostname,
                mp_loginname,
                mp_logintime,
                mp_programe_name
    )
        select mp_id,
                mp_cmpid,
                mp_type,
                mp_ctgid,
                mp_group,
                mp_ppid,
                mp_objid1,
                mp_objid2,
                mp_caption,
                mp_sql,
                mp_order,
                mp_updated,
                mp_level,
                EventType,
                Parameters,
                EventInfo,
                host_name,
                login_name,
                login_time,
                program_name
        from @t,deleted

end

results matching ""

    No results matching ""