2014-10-03 6 views
0

SIT에서 약 600 개의 테이블이 사용되는 데이터베이스가 있습니다. 우리가 UAT로 옮기고 있기 때문에, SIT에서 테이블의 DDL (컬럼 이름, 데이터 유형, 크기)을 UAT의 DDL과 비교해야합니다. 나는 다음과 같은 접근법에 대해 궁리하고있다. (필자는 PERM 공간이 없다.) 필자는 데이터를 내보내고 유닉스를 비교하는 것보다는 데이터베이스에서이 작업을 선호한다.다른 서버의 테이블 DDL 비교 - Teradata,

첫 번째 방법 :

create volatile table SIT (s_tablename varchar(30), s_ddl varchar(30000)) on commit preserve rows; 
create volatile table UAT (u_tablename varchar(30), u_ddl varchar(30000)) on commit preserve rows; 
DATABASE SIT; 

나는 위의 값에 삽입하는 선택 문 위의 DDL을 생성 할 수 있습니까? 나는 테이블 표시, 즉의 결과를 가질 수 있다면

1 SELECT 'SHOW TABLE ' || TRIM(TABLENAME) from dbc.tables where databasename='SIT' and tablekind='T' order by tablename; 

, DDL은 테이블 이름과 함께, 나는 SIT 테이블에 선택 (아래 같은)

insert into SIT select trim(tablename <DDL_OF_TABLE> from dbc.tables where databasename='SIT' and tablekind='T' 

과로를 직접 삽입을 실행할 수 있습니다 UAT는 적절하게 값을 매기므로 아래에서 LEFT JOIN을 사용하여 차이점을 찾아 낼 수 있습니다.

select sit.s_tablename, uat.u_tablename from sit left join uat on sit.s_tablename = uat.u_tablename and sit.s_ddl=uat.u_ddl where uat.u_tablename is NULL; 

두 번째 방법 :

아래와 같이 모두에서 dbc.columns 앉아 UAT의 모든 열 정보를 선택하고 엑셀 시트 (UAT는 2 개 개의 다른 서버에있는, SIT)에서 그들을 비교할 수 있습니다.

SEL TABLENAME, COLUMNNAME, COLUMNFORMAT, COLUMNTYYPE, COLUMNLENGTH, NULLABLE, DECIMALTOTALDIGITS, DECIMALFRACTIONALDIGITS FROM DBC.COLUMNS WHERE DATABASENAME='SIT'ORDER BY TABLENAME, COLUMNNAME 

2A) -

결과로 거대 (187,000 행이다 - 약 600 테이블), 엑셀 시트는 비교 결과를 제공하는 것은 매우 오래 걸리는. 나는 위 쿼리를 청크로 나누어 비교할 수있다. 그러나, 나는 이것을 한 부분에서 달성하려고 노력하고있다.

2B) -

또 하나의 옵션은 SQL 보조를 통해 휘발성 테이블로 위의 선택 결과를 가져 오는 것입니다 (나는 유틸리티를 실행) 아래와 같이 빼기 작업을 할 수있는 권한이 없습니다.

sel * from SIT minus sel * from UAT; 

그러나, 나는 그것이 SQL 보조 가져 오기를 통해 2 개 휘발성 테이블에 187,000 행 주위에 로딩 시간이 걸리는 과정이라고 생각합니다. 또한, 나는 그 이상의 문제가 발생하지 않도록하기 위해 dbc.columns를 통해 위에서 선택한 동안 zeroifnull 또는 다른 함수를 사용하여 null 처리를 극복해야합니다.

두 방법 또는 더 이상 가능한 해결책의 장단점에 대해 자세히 설명해 주시겠습니까? SQL Assistant는 지금 제공하는 재직자를위한

답변

0

테라 데이타 스튜디오 15.00

테라 데이타의 최종 교체 a를 동일하거나 서로 다른 테라 데이타 데이터베이스 간의 개체를 비교하는 마법사 객체 비교. 비교 편집기에 개체 DDL을 나란히 놓고 차이점을 강조 표시합니다. Teradata의 Developer Exchange에서 무료로 다운로드 할 수 있습니다.(필수 등록 - 무료)

타사 스키마 도구

데이터베이스 환경에서 스키마 비교를 수행 할 수있는 능력 IDE 도구를 제공하는 업체가 있습니다 비교. 일부는 도구에 대한 무료 평가 기간을 제공하지만 다른 제품은 제품의 라이센스를 먼저 요구합니다. AquaFold와 AtanaSuite는 마음에 떠오르는 두 가지 옵션입니다. BTEQ 수출 SHOW 표 출력의

할 수 있습니다 테이블 표시 출력은 SIT 및 UAT위한 플랫 파일로 내보낼 스크립트. 플랫 파일을 사용하면 두 파일의 비교를 수행하고 차이점을 강조 표시하는 기능을 제공하는 Notepad ++ (오픈 소스 Windows 텍스트 편집기)와 같은 도구를 사용할 수 있습니다. 이것은 비교해야 할 많은 양의 객체를 처리 할 때 친숙하지 않을 수있는 처음 두 개보다 더 나은 옵션 일 수 있습니다.

유닉스 스크립팅 (sed, awk, 정규 표현식)에 익숙하다면 다른 스크립트를 사용하여 비교를 수행 할 수도 있습니다. 스크립트 사용에 얼마나 철저한 지에 따라이 옵션에 따라 마일리지가 달라질 수 있습니다.

더 나은 버전 제어 내가 많은 상점들이 기업 데이터 환경의 복잡도가 증가로 특히 처리하는 더 나은 일을 할 수 있다고 생각

뭔가를 처리 구현합니다. 문제는 데이터베이스에서 DDL 변경 사항을 처리 할 때 소프트웨어 엔지니어가 사용하는 많은 도구가 친숙하지 않다는 것입니다. SQL Server 및 Oracle과 같이 더 잘 알려진 환경을위한 제품이 있습니다. Teradata는 적습니다. 도구는 많은 상점에서 릴리스 관리와 관련되어 있기 때문에 프로세스 문제가 아닐 수 있습니다.

희망이 도움이됩니다.

관련 문제