DBMS_CLOUD_NOTIFICATION 套裝軟體

DBMS_CLOUD_NOTIFICATION 套裝軟體可讓您將訊息或 SQL 查詢的輸出傳送給提供者。

先決條件

機組管理員必須使用 NAT 閘道設定輸出連線,如下所述:
  • 請依照 Oracle Cloud Infrastructure 文件建立 NAT 閘道的指示,在 Autonomous Database 資源所在的虛擬雲端網路 (VCN) 中建立 NAT 閘道。
  • 建立 NAT 閘道之後,請在 Autonomous Database 資源所在的每個子網路新增路由規則和傳出安全規則 (在 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 代理主機設定值必須允許資料庫存取雲端服務提供者。

這些設定值是由機組管理員在建立 Exadata Cloud@Customer 基礎架構時定義的,如使用主控台在 Cloud@Customer 上佈建 Exadata 資料庫服務中所述。

附註:

必須等到 Exadata 基礎架構為需要啟用狀態後,才能編輯網路組態 (包括 HTTP 代理主機)。啟用之後,您就無法編輯這些設定值。

在 My Oracle Support 中設定已啟動設定之 Exadata 基礎架構的 HTTP 代理主機時,必須要有服務要求 (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
 );

參數

Parameter - 參數 描述

provider

指定提供者。

有效值為:'email'、'msteams' 及 'slack'

此為必要參數。

credential_name

要存取提供者的證明資料物件名稱。

對於電子郵件提供者而言,證明資料是包含其使用者名稱和密碼之 SMTP 核准寄件者的證明資料名稱。

對於 msteams 提供者,證明資料是證明資料的名稱。

對於 Slack 提供者,證明資料的使用者名稱必須是 "SLACK_TOKEN",而 password 是 Slack Bot Token。

此為必要參數。

query

指定要執行的 SQL 查詢。結果會傳送給供應商。

此為必要參數。

params

以 JSON 格式指定 provider 的特定參數。

對於提供者類型 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.這會以 String 格式指定團隊 ID。
  • channel.這會以 String 格式指定通道 ID。
  • title.這會以 String 格式指定檔案的標題。大小上限為 50 個字元。
  • type.這會以 String 值指定輸出格式。有效值為 CSV 或 JSON。

對於提供者類型 slack,有效參數為:

  • channel.這會在 String 值中指定「通道 ID」。通路 ID 是通路的唯一 ID,與通路名稱不同。在 Slack 中,當您檢視通路詳細資料時,您可以在「關於」頁標上找到通路 ID。
  • type.這會以 String 值指定輸出格式。有效值為 CSV 或 JSON。

此為必要參數。

使用注意事項

請使用 DBMS_CLOUD.CREATE_CREDENTIAL(credential_nameusernamepassword) 程序來建立證明資料物件。如需詳細資訊,請參閱CREATE_CREDENTIAL 程序

  • 對於 email 提供者,使用者需要電子郵件傳遞伺服器的 SMTP 連線端點才能取得 smtp_host。使用者也需要 SMTP 核准的寄件者及其證明資料,才能與 Email Delivery 伺服器進行認證,以取得 credential_name。必須設定 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
 );

參數

Parameter - 參數 描述

provider

指定提供者。

有效值為:'email'、'msteams' 及 'slack'

此為必要參數。

credential_name

要存取提供者的證明資料物件名稱。

對於電子郵件提供者而言,證明資料是包含其使用者名稱和密碼之 SMTP 核准寄件者的證明資料名稱。

對於 msteams 提供者,證明資料必須同時包含使用者名稱和密碼的 bot_idbot_secret 金鑰。

對於 Slack 提供者,證明資料的使用者名稱必須是 "SLACK_TOKEN",而 password 是 Slack Bot Token。

此為必要參數。

message

指定訊息文字。

此為必要參數。

params

以 JSON 格式指定 provider 的特定參數。

對於提供者類型 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 中,當您檢視通路詳細資料時,您可以在「關於」頁標上找到通路 ID。

此為必要參數。

使用注意事項

請使用 DBMS_CLOUD.CREATE_CREDENTIAL(credential_nameusernamepassword) 程序來建立證明資料物件。如需詳細資訊,請參閱 CREATE_CREDENTIAL 程序

  • 對於 email 提供者,使用者需要電子郵件傳遞伺服器的 SMTP 連線端點才能取得 smtp_host。使用者也需要 SMTP 核准的寄件者及其證明資料,才能與 Email Delivery 伺服器進行認證,以取得 credential_name。必須設定 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;
/