DBMS_CLOUD_NOTIFICATION 패키지

DBMS_CLOUD_NOTIFICATION 패키지를 사용하면 메시지나 SQL 질의의 출력을 제공자에게 전송할 수 있습니다.

DBMS_CLOUD_NOTIFICATION에서 지원되는 제공자는 전자메일, Microsoft 팀, OCI 통지(ONS) 및 Slack입니다.

DBMS_CLOUD_NOTIFICATION 패키지와 함께 OCI 통지 서비스를 사용하는 경우 DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE 프로시저만 지원됩니다(DBMS_CLOUD_NOTIFICATION.SEND_DATA 프로시저는 지원되지 않음).

필수 조건

아래에 설명된 대로 플리트 관리자가 NAT 게이트웨이를 사용하여 아웃바운드 접속을 구성했어야 합니다.

  • Oracle Cloud Infrastructure 문서NAT 게이트웨이 생성 지침에 따라 자율운영 AI 데이터베이스 리소스가 상주하는 VCN(가상 클라우드 네트워크)에 NAT 게이트웨이를 생성합니다.

  • NAT 게이트웨이를 생성한 후 자율운영 AI 데이터베이스 리소스가 상주하는 VCN의 각 서브넷에 경로 규칙 및 송신 보안 규칙을 추가하여 해당 리소스가 게이트웨이를 사용하여 Azure AD 인스턴스에서 퍼블릭 키를 얻을 수 있도록 합니다.

    1. 서브넷의 서브넷 세부 정보 페이지로 이동합니다.

    2. 서브넷 정보 탭에서 서브넷의 경로 테이블 이름을 눌러 해당 경로 테이블 세부정보 페이지를 표시합니다.

    3. 기존 경로 규칙의 테이블에서 다음 특성을 가진 규칙이 이미 있는지 확인합니다.

      • 대상: 0.0.0.0/0

      • 대상 유형: NAT 게이트웨이

      • 대상: VCN에서 방금 생성한 NAT 게이트웨이의 이름입니다.

      해당 규칙이 없는 경우 경로 규칙 추가를 누르고 해당 특성을 가진 경로 규칙을 추가합니다.

    4. 서브넷에 대한 서브넷 세부정보 페이지로 돌아갑니다.

    5. 서브넷의 보안 목록 테이블에서 서브넷의 보안 목록 이름을 눌러 해당 보안 목록 세부정보 페이지를 표시합니다.

    6. 사이드 메뉴의 리소스에서 송신 규칙을 누릅니다.

    7. 기존 송신 규칙의 테이블에서 다음 특성을 가진 규칙이 이미 있는지 확인합니다.

      • 대상 유형: CIDR

      • 대상:0.0.0.0/0

      • IP 프로토콜:TCP

      • 소스 포트 범위:443

      • 대상 포트 범위:모두

      해당 규칙이 없는 경우 송신 규칙 추가를 누르고 이러한 특성을 가진 송신 규칙을 추가합니다.

사용자 환경의 HTTP 프록시 설정에서 데이터베이스가 클라우드 서비스 공급자에 액세스할 수 있도록 허용해야 합니다.

해당 설정은 콘솔을 사용하여 Cloud@Customer에서 Exadata Database Service 프로비저닝에 설명된 대로 Exadata Cloud@Customer 인프라를 생성하는 동안 플리트 관리자가 정의합니다.

주: HTTP 프록시를 포함한 네트워크 구성은 Exadata 인프라가 활성화 필요 상태가 될 때까지만 편집할 수 있습니다. 일단 활성화되면 해당 설정을 편집할 수 없습니다.

이미 프로비전된 Exadata 인프라에 대해 HTTP 프록시를 설정하려면 My Oracle Support에서 SR(서비스 요청)이 필요합니다. 자세한 내용은 My Oracle Support에서 서비스 요청 생성을 참조하십시오.

DBMS_CLOUD_NOTIFICATION 서브 프로그램 요약

이 표에는 패키지에 포함된 서브 프로그램이 요약되어 있습니다.

하위 프로그램 설명
SEND_DATA 프로시저 SQL 질의 출력을 제공자에게 전송합니다.
SEND_MESSAGE 프로시저 제공자에게 텍스트 메시지를 전송합니다.

SEND_DATA 프로시저

SEND_DATA 프로시저는 지정된 질의 결과를 제공자에게 전송합니다.

구문

DBMS_CLOUD_NOTIFICATION.SEND_DATA(
       provider           IN  VARCHAR2,
       credential_name    IN  VARCHAR2,
       query              IN  CLOB,
       params             IN  CLOB
 );

매개변수

매개변수 설명
provider

제공자를 지정합니다.

적합한 값은 'email', 'msteams' 및 'slack'입니다.

이 매개변수는 필수입니다.

credential_name

제공자에 액세스할 자격 증명 객체의 이름입니다.

전자 메일 제공자의 경우 인증서는 사용자 이름과 암호를 포함하는 SMTP 승인 발신자의 인증서 이름입니다.

msteams 제공자의 경우 자격 증명은 자격 증명 이름입니다.

Slack 제공자의 경우 인증서의 사용자 이름은 "SLACK_TOKEN"이고 password은 Slack 봇 토큰입니다.

이 매개변수는 필수입니다.

query

실행할 SQL 질의를 지정합니다. 결과가 제공자에게 전송됩니다.

이 매개변수는 필수입니다.

params

provider에 대한 특정 매개변수를 JSON 형식으로 지정합니다.

제공자 유형 email의 경우 적합한 매개변수는 다음과 같습니다.

  • sender. 승인된 발신자의 전자메일 ID를 String 값으로 지정합니다.
  • smtp_host. String 값에 SMTP 호스트 이름을 지정합니다.
  • subject. 전자 메일 제목을 String 값으로 지정합니다. 최대 크기는 100자입니다.
  • recipient. String 값에 수신자의 전자메일 ID를 지정합니다. 수신자가 여러 명인 경우 전자메일 ID 사이에 쉼표를 사용합니다.
  • to_cc. 전자메일의 참조를 수신하는 전자메일 ID를 지정합니다. String 값입니다. 참조 수신자가 여러 개인 경우 전자메일 ID 사이에 쉼표를 사용합니다.
  • to_bcc. 전자메일의 숨은 참조를 수신하는 전자메일 ID를 지정합니다. String 값입니다. 숨은 참조 수신자가 여러 명인 경우 전자메일 ID 사이에 쉼표를 사용합니다.
  • message. String 값에 메시지 텍스트를 지정합니다.
  • type. String 값의 출력 형식을 CSV 또는 JSON으로 지정합니다.
  • title. String 값에 SQL 출력 첨부의 제목을 지정합니다. 파일 이름을 생성하는 데 사용되므로 제목에는 문자, 숫자, 밑줄, 하이픈 또는 점만 해당 값의 문자로 포함되어야 합니다.

제공자 유형 msteams의 경우 적합한 매개변수는 다음과 같습니다.

  • tenant. 테넌트 ID를 String 형식으로 지정합니다.
  • team. 팀 ID를 String 형식으로 지정합니다.
  • channel. 채널 ID를 String 형식으로 지정합니다.
  • title. 파일 제목을 String 형식으로 지정합니다. 최대 크기는 50자입니다.
  • type. 출력 형식을 String 값으로 지정합니다. 적합한 값은 CSV 또는 JSON입니다.

제공자 유형 slack의 경우 적합한 매개변수는 다음과 같습니다.

  • channel. String 값에 채널 ID를 지정합니다. 채널 ID는 채널에 대한 고유 ID이며 채널 이름과 다릅니다. Slack에서 채널 세부 정보를 볼 때 "정보" 탭에서 채널 ID를 찾을 수 있습니다.
  • type. 출력 형식을 String 값으로 지정합니다. 적합한 값은 CSV 또는 JSON입니다.

이 매개변수는 필수입니다.

사용법 참고

DBMS_CLOUD.CREATE_CREDENTIAL(credential_name, username, password) 절차를 사용하여 자격 증명 객체를 만듭니다. 자세한 내용은 CREATE_CREDENTIAL Procedure를 참조하십시오.

email 제공자와 함께 SQL 출력을 보냅니다.

BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'EMAIL_CRED',
    username        => 'username',
    password        => 'password');
END;
/

BEGIN
   DBMS_CLOUD_NOTIFICATION.SEND_DATA(
        provider        => 'email',
        credential_name => 'EMAIL_CRED',
        query           => 'SELECT tablespace_name FROM dba_tablespaces',
        params          => json_object('recipient' value  'mark@oracle.com, suresh@oracle.com',
                                       'to_cc'  value 'nicole@oracle.com1, jordan@oracle.com',
                                       'to_bcc' value 'manisha@oracle.com',
                                       'subject' value 'Test subject',
                                       'type' value 'json',
                                       'title' value 'mytitle',
                                       'message' value 'This is the message',
                                       'smtp_host' value 'smtp.email.example.com',
                                       'sender'    value  'approver_sender@oracle.com' )
   );
   END;
/

msteams 제공자와 함께 SQL 출력을 보냅니다.

BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(credential_name => 'TEAMS_CRED',
        username        => '*bot_id*',
        password        => '*bot_secret*');
END;
/

BEGIN
     DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(provider => 'msteams',
        credential_name => 'TEAMS_CRED',
        query           => 'SELECT tablespace_name FROM dba_tablespaces',
        params          => json_object('tenant'value '5b743bc******c0286',
                                       'team'value '0ae401*********5d2bd',
                                       'channel'value '19%3a94be023*****%40thread.tacv2',
                                       'title'value 'today',
                                       'type'value 'csv'));
END;
/

slack 제공자와 함께 SQL 출력을 보냅니다.

BEGIN
   DBMS_CLOUD.CREATE_CREDENTIAL(
     credential_name => 'SLACK_CRED',
     username        => 'SLACK_TOKEN',
     password        => 'password');
END;
/
BEGIN
  DBMS_CLOUD_NOTIFICATION.SEND_DATA(
      provider        => 'slack',
      credential_name => 'SLACK_CRED',
      query           => 'SELECT username, account_status, expiry_date FROM USER_USERS WHERE rownum < 5',
      params          => json_object('channel' value 'C0....08','type' value 'csv'));
END;
/

SEND_MESSAGE 프로시저

프로시저는 제공자에게 텍스트 메시지를 전송합니다.

구문

DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
       provider           IN  VARCHAR2,
       credential_name    IN  VARCHAR2,
       message            IN  CLOB,
       params             IN  CLOB
 );

매개변수

매개변수 설명
provider

제공자를 지정합니다.

적합한 값은 'email', 'msteams', 'slack' 및 'oci'입니다.

이 매개변수는 필수입니다.

credential_name

제공자에 액세스할 자격 증명 객체의 이름입니다.

전자 메일 제공자의 경우 인증서는 사용자 이름과 암호를 포함하는 SMTP 승인 발신자의 인증서 이름입니다.

msteams 제공자의 경우 자격 증명은 사용자 이름과 암호 모두에 bot_idbot_secret 키를 포함해야 합니다.

Slack 제공자의 경우 인증서의 사용자 이름은 "SLACK_TOKEN"이고 password은 Slack 봇 토큰입니다.

oci 제공자의 경우 인증서는 적합한 Oracle Cloud Infrastructure 서명 키 기반 인증서입니다.

이 매개변수는 필수입니다.

message

메시지 텍스트를 지정합니다.

이 매개변수는 필수입니다.

params

provider에 대한 특정 매개변수를 JSON 형식으로 지정합니다.

제공자 유형 email의 경우 적합한 매개변수는 다음과 같습니다.

  • sender. 승인된 발신자의 전자메일 ID를 String 값으로 지정합니다.
  • smtp_host. String 값에 SMTP 호스트 이름을 지정합니다.
  • subject. 전자메일 제목을 String 값으로 지정합니다. 최대 크기는 100자입니다.
  • recipient. String 값에 수신자의 전자메일 ID를 지정합니다. 수신자가 여러 명인 경우 전자메일 ID 사이에 쉼표를 사용합니다.
  • to_cc. 전자메일의 참조를 수신하는 전자메일 ID를 지정합니다. 참조 수신자가 여러 개인 경우 전자메일 ID 사이에 쉼표를 사용합니다.
  • to_bcc. 전자메일의 숨은 참조를 수신하는 전자메일 ID를 지정합니다. 숨은 참조 수신자가 여러 명인 경우 전자메일 ID 사이에 쉼표를 사용합니다.

제공자 유형 msteams의 경우 적합한 매개변수는 다음과 같습니다.

  • channel. String 값에 채널 ID를 지정합니다.

제공자 유형 slack의 경우 적합한 매개변수는 다음과 같습니다.

  • channel. String 값에 채널 ID를 지정합니다.

유형이 oci인 제공자 OCI 통지의 경우 적합한 매개변수는 다음과 같습니다.

  • topic_ocid: 지정
  • title: 메시지의 제목 라인에 대해 지정합니다.

oci 제공자의 경우 구독에 따라 메시지에 대해 가능한 다른 엔드포인트가 있습니다. title 매개변수는 가입마다 다르게 처리됩니다.

  • email: title는 메시지의 제목 행을 지정합니다.
  • Slack: title 값이 사용되지 않습니다. 포함된 경우 값이 무시됩니다.

채널 ID는 채널에 대한 고유 ID이며 채널 이름과 다릅니다. Slack에서 채널 세부 정보를 볼 때 "정보" 탭에서 채널 ID를 찾을 수 있습니다.

이 매개변수는 필수입니다.

사용법 참고

DBMS_CLOUD.CREATE_CREDENTIAL(credential_name, username, password) 절차를 사용하여 자격 증명 객체를 만듭니다. 자세한 내용은 CREATE_CREDENTIAL Procedure를 참조하십시오.

email 제공자와 함께 텍스트 메시지를 보냅니다.

BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(
    credential_name => 'EMAIL_CRED',
    username        => 'username',
    password        => 'password');
END;
/

BEGIN
   DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
        provider        => 'email',
        credential_name => 'EMAIL_CRED',
        message         => 'Subject content',
        params          => json_object('recipient' value  'mark@oracle.com, suresh@oracle.com',
                                       'to_cc'  value 'nicole@oracle.com, jordan@oracle.com',
                                       'to_bcc' value 'manisha@oracle.com',
                                       'subject' value 'Test subject',
                                       'smtp_host' value 'smtp.email.example.com',
                                       'sender'    value  'approver_sender@oracle.com' )
   );
   END;
/

msteams 제공자와 함께 텍스트 메시지를 보냅니다.

BEGIN
    DBMS_CLOUD.CREATE_CREDENTIAL(credential_name => 'TEAMS_CRED',
        username        => '*bot_id*',
        password        => '*bot_secret*');
END;
/

BEGIN
     DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
        provider        => 'msteams',
        credential_name => 'TEAMS_CRED',
        message         => 'text from new teams api',
        params          => json_object('channel'value 'C0....08'),'region'value 'india');
END;
/

slack 제공자와 함께 텍스트 메시지를 보냅니다.

BEGIN
   DBMS_CLOUD.CREATE_CREDENTIAL(
     credential_name => 'SLACK_CRED',
     username        => 'SLACK_TOKEN',
     password        => 'password');
END;
/
BEGIN
   DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
      provider          => 'slack',
      credential_name   => 'SLACK_CRED',
      message           => 'Send text from Autonomous AI Database.',
      params            => json_object('channel' value 'C0....08'));
END;
/

OCI 통지와 함께 텍스트 메시지를 전송합니다. oci 제공자를 입력합니다.

BEGIN
   DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
      provider          => 'oci',
      credential_name  => 'OCI_CRED',
      message          => 'Text message for you.',
      params           => json_object('topic_ocid'  value 'oci********pa',
      'title'  value 'Title for message subject' ));
END;
/