在专用 Exadata 基础结构上从自治 AI 数据库发送 Slack 通知

您可以将 Slack 配置为使用 DBMS_CLOUD_NOTIFICATION 程序包将查询的消息、预警或输出从 Dedicated Exadata Infrastructure 上的 Autonomous AI Database 发送到 Slack 通道。

准备从自治 AI 数据库发送 Slack 通知

要发送 Slack 通知,必须将 Slack 应用程序配置为从自治 AI 数据库接收消息。接下来,创建身份证明以与 DBMS_CLOUD_NOTIFICATION 过程一起使用,以便从自治 AI 数据库发送 Slack 通知。

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

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

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

     channels:read
     chat:write
     files:write
    

    有关设置 Slack 应用程序的信息,请参见 Creating an app

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

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

  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. 创建身份证明对象以从自治 AI 数据库访问 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 Guide 中的 Configuring Access Control for External Network ServicesOracle Database 26ai Security Guide

将消息发送到 Slack 渠道

按 Prepare to Send Slack Notifications from Autonomous AI 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 Procedure

将查询结果发送到 Slack 渠道

按 Prepare to Send Slack Notifications from Autonomous AI 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 通道和数据类型:

相关主题