클라우드 객체 저장소에 저장된 메시지와 함께 영구 메시징 사용
DBMS_PIPE를 사용한 영구 메시징 정보
DBMS_PIPE
를 사용하는 영구 메시징을 사용하면 하나 이상의 데이터베이스 세션이 클라우드 객체 저장소에 저장된 메시지를 사용하여 동일한 지역 또는 여러 지역에서 통신할 수 있습니다.
DBMS_PIPE
의 영구 메시지:
-
매우 큰 메시지를 주고 받을 수 있게 합니다.
-
많은 수의 파이프 메시지 전송을 지원합니다.
-
여러 데이터베이스 및 여러 리전의 데이터베이스 간에 단일 데이터베이스 내에서 메시지를 송수신할 수 있도록 지원합니다.
-
동일한 클라우드 객체 저장소 위치 URI를 사용하여 여러 파이프를 지원합니다.
지속 메시징 파이프는 지원되는 DBMS_PIPE
유형 중 하나로 생성할 수 있습니다.
- 암시적 파이프:
DBMS_PIPE.SEND_MESSAGE
함수를 사용하여 알 수 없는 파이프 이름으로 메시지를 보낼 때 자동으로 생성됩니다. - 명시적 파이프: 사용자가 지정한 파이프 이름과 함께
DBMS_PIPE.CREATE_PIPE
함수를 사용하여 생성됩니다. - 공용 파이프:
DBMS_PIPE
패키지에 대해EXECUTE
권한이 있는 모든 사용자가 액세스할 수 있습니다. - 전용 파이프: 파이프 작성자와 동일한 사용자가 있는 세션에서 액세스할 수 있습니다.
주:
Oracle은 영구 메시징으로 메시지를 보내거나 받기 전에 명시적 파이프를 만들 것을 권장합니다.DBMS_PIPE.CREATE_PIPE
를 사용하여 명시적 파이프를 만들면 private
매개변수를 설정하여 원하는 액세스 권한(public 또는 private)으로 파이프를 만들 수 있습니다.
다음은 영구 메시징이 포함된 DBMS_PIPE
에 대한 일반 워크플로우를 보여줍니다.

그림 database-pipe-persistent-messaging.eps에 대한 설명입니다.
DBMS_PIPE
를 사용하는 기존 응용 프로그램은 최소한의 변경으로 계속 작동할 수 있습니다. 로그온 트리거를 사용하거나 다른 초기화 루틴을 사용하여 자격 증명 객체 및 위치 URI와 함께 DBMS_PIPE
를 사용하는 기존 응용 프로그램을 구성할 수 있습니다. DBMS_PIPE
인증서 및 위치 URI를 설정한 후에는 영구 메시징을 사용하기 위해 다른 변경사항이 필요하지 않습니다. 이후 모든 파이프 사용은 데이터베이스 메모리가 아닌 클라우드 객체 저장소에 메시지를 저장합니다. 이를 통해 최소한의 변경으로 인메모리에서 영구 클라우드 오브젝트 스토리지로 메시지의 저장 방법을 변경할 수 있습니다.
영구 메시징 개요 및 기능
영구 메시징을 사용하는 DBMS_PIPE
의 기능:
-
동일한 지역 또는 여러 지역에 있는 여러 Autonomous Database 인스턴스에서 메시지를 보내고 검색할 수 있습니다.
-
지속 메시지는 정확히 하나의 프로세스에서 쓰거나 읽도록 보장됩니다. 이렇게 하면 동시 읽기 및 쓰기로 인해 메시지 내용이 일치하지 않습니다.
DBMS_PIPE
는 지정된 시간에 메시지 또는 수신 메시지를 활성 상태로 보내는 하나의 작업만 허용하며 이러한 작업은 잠금 메커니즘으로 보호됩니다. 그러나 진행 중인 작업으로 인해 작업이 불가능한 경우timeout
값에 도달할 때까지 프로세스가 주기적으로 재시도됩니다. -
DBMS_PIPE
는DBMS_CLOUD
를 사용하여 클라우드 객체 저장소에 액세스합니다. 메시지는 지원되는 클라우드 객체 저장소에 저장할 수 있습니다. 자세한 내용은 클라우드 오브젝트 스토리지 URI 형식을 참조하십시오. DBMS_PIPE
는DBMS_CLOUD
를 사용하여 클라우드 객체 저장소에 액세스하고 지원되는 모든 인증서 유형을 사용할 수 있습니다.DBMS_CLOUD.CREATE_CREDENTIAL
: 자세한 내용은 CREATE_CREDENTIAL procedure를 참조하십시오.
DBMS_PIPE 권한 부여 및 보안
DBMS_PIPE
프로시저는 호출자 권한으로 실행됩니다. 개인 파이프는 현재 사용자가 소유하며 사용자가 만든 개인 파이프는 동일한 사용자만 사용할 수 있습니다. 이는 메시지가 클라우드 객체 저장소에 저장되는 인메모리 파이프 및 영구 메시징 파이프 모두에 적용됩니다. 메시지 전송 및 수신은 호출자의 스키마에서 실행됩니다.
메시지가 클라우드 객체 저장소에 저장되는 프라이빗 파이프를 사용하면 location_uri
매개변수로 식별된 클라우드 객체 저장소와의 인증에 인증서 객체가 필요합니다. 호출하는 사용자는 객체 저장소에 액세스하는 데 사용되는 credential_name
매개변수로 지정된 인증서 객체에 대해 EXECUTE
권한이 있어야 합니다.
공용 파이프를 사용하려면 사용자 데이터베이스 세션에 DBMS_PIPE
에 대한 실행 권한이 있어야 합니다. 영구 메시징을 사용하고 메시지를 클라우드 객체 저장소에 저장하는 퍼블릭 파이프의 경우 사용자 데이터베이스 세션은 DBMS_CLOUD
에 대한 실행 권한이 있어야 하고 인증서 객체에 대한 실행 권한이 있어야 합니다. 또는 메시지가 포함된 위치 URI에 액세스할 수 있는 인증서 객체를 생성할 수 있습니다.
DBMS_PIPE 제한
DBMS_PIPE
패키지는 서로 다른 문자 집합을 사용하는 데이터베이스 간의 메시지 전송을 지원하지 않습니다. 예를 들어, AL32UTF8를 사용하는 Autonomous Database 인스턴스 하나와 WE8MSWIN1252를 사용하는 다른 인스턴스가 있는 경우 이 두 데이터베이스 간에 DBMS_PIPE
를 사용하는 메시지를 전송할 수 없습니다. 이 경우 두 데이터베이스 간에 DBMS_PIPE
를 사용하여 메시지를 보내려고 하면 시스템에서 ORA-12704
오류가 발생합니다.
자세한 내용은 Autonomous Database에 대한 문자 집합 선택을 참조하십시오.
동일한 데이터베이스에서 영구 메시지 검색
동일한 Autonomous Database 인스턴스(메시지가 전송된 인스턴스)의 명시적 파이프에서 영구 메시지를 검색하는 단계를 설명합니다.
Autonomous Database 인스턴스에서는 다른 세션에서 파이프로 전송된 메시지를 수신할 수 있습니다. DBMS_PIPE
프로시저는 호출자의 권한 프로시저이며 현재 호출된 유저로 실행됩니다.
개인 파이프는 파이프를 만드는 현재 사용자가 소유합니다. 개인 파이프는 파이프를 작성한 사용자만 액세스할 수 있습니다. 이는 인메모리 메시지를 사용하는 파이프 및 클라우드 객체 저장소에 저장된 메시지와 함께 영구 메시징을 사용하는 파이프에 적용됩니다.
공용 파이프는 DBMS_PIPE
에 대한 실행 권한이 있는 데이터베이스 세션에서 액세스할 수 있습니다. 이는 인메모리 메시지를 사용하는 파이프 및 클라우드 객체 저장소에 저장된 메시지와 함께 영구 메시징을 사용하는 파이프에 적용됩니다.
자세한 내용은 SET_CREDENTIAL_NAME 프로시저 및 GET_LOCATION_URI 함수를 참조하십시오.
자세한 내용은 RECEIVE_MESSAGE 함수를 참조하십시오.