從專用 Exadata 基礎架構上的 Autonomous Database 傳送 Slack 通知

您可以設定讓 Slack 使用 DBMS_CLOUD_NOTIFICATION 套裝程式將 Autonomous Database on Dedicated Exadata Infrastructure 查詢的訊息、警示或輸出傳送至 Slack 通道。

準備從 Autonomous Database 傳送 Slack 通知

若要傳送 Slack 通知,您必須設定讓 Slack 應用程式接收來自 Autonomous Database 的訊息。接著,建立一個證明資料來搭配 DBMS_CLOUD_NOTIFICATION 程序使用,以從 Autonomous Database 傳送 Slack 通知。

若要搭配 DBMS_CLOUD_NOTIFICATION 程序使用 Slack,請執行下列動作:

  1. 建立您的 Slack 應用程式。

    Slack 應用程式會安裝在 Slack 工作區中,而 Slack 工作區則有可傳送訊息的通道。Slack 應用程式的機器人權杖必須定義下列權限範圍:

    channels:read
    chat:write
    files:write

    如需有關設定 Slack 應用程式的資訊,請參閱建立應用程式

  2. 讓您的 Slack 管理員新增 Slack App 至 DBMS_CLOUD_NOTIFICATION 可以透過通道中的「整合」選項傳送訊息的通道。

    如需詳細資訊,請參閱基本應用程式設定

  3. https://app.slack.com 下的 Slack 應用程式特定頁面中找出應用程式的機器人權杖。

    如需詳細資訊,請參閱基本應用程式設定

  4. 在 Exadata Cloud@Customer 上,設定您環境中的 HTTP 代理主機設定值以允許資料庫存取 Slack。請參閱使用主控台在 Cloud@Customer 上佈建 Exadata 資料庫服務,瞭解在建立 Exadata Cloud@Customer 基礎架構時設定 HTTP 代理主機設定值的資訊。

    附註:

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

    若要為已經佈建的 Exadata 基礎架構設定 HTTP 代理主機,請在 My Oracle Support 中送出服務要求 (SR)。請參閱 在 My Oracle Support 中建立服務要求瞭解詳細資訊。

  5. 建立證明資料物件以存取 Autonomous Database 的 Slack App.

    秘訣:

    如果您無法順利使用 CREATE_CREDENTIAL 程序,請洽詢 ADMIN 使用者以授與 DBMS_CLOUD 套裝程式的執行存取權。

    證明資料的使用者名稱是 SLACK_TOKEN,密碼則是機器人記號。

    舉例而言:

    BEGIN
       DBMS_CLOUD.CREATE_CREDENTIAL(
         credential_name => 'SLACK_CRED',
         username    => 'SLACK_TOKEN',
         password    => 'xoxb-34....96-34....52-zW....cy');
    END;
    /

    如需詳細資訊,請參閱CREATE_CREDENTIAL 程序

  6. 設定存取控制,以允許使用者存取外部網路服務 (Slack)。
    BEGIN
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
      host         => 'slack.com', 
      lower_port   => 443,
      upper_port   => 443,
      ace          => xs$ace_type(
          privilege_list => xs$name_list('http'),
          principal_name => example_invoking_user, 
          principal_type => xs_acl.ptype_db)); 
    END;
  7. 如果您要傳送 SQL,請設定存取控制以允許使用 DBMS_CLOUD_NOTIFICATION.SEND_DATA 傳送輸出。
    BEGIN
     DBMS_NETWORK_ACL_ADMIN.APPEND_HOST_ACE (
      host         => 'slack.com', 
      lower_port   => 443,
      upper_port   => 443,
      ace          => xs$ace_type(
          privilege_list => xs$name_list('http'),
          principal_name => example_invoking_user, 
          principal_type => xs_acl.ptype_db)); 
    END;

    請參閱 Oracle Database 19c Security Guide 中的 Configuring Access Control for External Network ServicesOracle Database 23ai Security Guide ,瞭解詳細資訊。

傳送訊息至 Slack 通道

建立 Slack 證明資料物件 (如準備從 Autonomous Database 傳送 Slack 通知中所述) 之後,您可以使用 DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE 程序將訊息傳送至 Slack 通道。
範例:
BEGIN
   DBMS_CLOUD_NOTIFICATION.SEND_MESSAGE(
      provider          => 'slack',
      credential_name   => 'SLACK_CRED',
      message           => 'Alert from Autonomous Database...',
      params            => json_object('channel' value 'C0....08'));
END;
/ 

使用 params 參數指定 Slack 通道。

  • channel:指定通道 ID。

    通路 ID 是通路的唯一 ID,與通路名稱不同。在 Slack 中,當您檢視通路詳細資料時,您可以在「關於」頁標上找到通路 ID。請參閱 How to Find your Slack Team ID and Slack Channel ID 瞭解詳細資訊。

如需詳細資訊,請參閱SEND_MESSAGE 程序

將查詢結果傳送至 Slack 通道

建立 Slack 證明資料物件 (如準備從 Autonomous Database 傳送 Slack 通知中所述) 之後,您可以使用 DBMS_CLOUD_NOTIFICATION.SEND_DATA 程序將查詢輸出傳送至 Slack 通道。
範例:
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;
/

使用 params 參數指定 Slack 通道和資料類型:

  • channel:指定通道 ID。

    通路 ID 是通路的唯一 ID,與通路名稱不同。在 Slack 中,當您檢視通路詳細資料時,您可以在「關於」頁標上找到通路 ID。請參閱 How to Find your Slack Team ID and Slack Channel ID 瞭解詳細資訊。

  • type:指定輸出類型。有效值為:'csv' 或 'json'。

如需詳細資訊,請參閱SEND_DATA 程序