DBMS_CLOUD_NOTIFICATION 패키지

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

필요 조건

플리트 관리자가 아래 설명된 대로 NAT 게이트웨이를 사용하여 아웃바운드 접속을 구성해야 합니다.
  • Oracle Cloud Infrastructure 문서NAT 게이트웨이 생성 지침에 따라 Autonomous Database 리소스가 상주하는 VCN(가상 클라우드 네트워크)에서 NAT 게이트웨이를 생성합니다.
  • NAT 게이트웨이를 생성한 후 각 서브넷(VCN 내)에 경로 규칙 및 송신 보안 규칙을 추가합니다. 여기서 Autonomous Database 리소스는 게이트웨이를 사용하여 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
      • 대상 포트 범위: 모두

      해당 규칙이 없으면 Add Egress Rules를 누르고 이러한 특성을 가진 송신 규칙을 추가합니다.

환경의 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. String 값에서 승인된 발신자의 전자메일 ID를 지정합니다.
  • 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. String 형식으로 테넌트 ID를 지정합니다.
  • team. 팀 ID를 String 형식으로 지정합니다.
  • channel. String 형식으로 채널 ID를 지정합니다.
  • title. 이렇게 하면 파일 제목이 String 형식으로 지정됩니다. 최대 크기는 50자입니다.
  • type. 이렇게 하면 출력 형식이 String 값으로 지정됩니다. 적합한 값은 CSV 또는 JSON입니다.

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

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

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

사용법 참고

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

  • email 제공자의 경우 전자메일 전송 서버가 smtp_host를 가져오려면 사용자에게 SMTP 접속 끝점이 필요합니다. 또한 사용자는 credential_name을 얻기 위해 전자메일 전송 서버로 인증하기 위해 SMTP 승인 발신자 및 해당 인증서가 필요합니다. SMTP 연결을 구성하고 SMTP 자격 증명을 생성하고 승인해야 합니다.
  • msteams 제공자의 경우 사용자에게 Microsoft Teams 앱 및 봇이 구성되어 있어야 합니다. 관리 센터에서 관리자로부터 승인을 받은 후 앱을 조직에 게시하고 설치해야 합니다. 사용자는 또한 Azure 포털에서 Graph API에 대한 Files.ReadWrite.AllChannelSettings.Read.All 권한에 대한 액세스도 필요합니다. 필요한 토큰을 생성하려면 사용자가 사용자 이름에 bot_id, 비밀번호에 bot_secret가 필요합니다. Microsoft Teams에 대해 DBMS_CLOUD_NOTIFICATION.SEND_DATA를 사용할 때 지원되는 최대 파일 크기는 4MB입니다.
  • slack 제공자의 경우 username 값은 적합한 문자열일 수 있으며 password는 Slack 봇 토큰입니다.

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'입니다.

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

credential_name

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

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

msteams 제공자의 경우 인증서에 사용자 이름과 비밀번호 모두에 bot_idbot_secret 키가 포함되어야 합니다.

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

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

message

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

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

params

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

제공자 유형 email의 경우 적합한 매개변수는 다음과 같습니다.
  • sender. String 값에서 승인된 발신자의 전자메일 ID를 지정합니다.
  • 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를 지정합니다.

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

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

사용법 참고

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

  • email 제공자의 경우 전자메일 전송 서버가 smtp_host를 가져오려면 사용자에게 SMTP 접속 끝점이 필요합니다. 또한 사용자는 credential_name을 얻기 위해 전자메일 전송 서버로 인증하기 위해 SMTP 승인 발신자 및 해당 인증서가 필요합니다. SMTP 연결을 구성하고 SMTP 자격 증명을 생성하고 승인해야 합니다.
  • msteams 제공자의 경우 사용자에게 Microsoft Teams 앱 및 봇이 구성되어 있어야 합니다. 관리 센터에서 관리자로부터 승인을 받은 후 앱을 조직에 게시하고 설치해야 합니다. 사용자는 또한 Azure 포털에서 Graph API에 대한 Files.ReadWrite.AllChannelSettings.Read.All 권한에 대한 액세스도 필요합니다. 필요한 토큰을 생성하려면 사용자가 사용자 이름에 bot_id, 비밀번호에 bot_secret가 필요합니다.
  • slack 제공자의 경우 username 값은 적합한 문자열일 수 있으며 password는 Slack 봇 토큰입니다.

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 Database.',
      params            => json_object('channel' value 'C0....08'));
END;
/