2009-08-24 4 views
0

PK가없는 데이터베이스에 테이블 (A)이 있습니다. 약 300K 레코드가 있습니다.PK없이 (동기화하는 것과 같이) 다른 데이터베이스의 테이블간에 데이터 복사

다른 데이터베이스에 해당 테이블의 하위 집합 복사본 (B)이 있습니다.이 테이블은 50KB 밖에 없으며 지정된 시간 범위 (7 월 데이터)에 대한 백업을 포함합니다.

기존 레코드를 복제하지 않고 누락 된 레코드를 테이블 A에서 테이블 A로 복사하려고합니다. 나는이 테이블의 열입니다 성공적 B.

에서 누락 된 행에 삽입하기 위해 수행 할 수있는 작업 전략

을 (내가 일을 더 쉽게 만들기 위해 데이터베이스 링크를 생성 할 수 있습니다) :

IDLETIME NUMBER 
ACTIVITY NUMBER  
ROLE NUMBER   
DURATION NUMBER  
FINISHDATE DATE  
USERID NUMBER 
.. 40 extra varchar columns here ... 

내 가장 큰 우려는 PK의 부족이다. 모든 열을 사용하여 해시 또는 PK와 같은 것을 만들 수 있습니까?

이 경우 어떻게 진행할 수 있습니까?

난 테이블 A 오라클 9i의 사용을 오라클 XE (10)에 미리 20,000

덕분이다 요소의 대략적 복사 B

에있어.

+0

테이블 A의 행에 고유성 제약 조건이 있습니까? – pilcrow

+0

아니, 거기에 ' – OscarRyz

답변

1

테이블에 중복 행이 없으면 고유 또는 기본 키를 모든 열에 적용 할 수 있습니다. 키/인덱스의 오버 헤드가 유지해야하는 경우 응용 프로그램의 데이터베이스를 쿼리하여 존재 여부를 확인하고 삽입이없는 경우에만 수행 할 수 있습니다.

+0

"... 당신은 또한 존재 여부를 확인하기 위해 귀하의 응용 프로그램에서 데이터베이스를 쿼리하고 결석 경우에만 삽입을 수행 할 수 ..."그래,하지만 .. 어떻게? 첫 번째 옵션에 대해서는 PK를 만들 권한이 없습니다 – OscarRyz

2

데이터 볼륨이 충분히 작 으면 나는 다음과 같이 갈 것입니다.

CREATE DATABASE LINK A CONNECT TO ... IDENTIFIED BY ... USING ....; 
INSERT INTO COPY 
SELECT * FROM [email protected] 
MINUS 
SELECT * FROM COPY; 

복사하는 데는 약 20,000 개가 있지만 전체 데이터 세트에는 얼마나 많은 데이터가 있는지 말하지 않습니다. 다른 옵션은 복사본의 현재 내용을 삭제하고 원본 테이블의 전체 내용을 삽입하는 것입니다.

전체 데이터 세트가 큰 경우 hash을 사용할 수 있지만 DB 링크를 통해 전체 데이터 세트를 끌어 와서 로컬 데이터베이스에서 해시를 적용하려고합니다.

+0

+1 데이터는 약 300k입니다. 빼기 연산자를 시도했지만 오류가 발생했습니다 : ORA-12704 : 문자 집합이 일치하지 않습니다. 다른 설치 또는 다른 것 때문일 것입니다. – OscarRyz

+0

ehm 글쎄, 나는 숫자와 날짜 열에서만 오류 메시지를받을 수 없다는 것을 안다. 12 열이 더 있습니다. ( – OscarRyz