DBMS_PIPE Package(Singleton Pipes)

DBMS_PIPE 패키지를 사용하면 동일한 인스턴스의 두 개 이상의 세션이 통신할 수 있습니다.

전용 Exadata 인프라의 Oracle Autonomous AI Database는 Oracle Database 19c에서 사용할 수 있는 핵심 DBMS_PIPE 기능과 확장 기능을 지원합니다.

Oracle Database에서 제공되는 핵심 DBMS_PIPE 기능에 대한 자세한 내용은 Oracle Database 19c PL/SQL Packages and Types ReferenceDBMS_PIPE 또는 Oracle Database 26ai PL/SQL Packages and Types Reference를 참조하십시오.

싱글톤 파이프에 대한 DBMS_PIPE 개요

파이프 기능에는 외부 서비스 인터페이스, 디버깅, 독립 트랜잭션 및 경보와 같은 여러 잠재적 응용 프로그램이 있습니다.

자율운영 AI 데이터베이스에서 DBMS_PIPE 패키지는 싱글톤 파이프를 지원하는 확장된 기능을 제공합니다. 자세한 내용은 Oracle Database 19c PL/SQL Packages and Types ReferenceDBMS_PIPE 또는 Oracle Database 26ai PL/SQL Packages and Types Reference를 참조하십시오.

DBMS_PIPE의 싱글톤 파이프 피쳐는 다음을 제공합니다.

싱글톤 파이프는 지원되는 DBMS_PIPE 유형 중 하나일 수 있습니다.

싱글톤 파이프의 DBMS_PIPE 서브 프로그램 요약

이 표에서는 DBMS_PIPE 하위 프로그램을 나열하고 간략하게 설명합니다.

하위 프로그램 설명
CREATE_PIPE 함수 파이프를 작성합니다(개인 파이프에 필요).

NEXT_ITEM_TYPE 함수

버퍼에서 다음 항목의 데이터 유형을 반환합니다.

PACK_MESSAGE 프로시저

로컬 버퍼에 메시지를 작성합니다.

PURGE 프로시저

명명된 파이프의 내용을 비웁니다.
RECEIVE_MESSAGE 함수 이름이 지정된 파이프에서 로컬 버퍼로 메시지를 복사합니다.

RESET_BUFFER 프로시저

로컬 버퍼의 내용을 비웁니다.

REMOVE_PIPE 함수

명명된 파이프 제거
SEND_MESSAGE 함수 명명된 파이프에 메시지 보내기: 명명된 파이프가 없는 경우 공용 파이프를 암시적으로 생성합니다.

UNIQUE_SESSION_NAME 함수

고유한 세션 이름을 반환합니다.

UNPACK_MESSAGE 프로시저

버퍼의 다음 항목에 액세스합니다.

CREATE_PIPE 함수

이 함수는 공용(public) 또는 전용(private) 파이프를 명시적으로 생성합니다. private 플래그가 TRUE인 경우 파이프 생성자가 전용 파이프의 소유자로 지정됩니다.

명시적으로 생성된 파이프는 REMOVE_PIPE를 호출하거나 인스턴스를 종료해야만 제거할 수 있습니다.

싱글톤 파이프를 만들려면 singleton 매개변수를 TRUE로 설정합니다. 싱글톤 파이프에는 다음 인수가 적용됩니다.

구문

DBMS_PIPE.CREATE_PIPE (
   pipename     IN VARCHAR2,
   maxpipesize  IN INTEGER DEFAULT 66536,
   private      IN BOOLEAN DEFAULT TRUE,
   singleton    IN BOOLEAN DEFAULT FALSE,
   shelflife    IN INTEGER DEFAULT 0)
RETURN INTEGER;

매개변수

매개변수 설명
pipename

작성 중인 파이프의 이름입니다.

SEND_MESSAGERECEIVE_MESSAGE를 호출할 때 이 이름을 사용해야 합니다. 이 이름은 전체 인스턴스에서 고유해야 합니다.

주의: ORA$로 시작하는 파이프 이름은 사용하지 마십시오. 이러한 프로시저는 Oracle에서 제공하는 프로시저에서 사용하도록 예약되어 있습니다. 파이프 이름은 128바이트보다 길지 않아야 하며 대소문자를 구분하지 않습니다. 지금은 이름에 Globalization Support 문자를 포함할 수 없습니다.

maxpipesize

파이프에 허용되는 최대 크기(바이트)입니다.

파이프에 있는 모든 메시지의 총 크기는 이 크기를 초과할 수 없습니다. 이 최대값을 초과하면 메시지가 차단됩니다.

기본 maxpipesize는 66536바이트입니다.

파이프에 대한 maxpipesize는 파이프 특성의 일부가 되며 파이프 수명 동안 지속됩니다. 값이 큰 SEND_MESSAGE 호출자는 maxpipesize를 늘립니다. 값이 작은 호출자는 더 큰 기존 값을 사용합니다.

기본 maxpipesize 65536은 모든 파이프에 적용할 수 있습니다.

private

기본값인 TRUE를 사용하여 전용 파이프를 만듭니다.

공용 파이프는 SEND_MESSAGE를 호출할 때 암시적으로 생성할 수 있습니다.

singleton

TRUE를 사용하여 싱글톤 파이프를 작성합니다.

기본값: FALSE

shelflife

싱글톤 파이프에 캐시된 메시지의 만료 시간(초)입니다. 지정된 shelflife 시간이 초과되면 더 이상 파이프에서 메시지에 액세스할 수 없습니다. shelflife 매개변수는 싱글톤 파이프에만 적용할 수 있습니다.

기본값은 0이며, 이는 메시지가 만료되지 않음을 의미합니다.

반환 값

Return 설명
0

성공.

파이프가 이미 있고 파이프를 생성하려는 유저가 파이프를 사용할 권한이 있는 경우 Oracle은 0을 반환하여 성공을 나타내며 파이프에 이미 있는 모든 데이터는 유지됩니다.

6

기존 파이프를 싱글톤 파이프로 변환하지 못했습니다.

  • 기존 메시지가 두 개 이상인 암시적 파이프는 단일 파이프로 변환할 수 없습니다.
  • 싱글톤이 아닌 명시적 파이프의 경우 DBMS_PIPE.SEND_MESSAGE는 싱글톤 인수가 TRUE로 설정된 메시지를 보낼 수 없습니다.
7 shelflife 매개변수에 대해 0이 아닌 값이 제공되고 파이프가 싱글톤 파이프가 아닙니다.
ORA-23322

이름 지정 충돌로 인해 실패했습니다.

동일한 이름의 파이프가 존재하고 다른 유저가 생성한 경우 Oracle은 이름 지정 충돌을 나타내는 오류 ORA-23322를 표시합니다.

예외사항

예외사항 설명
Null pipe name 권한 오류: 동일한 이름의 파이프가 이미 있으며 사용할 수 없습니다.

1시간의 선반으로 싱글톤 파이프를 만듭니다.

DECLARE
  l_status INTEGER;
BEGIN
  l_status := DBMS_PIPE.create_pipe(pipename  => 'MY_PIPE1',
                                    private   => TRUE,
                                    singleton => TRUE,
                                    shelflife => 3600);
END;
/

RECEIVE_MESSAGE 함수

이 기능은 메시지를 로컬 메시지 버퍼에 복사합니다.

구문

DBMS_PIPE.RECEIVE_MESSAGE (
   pipename      IN VARCHAR2,
   timeout       IN INTEGER      DEFAULT maxwait,
   cache_func    IN VARCHAR2     DEFAULT NULL)
RETURN INTEGER;

매개변수

테이블 - RECEIVE_MESSAGE 함수 매개변수

매개변수 설명
pipename

메시지를 수신할 파이프의 이름입니다.

ORA$로 시작하는 이름은 Oracle에서 사용하도록 예약되어 있습니다.

timeout

메시지를 기다리는 시간(초)입니다. 시간 초과 0을 사용하면 차단하지 않고도 읽을 수 있습니다.

시간 초과에는 cache_func 매개변수에 지정된 실행 캐시 함수에 소요된 시간이 포함되지 않습니다.

기본값: 86400000(1000일)으로 정의된 상수 MAXWAIT입니다.

cache_func

Singleton Pipe에 메시지를 자동으로 캐시하도록 함수 이름을 캐시에 저장합니다.

함수 이름은 소유자 스키마로 정규화되어야 합니다.

  • OWNER.FUNCTION_NAME
  • OWNER.PACKAGE.FUNCTION_NAME

기본값: NULL

반환 값

테이블 - RECEIVE_MESSAGE 함수 반환 값

Return 설명
0 성공
1 시간 초과됨. 파이프가 암시적으로 생성되어 비어 있으면 제거됩니다.
2 파이프의 레코드가 버퍼에 비해 너무 큽니다.
3 인터럽트가 발생했습니다.
8 캐시 기능은 싱글톤 파이프를 사용하는 경우에만 지정할 수 있습니다.
ORA-23322 사용자에게 파이프에서 읽을 수 있는 권한이 부족합니다.

사용법 참고

캐시 함수 매개변수

싱글톤 파이프는 다음 두 가지 시나리오의 경우 캐시 함수를 지원하여 파이프에 메시지를 자동으로 캐시합니다.

함수 이름은 소유자 스키마로 정규화되어야 합니다.

캐시 함수를 사용하려면 DBMS_PIPE.RECEIVE_MESSAGE를 호출하는 현재 세션 사용자가 캐시 함수를 실행하는 데 필요한 권한이 있어야 합니다.

캐시 함수 구문

CREATE OR REPLACE FUNCTION *cache_function_name* (
       pipename  IN VARCHAR2
) RETURN INTEGER;
매개변수 데이터 유형 설명
pipename VARCHAR2 싱글톤 파이프의 이름입니다.
Return 설명
0 성공
0이 아닌 DBMS_PIPE.RECEIVE_MESSAGE에서 실패 값이 반환되었습니다.

싱글톤 파이프의 읽기 세션에서 복잡성의 캡슐화 및 추상화 기능을 제공하는 캐시 함수를 정의합니다. 캐시 함수 내의 일반적인 작업은 다음과 같습니다.

예외사항

예외사항 설명
Null pipe name 권한 오류입니다. 파이프에서 레코드를 제거할 수 있는 권한이 부족합니다. 파이프는 다른 사람의 소유입니다.

DECLARE
  l_status INTEGER;
BEGIN
  l_status := DBMS_PIPE.receive_message(pipename   => 'MY_PIPE1',
                                        timeout    => 1,
                                        cache_func => 'MY_USER.MY_CACHE_FUNC');
END;
/

SEND_MESSAGE 함수

이 함수는 명명된 파이프에 메시지를 전송합니다.

메시지는 PACK_MESSAGE에 대한 호출로 채워진 로컬 메시지 버퍼에 포함됩니다. CREATE_PIPE를 사용하여 파이프를 명시적으로 생성할 수 있습니다. 그렇지 않으면 파이프가 암시적으로 생성됩니다.

암시적 싱글톤 파이프를 만들려면 singleton 매개변수를 TRUE로 설정합니다. 싱글톤 파이프에는 다음 인수가 적용됩니다.

CREATE_PIPE 함수는 싱글톤 파이프에 캐시된 새 메시지의 기본값이 됩니다.

구문

DBMS_PIPE.SEND_MESSAGE (
    pipename     IN VARCHAR2,
    timeout      IN INTEGER DEFAULT MAXWAIT,
    maxpipesize  IN INTEGER DEFAULT 65536,
    singleton    IN BOOLEAN DEFAULT FALSE,
    shelflife    IN INTEGER DEFAULT 0)
RETURN INTEGER;

매개변수

테이블 - SEND_MESSAGE 함수 매개변수

매개변수 설명
pipename

메시지를 배치할 파이프의 이름입니다.

명시적 파이프를 사용하는 경우 이 이름은 CREATE_PIPE를 호출할 때 지정한 이름입니다.

**주의:** 'ORA$'로 시작하는 파이프 이름은 사용하지 마십시오. 이러한 이름은 Oracle에서 제공하는 프로시저에서 사용하도록 예약되어 있습니다. 파이프 이름은 128바이트보다 길지 않아야 하며 대소문자를 구분하지 않습니다. 지금은 이름에 Globalization Support 문자를 포함할 수 없습니다.

timeout

파이프에 메시지를 배치하려고 시도하는 동안 대기할 시간(초)입니다.

기본값은 86400000(1000일)으로 정의되는 상수 MAXWAIT입니다.

maxpipesize

파이프에 허용되는 최대 크기(바이트)입니다.

파이프에 있는 모든 메시지의 총 크기는 이 크기를 초과할 수 없습니다. 이 최대값을 초과하면 메시지가 차단됩니다. 기본값은 65536바이트입니다.

파이프에 대한 maxpipesize는 파이프 특성의 일부가 되며 파이프 수명 동안 지속됩니다. 값이 큰 SEND_MESSAGE 호출자는 maxpipesize를 늘립니다. 값이 작은 호출자는 단순히 기존의 더 큰 값을 사용합니다.

maxpipesizeSEND_MESSAGE 프로시저의 일부로 지정하면 파이프를 열기 위한 별도의 호출이 필요하지 않습니다. 파이프를 명시적으로 작성한 경우 선택적 maxpipesize 매개변수를 사용하여 작성 파이프 크기 사양을 재정의할 수 있습니다.

기본 maxpipesize 65536은 모든 파이프에 적용할 수 있습니다.

singleton

TRUE를 사용하여 싱글톤 파이프를 작성합니다.

기본값: FALSE

shelflife

싱글톤 파이프에 캐시된 메시지의 만료 시간(초)입니다.

지정된 shelflife 시간이 초과되면 더 이상 파이프에서 메시지에 액세스할 수 없습니다. shelflife 매개변수는 싱글톤 파이프에만 적용할 수 있습니다.

기본값은 0이며, 이는 메시지가 만료되지 않음을 의미합니다.

반환 값

Return 설명
0

성공.

파이프가 이미 있고 파이프를 생성하려는 유저가 파이프를 사용할 권한이 있는 경우 Oracle은 0을 반환하여 성공을 나타내며 파이프에 이미 있는 모든 데이터는 유지됩니다.

SYSDBS/SYSOPER로 연결된 사용자가 파이프를 재생성하면 Oracle은 상태 0을 반환하지만 파이프 소유권은 변경되지 않습니다.

1

시간 초과됨.

이 절차는 파이프에 대한 잠금을 가져올 수 없거나 파이프가 너무 가득 차서 사용할 수 없기 때문에 시간 초과될 수 있습니다. 파이프가 암시적으로 생성되어 비어 있으면 제거됩니다.

3

인터럽트가 발생했습니다.

파이프가 암시적으로 생성되어 비어 있으면 제거됩니다.

6

기존 파이프를 싱글톤 파이프로 변환하지 못했습니다.

  • 기존 메시지가 두 개 이상인 암시적 파이프는 단일 파이프로 변환할 수 없습니다.
  • 싱글톤이 아닌 명시적 파이프의 경우 DBMS_PIPE.SEND_MESSAGE는 싱글톤 인수가 TRUE로 설정된 메시지를 보낼 수 없습니다.
7 shelflife 매개변수에 대해 0이 아닌 값이 제공되고 파이프가 싱글톤 파이프가 아닙니다.
ORA-23322

권한이 부족합니다.

동일한 이름의 파이프가 존재하고 다른 유저가 생성한 경우 Oracle은 이름 지정 충돌을 나타내는 오류 ORA-23322를 표시합니다.

예외사항

예외사항 설명
Null pipe name 권한 오류입니다. 파이프에 쓸 수 있는 권한이 부족합니다. 파이프는 개인이며 다른 사람이 소유하고 있습니다.

관련 콘텐츠

싱글톤 파이프를 사용하여 메시지 캐시