从基于专用 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 通知。

要将 Slack 与 DBMS_CLOUD_NOTIFICATION 过程结合使用,请执行以下操作:

  1. 创建您的 Slack 应用程序。

    Slack 应用程序安装在 Slack 工作区中,而该工作区又具有可以发送消息的渠道。Slack 应用程序的机器人标记必须定义以下权限范围:

    channels:read
    chat:write
    files:write

    有关设置 Slack 应用程序的信息,请参阅创建应用程序

  2. 让您的 Slack 管理员将 Slack 应用程序添加到 DBMS_CLOUD_NOTIFICATION 可以通过渠道中的 "Integrations" 选项向其发送消息的渠道中。

    有关详细信息,请参阅基本应用程序设置

  3. 在 Slack 应用特定页面的 https://app.slack.com 下找到应用的机器人令牌。

    有关详细信息,请参阅基本应用程序设置

  4. 在 Exadata Cloud@Customer 上,在您的环境中配置 HTTP 代理设置以允许数据库访问 Slack。有关在创建 Exadata Cloud@Customer 基础结构时设置 HTTP 代理设置的信息,请参见 Using the Console to Provision Exadata Database Service on Cloud@Customer

    注意:

    只有在 Exadata 基础结构处于“需要激活”状态之前,才能编辑包括 HTTP 代理的网络配置。一旦激活,就无法编辑这些设置。

    要为已预配的 Exadata 基础结构设置 HTTP 代理,请在 My Oracle Support 中提交服务请求 (SR)。有关详细信息,请参见在 My Oracle Support 中创建服务请求

  5. 创建身份证明对象以从 Autonomous Database 访问 Slack 应用程序。

    提示:

    如果无法成功使用 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 Procedure

  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 GuideOracle Database 23ai Security Guide 中的 Configuring Access Control for External Network Services

向 Slack 渠道发送消息

Prepare to Send Slack Notifications from 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 中,当您查看渠道详细信息时,可以在“About(关于)”选项卡上找到渠道 ID。有关更多信息,请参见 How to Find Your Slack Team ID and Slack Channel ID

有关更多信息,请参见SEND_MESSAGE Procedure

将查询结果发送到 Slack 渠道

Prepare to Send Slack Notifications from 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 中,当您查看渠道详细信息时,可以在“About(关于)”选项卡上找到渠道 ID。有关更多信息,请参见 How to Find Your Slack Team ID and Slack Channel ID

  • type:指定输出类型。有效值为:'csv' 或 'json'。

有关更多信息,请参见SEND_DATA Procedure