2013-12-16 3 views
0

내 워크 플로의 일부로 테이블 (Oracle DB)간에 많은 압축을 수행했습니다. 우리는주는 서버 (목록의 첫 번째)에서 데이터를 DB 테이블로 구문 분석하고이 테이블을 실제 테이블 (생산 정보가있는 테이블)과 비교합니다.견인 DB 테이블의 가치와 밀폐성을위한 자동 방법

우리는 서버를 통해 전달 된 값이 변경되지 않았 음을 알고 싶어합니다. 우리는 또한 행의 양과 행 자체를 비교하여 기밀성을 확인했습니다.

그래서 내 질문에 자동으로 그렇게하는 방법이 있습니까? 우리가 할 것은 쿼리를 많이 작성하는 것입니다 및 데이터가 이 조회 없음을 확인, 수동으로 실행할 수 있습니다. (우리는 테이블을 다른 테이블이나 불평등 한 값을 검색 마이너스을한다.)

하지만 시간이 많이 걸립니다 우리가 그렇게 할 때마다 (그리고 우리는 그것을 많이합니다.) 결국 우리는이 모든 시간을 낭비하게됩니다.

그래서 신 프레임 워크가, 또는 우리가 우리의 쿼리를 입력하고 스마트 주장을 할 수 있습니다 응용 프로그램에이 견인 테이블을 비교? (또는 다른 아이디어를 내 손님 수있는 경우)

+0

데이터베이스간에 데이터를 교환하기위한 프레임 워크가 많이 있습니다. 문제는 그들에게 돈을 지불하겠습니까? 아니면 프리웨어 솔루션을 찾고 있습니까? – APC

+0

저는 프리웨어 솔루션을 선호하지만 비용 지불 솔루션을 고려할 수도 있습니다 – user3106313

답변

0

나는 경우 확실하지 않다 이것에 대한 프레임 워크가 있지만, ...

마이너스 가끔 매우 느린 작업이 될 수 있습니다. 하지 존재 사용해보십시오이 당신에게 실제 테이블에 아직있는 행을 반환

select * 
from myTableParsed mp 
where not exists (select null 
        from myTableReal mr 
        where mr.tablePrimaryKey = mp.tablePrimaryKey); 

: 예컨대 (또는 심지어 외부 조인을 통해 수행은하지 존재보다 조금 빠를 수 있습니다). 다른 방법으로이 쿼리를 사용하려면이 쿼리에서 다른 순서의 테이블을 사용하면됩니다.

는 변경된 행을 확인하려면 다음

select mp.* 
from myTableParsed mp, 
    myTableReal 
where mr.tablePrimaryKey = mp.tablePrimaryKey 
    and (mp.column1 != mr.column1 
     or mp.column1 is null and mr.column1 is not null 
     or mp.column1 is not null and mr.column1 is null 
     or mp.column2 ...); 

예, 쿼리는 매우 매우 긴 될 수 있지만, 그것은뿐만 아니라 매우 빠릅니다. 또한이 검색어는 쉽게 생성 할 수 있습니다 (예 : user_tab_columns를 사용하여 열 목록을 가져 와서 검색어를 생성).

저는 실제 데이터와 실제 데이터의 차이를 확인하기 위해 항상이 방법을 사용합니다.

자, 이제 개요 :

  1. 시도를
  2. 이 자동으로

쿼리를 생성 외부 조인에 "마이너스"을 변경, 아마도 당신은 어떤 프레임 워크/도구가 필요하지 않습니다 해야할 일

+0

_ "마이너스가 매우 느리게 작동합니다"_, 정말요? 테이블 전체에요? 증거가 있니? 나는 14m 행 테이블과 21m 행 테이블의 몇 열에 정확히 이것을 수행하기 위해 다른 시간에 MINUS를 사용했습니다. 몇 초가 걸렸습니다. – Ben

+0

_ 일부 열은 서로 다른 것을 의미 할 수 있습니다 : 3 또는 30 또는 300? 나는 1.5m의 독특한 행과 63 개의 칼럼을 가진 테이블을 가지고있다; MyTable에서 select * from myTable'을 실행하려면 55 초가 걸렸습니다.마이너스와 같은 연산자는 고유 한 비교를 수행하고 더 많은 열을 보유하기 때문에 속도가 느립니다. 대답은 _really_입니다. – smnbbrv

+0

예, 부정확합니다. "마이너스가 매우 느리게 작동합니다."_. 어떤 상황에서는 속도가 훨씬 느릴 수 있지만 다른 상황에서는 잘못된 것이라고 논쟁하지 않을 것입니다. 또는 어떤 증거가 있습니까? – Ben