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
'programing' 카테고리의 다른 글
Android Studio 수동으로 Gradle Sync를 실행하는 방법은 무엇입니까? (0) | 2023.08.09 |
---|---|
재활용기 뷰 부착된 어댑터 없음, 레이아웃 건너뛰기 (0) | 2023.08.09 |
잘못된 SQL을 반환하는 Larvel 마이그레이션 (0) | 2023.08.09 |
파일을 다중 요소 파일로 변환하는 중 (0) | 2023.08.09 |
Oracle과 함께 Dapper 사용 (0) | 2023.08.09 |