programing

Oracle 분산 데이터베이스에서 LOB를 처리하는 가장 좋은 방법

batch 2023. 8. 9. 20:36
반응형

Oracle 분산 데이터베이스에서 LOB를 처리하는 가장 좋은 방법

Oracle dblink를 생성하는 경우 대상 테이블의 LOB 열에 직접 액세스할 수 없습니다.

예를 들어 다음을 사용하여 dblink를 생성합니다.

create database link TEST_LINK 
  connect to TARGETUSER IDENTIFIED BY password using 'DATABASESID';

그 후에는 다음과 같은 작업을 수행할 수 있습니다.

select column_a, column_b 
from data_user.sample_table@TEST_LINK

열이 LOB인 경우를 제외하고는 다음 오류가 발생합니다.

ORA-22992: cannot use LOB locators selected from remote tables

이것은 문서화된 제한 사항입니다.

같은 페이지에서 값을 로컬 테이블로 가져오는 것을 제안하지만, 그것은...좀 지저분함:

CREATE TABLE tmp_hello 
AS SELECT column_a 
from data_user.sample_table@TEST_LINK

다른 생각 있나요?

아래와 같은 쿼리를 사용하는 것이 가장 좋은 솔루션입니다. 여기서 column_b는 BLOB입니다.

SELECT (select column_b from sample_table@TEST_LINK) AS column_b FROM DUAL

네, 지저분해서 피할 방법이 생각이 안 나요.
임시 테이블 작성을 저장 프로시저에 배치하고 "즉시 실행"을 사용하여 테이블을 작성함으로써 클라이언트로부터 일부 혼란을 숨길 수 있습니다.
한 가지 주의해야 할 점은 임시 테이블 위에 남아 있는 것입니다(세션을 정리할 시간을 갖기 전에 세션 도중에 무언가 오류가 발생한 경우). 오라클 작업을 정기적으로 실행하고 남은 테이블을 제거하도록 예약할 수 있습니다.

쿼리 데이터의 경우 user2015502의 솔루션이 가장 현명합니다.원격 데이터베이스에 LOB AT를 삽입하거나 업데이트하려면(xxx@yyy...에 삽입) 동적 SQL을 쉽게 사용할 수 있습니다.여기에서 솔루션을 확인하십시오.

구체화된 보기를 사용하여 모든 "캐시" 관리를 처리할 수 있습니다.완벽하지는 않지만 대부분의 경우 효과가 있습니다 :)

구체적인 시나리오를 생각하고 계십니까?예를 들어 LOB에 파일이 저장되어 있고 회사 인트라넷에 있는 경우 저장 프로시저를 작성하여 네트워크의 알려진 디렉터리에 파일을 추출하고 거기서 액세스할 수 있습니다.

이 특정한 경우 두 시스템이 통신할 수 있는 유일한 방법은 dblink를 사용하는 것입니다.

또한 테이블 솔루션은 그렇게 나쁘지 않습니다. 데이터를 dblink 쪽에서 "캐시"해야 하는 것은 번거로울 뿐입니다.

언급URL : https://stackoverflow.com/questions/38074/best-way-to-handle-lobs-in-oracle-distributed-databases

반응형