데이터베이스 개발자 질문과 답변 게시판

데이터베이스 개발/운영 관련 질문과 답변을 올리는 게시판입니다. 궁금하신 내용을 이곳에서 문의하시면 SQLER 분들의 답변을 받으실 수 있습니다. 문의를 하실때에는 최근 작업하신 특이 사항이나, 장애 발생 전 상황을 상세히 올려 주시면 답글을 적어주시는 SQLER분들의 답변이 더 정확할 수 있으니 도움 되시길 바랍니다. 쿼리 문의일 경우, 실제 문제가 재현되는 테이블생성, 샘플데이터 생성 쿼리를 함께 올려 주시면 더 빠르고 정확한 쿼리 문의 응답이 가능합니다.

Trigger로 히스토리 남기기

김동인_278615 2015.02.16 19:34 Views : 3159

안녕하세요. 트리거 관련해서 질문이 있습니다.
아래와 같이
Insert, Update, Delete 트리거를 회원테이블에 작성을 하여 히스토리 테이블에 넣었습니다.

가끔 회원테이블에서 데이타가 삭제가 되는데 일부가 히스토리에 남지를 않습니다.
가끔 알수없는 데이타 변경건에 대해 추적을 하려고 트리거를 남겼는데
일부 히스토리에 남지를 않네요...
어떤경우에 남지를 않는건지 도저히 찾을수가 없네요.~~~

목적 : 회원 정보 In,Up,Del 시에
       언제, 행위(In,Up,Del), 쿼리, 실행계정(누가), 프로그래명(어떤프로그램이), 
       서버명(어떤서버가), 컬럼명(어떤컬럼을 Up), 변경된 컬럼값~~~~

위와 같은 목적으로 트리거를 적용시켰습니다.


의심되는 부분이
CREATE TABLE #INPUTBUFFER
(
EVENTTYPE VARCHAR(1000),
PARAMETERS VARCHAR(1000) ,
TSQLCommand varchar(max)
)

INSERT #INPUTBUFFER
EXEC ('DBCC INPUTBUFFER( ' + @@SPID + ')')
위 부분과
(SELECT LTRIM(RTRIM(CONVERT(VARCHAR(MAX),TSQLCommand))) FROM #INPUTBUFFER), --쿼리
SUSER_SNAME(), --LoginName
APP_NAME(), --어플명
HOST_NAME(), --서버명
이부분인데...
혹시 위의 정보가 특정경우에 오류가 나거나 데이타가 없는것인지요

아 그리고 Member_His는 모두 Null 처리 되어 있습니다.




Create Trigger [dbo].[TR_Member_damo_Insert_Trigger] ON [dbo].[Member_damo] AFTER INSERT
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN

SET NOCOUNT ON;
DECLARE @ActionType varchar(10)
Declare @ColumnType varchar(20)
set @ActionType = 'IN'
set @ColumnType = ''

CREATE TABLE #INPUTBUFFER
(
EVENTTYPE VARCHAR(1000),
PARAMETERS VARCHAR(1000) ,
TSQLCommand varchar(max)
)

INSERT #INPUTBUFFER
EXEC ('DBCC INPUTBUFFER( ' + @@SPID + ')')

INSERT INTO Member_His
(
inDT,
ActionType,
nQuery,
LoginName,
ApplicationName,
HostName,
UpInfo,
sec_MdnNum_En,
sec_MinNum_En,
SvcMngNum,
Amount, 
BankCode,
SecurityCode,
ModelName, 
App_Ver,
Service_GB
)
SELECT
GetDate(),
@ActionType, --행위
(SELECT LTRIM(RTRIM(CONVERT(VARCHAR(MAX),TSQLCommand))) FROM #INPUTBUFFER), --쿼리
SUSER_SNAME(), --LoginName
APP_NAME(), --어플명
HOST_NAME(), --서버명
@ColumnType, --컬럼명
b.sec_MdnNum_En,
b.sec_MinNum_En,
b.SvcMngNum,
b.Amount,
b.BankCode,
b.SecurityCode,
b.ModelName,
b.App_Ver,
b.Service_GB
FROM Inserted b
END
go







create Trigger [dbo].[TR_Member_damo_Update_Trigger] ON [dbo].[Member_damo] AFTER Update
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN

SET NOCOUNT ON;
DECLARE @ActionType varchar(10)
Declare @ColumnType varchar(1000)
set @ActionType = 'UP'
set @ColumnType = ''
if Update(sec_MdnNum_En) 
set @ColumnType = @ColumnType + 'sec_MdnNum_En,'
if Update(sec_MinNum_En) 
set @ColumnType = @ColumnType + 'sec_MinNum_En,'
if Update(SvcMngNum) 
set @ColumnType = @ColumnType + 'SvcMngNum,'
if Update(Amount) 
set @ColumnType = @ColumnType + 'Amount,'
if Update(BankCode) 
set @ColumnType = @ColumnType + 'BankCode,'
if Update(SecurityCode) 
set @ColumnType = @ColumnType + 'SecurityCode,'
if Update(ModelName) 
set @ColumnType = @ColumnType + 'ModelName,'
if Update(App_Ver) 
set @ColumnType = @ColumnType + 'App_Ver,'
if Update(Service_GB) 
set @ColumnType = @ColumnType + 'Service_GB,'
CREATE TABLE #INPUTBUFFER
(
EVENTTYPE VARCHAR(1000),
PARAMETERS VARCHAR(1000) ,
TSQLCommand varchar(max)
)

INSERT #INPUTBUFFER
EXEC ('DBCC INPUTBUFFER( ' + @@SPID + ')')

INSERT INTO Member_His
(
inDT,
ActionType,
nQuery,
LoginName,
ApplicationName,
HostName,
UpInfo,
sec_MdnNum_En,
sec_MinNum_En,
SvcMngNum,
Amount, 
BankCode,
SecurityCode,
ModelName, 
App_Ver,
Service_GB
)
SELECT
GetDate(),
@ActionType, --행위
(SELECT LTRIM(RTRIM(CONVERT(VARCHAR(MAX),TSQLCommand))) FROM #INPUTBUFFER), --쿼리
SUSER_SNAME(), --LoginName
APP_NAME(), --어플명
HOST_NAME(), --서버명
@ColumnType, --컬럼명
b.sec_MdnNum_En,
b.sec_MinNum_En,
b.SvcMngNum,
b.Amount,
b.BankCode,
b.SecurityCode,
b.ModelName,
b.App_Ver,
b.Service_GB
FROM Inserted b
END
go








create Trigger [dbo].[TR_Member_damo_Delete_Trigger] ON [dbo].[Member_damo] AFTER Delete
AS
BEGIN
IF @@ROWCOUNT = 0 RETURN

SET NOCOUNT ON;
DECLARE @ActionType varchar(10)
Declare @ColumnType varchar(20)
set @ActionType = 'DEL'
set @ColumnType = ''

CREATE TABLE #INPUTBUFFER
(
EVENTTYPE VARCHAR(1000),
PARAMETERS VARCHAR(1000) ,
TSQLCommand varchar(max)
)

INSERT #INPUTBUFFER
EXEC ('DBCC INPUTBUFFER( ' + @@SPID + ')')

INSERT INTO Member_His
(
inDT,
ActionType,
nQuery,
LoginName,
ApplicationName,
HostName,
UpInfo,
sec_MdnNum_En,
sec_MinNum_En,
SvcMngNum,
Amount, 
BankCode,
SecurityCode,
ModelName, 
App_Ver,
Service_GB
)
SELECT
GetDate(),
@ActionType, --행위
(SELECT LTRIM(RTRIM(CONVERT(VARCHAR(MAX),TSQLCommand))) FROM #INPUTBUFFER), --쿼리
SUSER_SNAME(), --LoginName
APP_NAME(), --어플명
HOST_NAME(), --서버명
@ColumnType, --컬럼명
b.sec_MdnNum_En,
b.sec_MinNum_En,
b.SvcMngNum,
b.Amount,
b.BankCode,
b.SecurityCode,
b.ModelName,
b.App_Ver,
b.Service_GB
FROM deleted b
END
go



No. Subject Author Date Views
» Trigger로 히스토리 남기기 김동인_278615 2015.02.16 3159
8551 쿼리문 문의 합니다. [2] 죠리퐁 2015.02.16 2275
8550 디비 업그레이드로 restore관련 질문 입니다 ㅠㅠ [1] 풀내기vber 2015.02.16 2899
8549 품목별 최종 단가표를 어떻게 만들어야 할까요? [3] 뇽이 2015.02.16 3137
8548 동적쿼리 [2] 마힐링 2015.02.16 2530
8547 일련규칙있는 테이블 업데이트 관한건데요. 짬자면굿 2015.02.15 2012
8546 could not find stored procedure 'dbo.테이블명', 오류 해결방법 질문입니다. [1] Tamio 2015.02.14 3684
8545 sa 암호 자동으로 변경되는 것 질문합니다. [1] rhfktj 2015.02.14 2484
8544 인덱스 조각난거 정리하려고 합니다. [2] 지호아빠 2015.02.13 3413
8543 sp_changedbowner로 소유자 변경 시 보안 문제 흰가루찹쌀떡 2015.02.13 2720
8542 쿼리 로그 확인하는 방법 [1] akfflr 2015.02.13 2722
8541 코드별, 구분별 입력 값을 열형태로 코드별 구분된값으로 나열? [4] 다자녀아빠 2015.02.12 3386
8540 관련된 데이터들의 크로스체크 [1] 우츄프라 2015.02.12 2594
8539 로그용 테이블을 날짜별로 생성 하고 insert하고 싶습니다. [4] zza 2015.02.12 3818
8538 프로그램을 이용해서 쿼리를 돌리고 종료하면... 랜덤의세계 2015.02.11 2306
8537 컬럼많은 테이블 Group by rollup 질문입니다. [2] 이시우_301202 2015.02.11 4133
8536 원하는 갯수.. [2] 마힐링 2015.02.11 2692
8535 job의 일정 설정 관련 문의 드립니다. [3] 나는짱이야 2015.02.10 2628
8534 nvarcha -> varchar로 변환하고자 합니다. [1] Molly75 2015.02.10 2436
8533 다른이름으로 mdf,ldf 파일 불러오기(연결) 방법을 알려 주세요. [1] 땅훈 2015.02.09 3129





XE Login