2010-11-29 6 views
2

동일한 Oracle 사용자에 두 개의 서로 다른 Oracle 세션 ("세션 A"및 "세션 B")이 있습니다.글로벌 임시 테이블에 데이터로드

전역 임시 테이블에는 "세션 A"에 약 320,000 개의 레코드가 채워집니다.

"세션 B"의 글로벌 임시 테이블에 동일한 320,000 개의 레코드를 신속하게 삽입하려면 어떻게해야합니까?

친절한 제안을 보내 주셔서 감사합니다.

편집 : 전 세계 임시 테이블 만 만들 수 있도록 지정하는 것을 잊어 버렸습니다.

편집 : 나는 데이터베이스를 만들 수 없습니다 오전 지정할 잊어 버린 현재 세션에만 지금까지 볼 수있는 임시 테이블 내에서

+3

대신 두 세션 모두에서 액세스 할 수있는 테이블을 만들 수 있습니다 ... 더 많은 정보가 도움이 될 것입니다 - 오라클 버전은 무엇이며 임시 테이블이 필요한 이유는 무엇입니까? –

+0

글로벌 임시 테이블 만 만들 수 있습니다 ... – UltraCommit

+0

사용중인 Oracle 버전은 다음과 같습니다. Oracle Database 10G Release 2 – UltraCommit

답변

2

DBMS_PIPE은 정보를 한 세션에서 다른 세션으로 푸시하기위한 '고전적'메커니즘입니다. 세션 A는 데이터를 파이프로 푸시해야하고 세션 B는 데이터를 가져와야합니다.

그러나 일반적으로 데이터베이스의 개념은 세션이 독립적이며 모든 공통성이 보존 된 데이터에 있다는 것입니다. 이렇게하면 잘못된 도구를 사용하고있는 것입니다.

+0

OK, PUSH 및 PULL을 사용하여 "세션 A"에서 "세션 B"로 레코드를 전송하는 방법에 대한 예제를 만들 수 있습니까? "세션 A"의 소스 테이블과 "세션 B"의 목표 테이블이 동일한 테이블이라고 가정하십시오. – UltraCommit

5

데이터 링크, 그래서 나는 생각하지 않는다 다른 접근법없이 원하는 것을 할 수있는 방법.

2

글로벌 임시 테이블의 데이터는 해당 테이블을 삽입 한 세션에서만 볼 수 있습니다. 따라서 세션 B에서 테이블을 채우는 것과 동일한 프로세스를 실행해야합니다.

두 개의 서로 다른 세션에서 동일한 320,000 개의 행에 액세스하려는 것으로 보이는 사실은 전역 임시 테이블 사용할 적절한 데이터 구조가 아닙니다. 아마도 당신은 영구적 인 테이블에 데이터를로드하고 싶을 것입니다 (아마도 여러 개의 SessionA/SessionB 쌍이있는 경우 일종의 식별자와 함께). 또는 세션 B가 실행중인 논리가 세션 A에 의해 실행되어야합니다.

오라클은 독자가 작성자를 차단하지 않고 작성자가 독자를 차단하지 않도록 다중 버전 읽기 일관성을 구현하기 때문에 한 걸음 물러서십시오. , 처음에는 320,000 개의 행 임시 테이블이 필요할 것입니다.

+0

괜찮 았지만 필사적 테이블 (그러나 글로벌 임시 테이블 만)을 만들 수는 없으며 DBLINK를 만들 수 없다는 가정하에 32,000 개의 행을 복제하는 가장 빠른 방법은 " 세션 B "? – UltraCommit

+0

세션 A가 임시 테이블에 삽입 할 320,000 개의 행을 가져 오는 위치는 어디입니까? 그리고 데이터베이스 링크는 어디서 재생됩니까? 세션 A와 세션 B도 서로 다른 두 개의 데이터베이스에 있습니까? –

+0

320,000 개의 행은 긴 쿼리에서 나옵니다. 이 결과는 또 다른 글로벌 임시 테이블과의 다른 세션에서 비슷한 결과로 결합되어야합니다. 실행을 병렬화하고 실행 시간을 줄이기 위해 두 세션에서 동일한 절차를 실행합니다. – UltraCommit

관련 문제