2016-08-22 3 views
1

SQL Server 데이터베이스의 테이블 구조 (데이터 아님)에 대한 변경 사항을 감지하고 싶습니다. 그러나 나는 내가 무엇을 정확히 찾고 있는지 모른다.데이터베이스 변경 감지

정확한 변경이 필요하지 않으며 즉시 통보해야합니다. 또한 실제 데이터가 아니라 테이블 구조 만 변경하면됩니다.

데이터베이스에서 쿼리 할 수있는 각 테이블에 대해 LastChangeDate과 같은 간단한 것만으로도 충분하지만 비슷한 것을 보지 못했습니다.

: 일부 사용자는 값을 수정하면서 행을 복사하여 다른 사용자에게 "바인딩"합니다. 그러나 우리는 누군가가 데이터베이스를 변경할 때 문제를 겪었으며 앱은 시대에 뒤 떨어진 것입니다. 데이터베이스 변경 사항이 앱에 반영되지 않은 경우 사용자가 해당 앱을 사용할 수 있도록하는 것은 매우 위험합니다. 나는 열었을 때 데이터베이스 구조가 마지막으로 열렸을 때부터 변경되었는지 확인하기를 원한다. 앱이 게시되지 않았기 때문에 이벤트 나 트리거가 될 수 없습니다. 나는 서버에서도 많은 것을 변경하고 싶지 않다. (예 : 변경 추적을 켜는 것이 실행 가능한 옵션이 아님)

고맙습니다.

답변

1

질문을 올바르게 이해하고 있다면 도움이 될 수 있습니다. 데이터베이스의 테이블 스키마를 가져 와서 DataTable에로드합니다.이 DataTable은 차례로 파일에 저장 한 다음 참조/비교로 사용할 수 있습니다.

using Microsoft.SqlServer.Server; 
using SQL = System.Data; 
using System.Data.SqlClient; 

string DB_Name = "SomeDB" 

connectionString = "Server=" + System.Environment.MachineName.ToString() + 
        "\\CUSQLEXPRESS;Database=" + 
        DB_Name + ";Trusted_Connection=True;MultipleActiveResultSets=true;"; 

SQL_Connection = new SqlConnection(connectionString); 
SQL_Connection.Open(); 

DataTable Project_Tables = SQL_Connection.GetSchema("Tables"); 
+0

아, 멋지다. 그것을 사랑해. 감사! – Emilie217

+0

기꺼이 도와 드리겠습니다. 희망은 당신을 위해 작동합니다. –

0

당신이 필요로 할 수 로그인 이름, 날짜, 개체 이름, 수정 문 및 다른 모든 것들과 모든 모델의 변경 사항을 추적 DDL 트리거를 만듭니다

https://msdn.microsoft.com/en-us/library/ms175941.aspx

DDL은 다양한 반응하여 화재를 유발 DDL (데이터 정의 언어) 이벤트 이러한 이벤트는 주로 CREATE, ALTER, DROP, GRANT, DENY, REVOKE 또는 UPDATE STATISTICS 키워드로 시작하는 Transact-SQL 문에 해당합니다. DDL과 유사한 작업을 수행하는 특정 시스템 저장 프로 시저도 DDL 트리거를 시작합니다.

필요한 이벤트 만 정의 할 수 있습니다.
PRINT '당신은 트리거를 비활성화해야 "안전 AS, ALTER_TABLE
을 DATABASE DROP_TABLE에 대한
ON

CREATE TRIGGER 안전
: 당신은 CREATE USER 문의 추적을 피할 수 등 당신이 필요하지 않은 경우 "테이블을 떨어 뜨리거나 바꾼다!"
롤백;

이러한 이벤트를 기록하기위한 표를 만들어 마지막 검토 이후 변경된 사항이 있는지 확인하십시오.

0

내 권장 솔루션은 모든 데이터베이스 구조 변경에 대한 DB Migrations을 사용하는 것입니다.당신은 DB 확장 속성을 업데이트 수정의 일환으로 :

EXEC sp_updateextendedproperty 
    @name = N'MyApplication DB Version', @value = '1.2'; 
go 

앱의 DB에 연결시, 우선은이 속성을 확인하고 현재 버전으로 작업 할 수 있음을 확인합니다. 그렇지 않다면 약 해지는 것을 표시하고 사용자에게 최신 앱 버전을 다운로드하도록 요청하고 종료합니다. Rails ecosystem이 일을 해왔습니다.

모든 변경 사항이 업그레이드을 통해 수행되는 경우이 값은 으로 적용됩니다. 그러나 절차를 따르지 않고 앱을 중단시키는 악성 업데이트의 문제는 다루지 않습니다. 이러한 경우 DDL 트리거 또는 이벤트 알림을 사용하고 업데이트를 모니터링하는 것이 좋습니다. EVENTDATA()을 구문 분석하고 업데이트 세부 정보로 일부 테이블을 업데이트하고 앱에서 테이블을 참조하도록해야합니다. 행할 수는 있지만 그만한 가치는 없다고 생각합니다. 마이그레이션 접근법을 실행 가능하게 만들고 업데이트를 체계적으로 유지하는 데 집중할 것입니다 (예 : 확장 속성 수정). 보조 노트로

, 내 회사 DBHistory.com는 변화를 모니터링 전문 어떤 변화에 상관없이 그것이 발생하는 방법, 발생 때 알림을받을 수 있습니다.

+0

좋았 겠지만 데이터베이스에 많은 변화가 필요합니다. 더 빠르고 더러운 해결책을 찾고있었습니다. 새로운 프로젝트 였더라면 좋았을 것입니다. 감사. – Emilie217