2012-04-20 3 views
1

저는 현재 2 개의 SQL 데이터베이스가있는 시나리오를 다루고 있으며 2 개의 데이터베이스에있는 각 테이블의 데이터 변경 내용을 비교해야합니다. 데이터베이스는 서로 동일한 정확한 테이블을 가지고 있지만 각각에 서로 다른 데이터가있을 수 있습니다. 첫 번째 장애물은 데이터 세트를 비교하는 방법과 두 번째 도전은 차이점을 확인한 후 데이터베이스 1에 존재하지 않았던 데이터베이스 2에 누락 된 업데이트 데이터를 어떻게 표현할 것인가입니다.SQL Server 데이터베이스를 비교하고 다른 데이터베이스를 업데이트하려면 어떻게합니까?

+0

이 사용자 데이터 또는 정적 데이터입니까? 즉, 한 데이터베이스의 테이블을 지우고 다른 테이블의 테이블을 주기적으로 복사 할 수 있습니까? – mellamokb

+0

@mellamokb - 사용자 데이터를 말할 때 정확히 무엇을 의미합니까? 데이터베이스 1의 데이터는 일반적으로 웹 인터페이스를 통해 동적으로 업데이트되지만 사이트가 오프 사이트 인 것으로 간주되므로 정적 인 것으로 간주 할 내부적으로 동일한 데이터베이스를 업데이트 할 수 있어야합니다. 데이터베이스를 지우고 다시 쓰는 것 대신 변경 사항을 식별 할 수있는 이유는 변경 사항 만 세 번째 데이터베이스에 전달해야하기 때문입니다. – PeanutsMonkey

+0

이것은 단 한 번의 일입니까, 아니면 반복해야합니까? –

답변

4

휠을 다시 발명하는 대신 SQL 데이터 비교를 사용하지 않는 이유는 무엇입니까? 그것은 정확히 당신이 요구하는 것입니다 - 두 데이터베이스를 비교하고 어느 방향으로 동기화 스크립트를 작성하십시오. 나는 그들의 도구들 중 일부와 경쟁하는 벤더를 위해 일하는데 그것은 여전히 ​​내가 권하는 도구이다.

http://www.red-gate.com/products/sql-development/sql-data-compare/

+0

Redgate의 SQL 데이터 비교 및 ​​SQL 비교는 우수한 제품입니다. 나는 그것들을 정기적으로 사용하며 코드를 배치하거나 데이터를 병합 할 때 수백 시간을 절약 해주었습니다. –

+0

@Aaron Bertrand - 우수한 제품처럼 보이지만 무료 대안이 있습니까? – PeanutsMonkey

+0

아마도 그럴 것이고, 간단한 웹 검색을 사용하면 그러한 검색 결과를 얻을 수 있지만 그 중 어떤 것도 시도한 적이 없습니다. 아마 다른 누군가가 무료 대안을 사용하고 있으며 논평 할 수 있습니다. –

2

하나 데이터 비교를위한 강력한 명령은 EXCEPT입니다. 이와 함께, 당신은 단순히 수행하여 동일한 구조를 가진 두 개의 테이블을 비교할 수 있습니다 다음이 당신에 모두 존재하지만 (다른 행을 포함 Database1에 존재하지만 DATABASE2의 모든 행을 줄 것이다

SELECT * FROM Database1.dbo.Table 
EXCEPT 
SELECT * FROM Database2.dbo.Table 

모든 열을 비교하기 때문에). 그런 다음 쿼리의 순서를 반대로하여 다른 방향을 확인할 수 있습니다.

차이점을 확인한 후에는 INSERT 또는 UPDATE을 사용하여 변경 사항을 한쪽에서 다른 쪽으로 전송할 수 있습니다. 두 테이블이 서로 관련이 방법, 당신이 할 수있는 사용

INSERT INTO Database1.dbo.Table 
SELECT T2.* 
FROM Database2.dbo.Table T2 
LEFT JOIN Database1.dbo.Table T1 on T2.PK = T1.PK 
WHERE T1.PK IS NULL -- insert rows that didn't match, i.e., are new 

실제 방법에 따라 달라집니다 예를 들어, 당신은 단지 DATABASE2에 와서 기본 키 필드 PK, 새로운 행이 가정, 당신은 뭔가를 할 수 일치하는 행을 식별하고, 변경 소스가 무엇인지 확인하십시오.

+0

고마워요. 데이터베이스가 상당히 크기 때문에 쿼리가 속도와 얼마나 빨라지는 것이 본질입니까? 둘째, 한 번에 하나의 테이블과 대조하여 테이블 목록을 비교할 수있는 방법이 있습니까? – PeanutsMonkey

+1

쿼리는 모든 데이터를 읽는 데 필요한 검색만큼 빠릅니다. 내가 알고있는 어떤 마법도 이것보다 빨리 만들 수는 없다. 다행히도 이것은 매일하는 일이나 2 분에서 5 분 걸리는 상황에서 문제가되는 일이 아니기를 바랍니다. –

+0

한 서버에서 다른 서버로 옮겨진 데이터를 얻으려면 잠재적으로'bcp '를 사용할 수 있습니다. 다른 하나는 임시 테이블의 데이터 덤프와 같이 신속하게 처리됩니다. 그런 다음 임시 테이블에서 실제 테이블로 로컬로 실제 업데이트를 수행하십시오. 그러나 @AaronBertrand의 대답은 전반적으로 더 좋은 제안입니다. – mellamokb

1

또한 비주얼 스튜디오 2010 (프리미엄 이상)의 데이터 비교 기능을 볼 수 있습니까? 필자는 모든 환경 (예 : 개발, 테스트 및 생산)의 구성 테이블이 동기화되어 있는지 확인하는 데 사용합니다. 그것은 내 인생을 엄청나게 쉬게 만들었습니다. 비교할 테이블을 선택할 수 있습니다. 비교할 열을 선택할 수 있습니다. 내가 배웠던 것은 미래의 사용을 위해 나의 선택을 저장하는 방법이다.

1

당신은 SQL Compare와 함께 이것을 개발할 수 있지만이 작업은 예정대로 수행하고 싶다면 Simego의 Data Sync Studio가 더 나은 해결책이 될 수 있습니다. i3 iMac (bootcamp)에서 16GB를 비교하면 약 100m (30 cols) 행을 처리 할 수 ​​있습니다. 실제로 그것은 양쪽에 1m -> 20m 행으로 편안합니다. 열 저장 엔진을 사용합니다.

이 시나리오에서는 시나리오를 다운로드하고 설치하고 테스트하는 데 몇 분 밖에 걸리지 않습니다.

저는 항상 누군가가 묻고있는 것을 해결하기 위해 물음표를 찾는 데 도움이되기를 바랍니다.

관련 문제