SQL Server는 열 추가, 삭제, 이름 바꾸기, 유형/길이 변경 등과 같은 테이블 변경 내용을 추적하는 기록을 유지합니까? 이 작업을 수동으로 수행하기 위해 저장 프로 시저를 사용하는 것이 좋습니다. 그러나 SQL Server가 이러한 시스템 기록을 모든 시스템 테이블에 보관한다면 궁금합니다. 감사.SQL Server 2005 테이블 변경 내역
2
A
답변
1
이러한 종류의 정보는 필수 스토리지 요구 사항을 엄청나게 늘릴 수 있고 성능을 심각하게 저하시킬 수 있으므로 기본적으로 RDBMS에 보관되지 않습니다.
트리거가이를 수행 할 수 있습니다. 트리거는 수동 방법으로 간주되지 않으며 데이터베이스 설계의 핵심 부분입니다.
2
트랜잭션 로그에는이 모든 정보가 저장되며 DBCC LOG 명령을 사용하면이를 볼 수 있지만 문서화되지 않은 명령입니다.
DBCC LOG(<database name>[,{0|1|2|3|4}])
0 – Basic Log Information (default)
1 – Lengthy Info
2 – Very Length Info
3 – Detailed
4 – Full Example
구문 : SQL Server 2005에서
DBCC log (MY_DB, 4)
3
최대 당신은 테이블 변경 사항을 추적 할 수있는 데이터베이스 레벨 트리거를 만들 수 있습니다. 로그를 확장 할 수
select * from YourLogTable
EventID EventDateTime EventDescription
----------- ----------------------- ---------------------------------------------------------------------------------------------------------------------------------------------------
1 2010-04-06 08:25:47.333 sa; TABLE; YourLogTable2; create table YourLogTable2 (EventID int primary key identity(1,1),EventDateTime datetime, EventDescription varchar(max))
2 2010-04-06 08:25:55.113 sa; TABLE; YourLogTable2; drop table YourLogTable2
(2 row(s) affected)
더 열을 포함, 아니면 그냥이 간단한 예제에서처럼 하나에 모든 것을 덤프 : 여기 로그에서 몇 가지 간단한 출력은
CREATE TRIGGER [YourDatabaseTrigger]
ON DATABASE
FOR DDL_DATABASE_LEVEL_EVENTS
AS
DECLARE @EventData xml
DECLARE @Message varchar(1000)
SET @EventData=EVENTDATA()
INSERT INTO YourLogTable
(EventDateTime,EventDescription)
VALUES (GETDATE(),SUSER_NAME()
+'; '[email protected]('(/EVENT_INSTANCE/ObjectType)[1]', 'varchar(250)')
+'; '[email protected]('(/EVENT_INSTANCE/ObjectName)[1]', 'varchar(250)')
+'; '[email protected]('(/EVENT_INSTANCE/TSQLCommand/CommandText)[1]','nvarchar(max)')
)
RETURN
GO
ENABLE TRIGGER [YourDatabaseTrigger] ON DATABASE
: 같은 것을 사용합니다.
관련 문제
- 1. SQL Server 잠긴 테이블
- 2. SQL Server 2005 테이블 변수 업데이트 문제
- 3. 여러 데이터베이스에서 테이블 찾기 SQL Server 2005
- 4. SQL Server 2005 - 테이블 트리거를 제거 하시겠습니까?
- 5. SQL Server 2005 메타 변경 사항을 추적합니까?
- 6. SQL Server 2008의 XML 필드에 변경 내역 저장
- 7. SQl Server 2005 Datatype
- 8. SQL Server 2005
- 9. SQL Server 2005 트랜잭션
- 10. SQL Server 2005 커서
- 11. Sql Server 2005 Replication
- 12. SQL Server 2005
- 13. SQL Server 2005 sp_send_dbmail
- 14. SQL Server 2005 현지화
- 15. SQL Server 2005 보안
- 16. SQL Server 2005 업그레이드 SQL Server 2008
- 17. SQL Server 2005 on SQL Server 2000
- 18. Sql Server 2005 로그인에 실패했습니다.
- 19. 변경 허드슨 변경 내역
- 20. SQL Server 2008 R2에서 복제되는 테이블 변경
- 21. SQL Server 2000 테이블 변경 작업 호출
- 22. SQl Server 2008의 테이블 구조 변경
- 23. SQL Server 암호 변경
- 24. SQL Server 2005 요약 쿼리
- 25. 동적 SQL Server 2005 피벗
- 26. SQL Server 2005 설치 문제
- 27. SQL Server 2005/8 복제 트랜잭션 ID
- 28. SQL Server 2005에서 테이블 내보내기
- 29. SQL Server 2005 단방향 복제
- 30. SQL Server 2005 성능 문제
감사합니다. KM. 그러나 나는 이미 잘 작동하는 ddl 트리거를 시도했는데 새로운 컬럼 만 테이블에 추가되면 로그 정보를 쉽게 사용할 수 있습니다. 하지만 로그에 TSQL 명령을 사용하여 외래 키 참조가있는 열의 이름을 바꾸거나 varchar 형식 열의 길이를 변경하는 것과 같은 지루한 작업이라고 생각합니다. 저장소는 곧 Unreason으로 '문제'가됩니다. 고 밝혔다. – Kayes