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에 대한 일반 워크플로우를 보여줍니다.
명시적 지속 파이프 작성 및 메시지 보내기
지정된 파이프 이름(명시적 파이프)을 사용하여 영구 파이프를 작성하는 단계를 설명합니다.
DBMS_CLOUD.CREATE_CREDENTIAL 절차에 따라 객체 저장소 자격 증명을 저장합니다. 예를 들면, 다음과 같습니다.
이 작업은 인증서를 암호화된 형식으로 데이터베이스에 저장합니다. 인증서 이름에 대해 원하는 이름을 사용할 수 있습니다. 이 단계는 객체 저장소 인증서가 변경되지 않는 한 한 한 번만 필요합니다. 인증서를 저장한 후 동일한 인증서 이름을 사용하여 DBMS_PIPE로 메시지를 보내고 받을 클라우드 객체 저장소에 액세스할 수 있습니다.
매개변수에 대한 자세한 내용은 CREATE_CREDENTIAL Procedure를 참조하십시오. Oracle Cloud Infrastructure Object Storage의 경우 인증서가 기본 Oracle Cloud Infrastructure 인증을 사용해야 합니다.
주:
SQL*Plus 및 SQL Developer와 같은 일부 툴에서는 앰퍼샌드 문자(&)를 특수 문자로 사용합니다. 암호에 앰퍼샌드 문자가 있는 경우 예제에 표시된 대로 해당 도구에서 SET DEFINE OFF 명령을 사용하여 특수 문자를 사용 안함으로 설정하고 자격 증명이 제대로 만들어지도록 합니다.
메시지를 보내고 검색할 명시적 파이프를 만듭니다. 예를 들어, ORDER_PIPE이라는 파이프를 만듭니다.
SELECT ownerid, name, type FROM v$db_pipes
WHERE name = 'ORDER_PIPE';
OWNERID NAME TYPE
------- ---------- -------
80 ORDER_PIPE PRIVATE
DBMS_PIPE 프로시저를 사용하여 클라우드 객체 저장소에 영구 메시지를 저장할 기본 액세스 인증서 및 위치 URI를 설정합니다.
BEGIN
DBMS_PIPE.SET_CREDENTIAL_NAME('my_persistent_pipe_cred');
DBMS_PIPE.SET_LOCATION_URI('https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/');
END;
/
이러한 절차에서는 DBMS_PIPE 절차에 사용할 기본 자격 증명 이름과 기본 위치 URI를 설정합니다.
Oracle Cloud Infrastructure Object Storage를 사용하여 메시지를 저장하는 경우 Oracle Cloud Infrastructure 고유 URI 또는 Swift URI를 사용할 수 있습니다. 그러나 위치 URI와 자격 증명은 다음과 같은 유형과 일치해야 합니다.
고유 URI 형식을 사용하여 Oracle Cloud Infrastructure Object Storage에 액세스하는 경우 인증서 객체에서 고유 Oracle Cloud Infrastructure 서명 키 인증을 사용해야 합니다.
Swift URI 형식을 사용하여 Oracle Cloud Infrastructure Object Storage에 액세스하는 경우 인증서 객체에서 인증 토큰 인증을 사용해야 합니다.
DECLARE
l_result INTEGER;
l_date DATE;
BEGIN
l_date := sysdate;
DBMS_PIPE.PACK_MESSAGE(l_date); -- date of order
DBMS_PIPE.PACK_MESSAGE('C123'); -- order number
DBMS_PIPE.PACK_MESSAGE(5); -- number of items in order
DBMS_PIPE.PACK_MESSAGE('Printers'); -- type of item in order
l_result := DBMS_PIPE.SEND_MESSAGE(
pipename => 'ORDER_PIPE',
credential_name => DBMS_PIPE.GET_CREDENTIAL_NAME,
location_uri => DBMS_PIPE.GET_LOCATION_URI);
IF l_result = 0 THEN
DBMS_OUTPUT.put_line('DBMS_PIPE sent order successfully');
END IF;
END;
/
이 작업은 인증서를 암호화된 형식으로 데이터베이스에 저장합니다. 인증서 이름에 대해 원하는 이름을 사용할 수 있습니다. 이 단계는 객체 저장소 인증서가 변경되지 않는 한 한 한 번만 필요합니다. 인증서를 저장한 후에는 동일한 인증서 이름을 사용하여 클라우드 객체 저장소에 액세스하여 DBMS_PIPE로 메시지를 보내고 받을 수 있습니다.
SQL*Plus 및 SQL Developer와 같은 일부 툴에서는 앰퍼샌드 문자(&)를 특수 문자로 사용합니다. 암호에 앰퍼샌드 문자가 있는 경우 예제에 표시된 대로 해당 도구에서 SET DEFINE OFF 명령을 사용하여 특수 문자를 사용 안함으로 설정하고 자격 증명이 제대로 만들어지도록 합니다.
메시지를 보낸 파이프와 동일한 이름의 명시적 파이프를 만듭니다. 예를 들어, ORDER_PIPE이라는 파이프를 만듭니다.
SELECT ownerid, name, type FROM v$db_pipes
WHERE name = 'ORDER_PIPE';
OWNERID NAME TYPE
------- ---------- -------
80 ORDER_PIPE PRIVATE
DBMS_PIPE 프로시저를 사용하여 DBMS_PIPE가 지속 메시지에 액세스할 수 있도록 객체 저장소에 대한 기본 액세스 인증서 및 위치 URI를 설정합니다.
BEGIN
DBMS_PIPE.SET_CREDENTIAL_NAME('my_persistent_pipe_cred');
DBMS_PIPE.SET_LOCATION_URI('https://objectstorage.us-phoenix-1.oraclecloud.com/n/namespace-string/b/bucketname1/');
END;
/
이러한 절차에서는 DBMS_PIPE 절차에 사용할 기본 자격 증명 이름과 기본 위치 URI를 설정합니다.
Oracle Cloud Infrastructure Object Storage를 사용하여 메시지를 저장하는 경우 Oracle Cloud Infrastructure 고유 URI 또는 Swift URI를 사용할 수 있습니다. 그러나 위치 URI와 자격 증명은 다음과 같은 유형과 일치해야 합니다.
고유 URI 형식을 사용하여 Oracle Cloud Infrastructure Object Storage에 액세스하는 경우 인증서 객체에서 고유 Oracle Cloud Infrastructure 서명 키 인증을 사용해야 합니다.
Swift URI 형식을 사용하여 Oracle Cloud Infrastructure Object Storage에 액세스하는 경우 인증서 객체에서 인증 토큰 인증을 사용해야 합니다.