Oracle

对网络流量进行加密

最佳做法是加密 Looker 应用与数据库之间的网络流量。请考虑启用安全的数据库访问文档页面中所述的选项之一。

如果您有兴趣使用 SSL 加密,请参阅 Oracle 文档

创建 Looker 用户

首先,创建指定的 Looker 用户:

-- connect / as sysdba;
CREATE USER LOOKER IDENTIFIED BY <password>
DEFAULT TABLESPACE USERS
TEMPORARY TABLESPACE TEMP;

接下来,为新 Looker 用户授予创建会话的权限:

GRANT CREATE SESSION TO LOOKER;

最后,针对您计划从 Looker 访问的数据表,向 Looker 用户授予适当的 SELECT 权限。如果您日后想访问其他表,则还需要对这些新表授予 SELECT 权限。

GRANT SELECT ON -- <all tables that will be used by looker>;

确保 Looker 可以查看所有表

确保查看者可以查看所有表

如果不先在 Oracle 中收集统计信息,Looker 可能无法识别表(尤其是空表)。如果生成的 LookML 或 SQL Runner 中未显示您需要的表,请尝试执行以下命令:

EXEC DBMS_STATS.GATHER_DATABASE_STATS;

如需了解其他方法,请参阅 Oracle 文档。

设置主数据库对象

Oracle DBA 必须在 Oracle 上设置以下对象和权限。以下命令会将 LOOKER_SESSIONLOOKER_SQL 创建为 V$SESSIONV$SQL 的同义词。

以根用户身份运行以下命令以完成此设置。这些示例假定 Looker 用户的名称为 LOOKER

CREATE OR REPLACE VIEW LOOKER_SQL
AS
  SELECT
    sql.SQL_ID,
    sql.SQL_TEXT
  FROM
    V$SQL sql,
    v$session sess
  WHERE
    sess.SQL_ADDRESS = sql.ADDRESS AND
    sess.username='LOOKER';

CREATE OR REPLACE SYNONYM LOOKER.LOOKER_SQL FOR LOOKER_SQL;

GRANT SELECT ON LOOKER.LOOKER_SQL TO LOOKER;

-- Pay special attention to the following comments:
-- the following view will be different for clustered Oracle deployments
CREATE OR REPLACE VIEW LOOKER_SESSION
AS
  SELECT
    SID,
    USERNAME,
    TYPE,
    STATUS,
    SQL_ID,
    -- If using a single node Oracle deployment
    "SERIAL#",
    -- If using a clustered Oracle deployment, like Oracle Real Application Clusters
    (SERIAL# || ',' || INST_ID) AS "SERIAL#",
    AUDSID
  -- If using a single node Oracle deployment
  FROM V$SESSION
  -- If using a clustered Oracle deployment, like Oracle Real Application Clusters
  FROM GV$SESSION
  WHERE
    USERNAME='LOOKER';

CREATE OR REPLACE SYNONYM LOOKER.LOOKER_SESSION FOR LOOKER_SESSION;

GRANT SELECT ON LOOKER.LOOKER_SESSION TO LOOKER;

设置对称聚合

您的 Oracle DBA 必须设置 LOOKER_HASH 函数才能启用对称聚合LOOKER_HASH 函数是 Oracle dbms_crypto.hash 函数的同义词。数据库管理员还必须创建关联的同义词和权限。以下命令假定 Looker 用户的名称为 LOOKER

CREATE OR REPLACE FUNCTION LOOKER_HASH(bytes raw, prec number)
  RETURN raw AS
  BEGIN
    return(dbms_crypto.HASH(bytes, prec));
  END;

CREATE OR REPLACE SYNONYM LOOKER.LOOKER_HASH FOR LOOKER_HASH;

GRANT EXECUTE ON LOOKER.LOOKER_HASH TO LOOKER;

GRANT EXECUTE ON SYS.LOOKER_HASH TO LOOKER;

SYS 前缀可能是 SYSDBAADMIN 或没有必要,具体取决于您的 Oracle 数据库配置。

设置永久性派生表

如需启用永久性派生表,请向 Looker 用户授予 UNLIMITED TABLESPACECREATE TABLE 权限。以下命令假定 Looker 用户的名称为 LOOKER

GRANT UNLIMITED TABLESPACE TO LOOKER;
GRANT CREATE TABLE TO LOOKER;

设置查询终止

请按照以下说明为标准 Oracle 部署或 Amazon RDS 部署配置查询终止。

标准 Oracle 部署

如需在标准 Oracle 部署中设置查询终止,Oracle DBA 必须将 LOOKER_KILL_QUERY 过程创建为 ALTER SYSTEM KILL SESSION 的同义词。为此,请执行以下命令:

CREATE OR REPLACE PROCEDURE LOOKER_KILL_QUERY(p_sid in varchar2,
                                              p_serial# in varchar2)
IS
  cursor_name pls_integer default dbms_sql.open_cursor;
  ignore pls_integer;

BEGIN
  SELECT
    COUNT(*) INTO ignore
  -- If using a single node Oracle deployment
  FROM V$SESSION
  -- If using a clustered Oracle deployment, like Oracle Real Application Clusters
  FROM GV$SESSION
  WHERE
    username = USER
    AND sid = p_sid
    -- If using a single node Oracle deployment
    AND serial# = p_serial#;
    -- If using a clustered Oracle deployment, like Oracle Real Application Clusters
    AND (SERIAL# || ',' || INST_ID) = p_serial#;

  IF (ignore = 1)
  THEN
    dbms_sql.parse(cursor_name,
                   'ALTER SYSTEM KILL SESSION '''
                   || p_sid || ',' || p_serial# || '''',
                   dbms_sql.native);
    ignore := dbms_sql.execute(cursor_name);
  ELSE
    raise_application_error(-20001,
                            'You do not own session ''' ||
                            p_sid || ',' || p_serial# ||
                            '''');
  END IF;
END;

数据库管理员还需要运行以下相关命令:

CREATE OR REPLACE SYNONYM LOOKER.LOOKER_KILL_QUERY FOR SYS.LOOKER_KILL_QUERY;
GRANT EXECUTE ON SYS.LOOKER_KILL_QUERY TO LOOKER;

SYS 前缀可能是 SYSDBAADMIN 或没有必要,具体取决于您的 Oracle 数据库配置。

Amazon RDS 部署

在 Amazon RDS Oracle 部署中,rdsadmin.rdsadmin_util.kill 过程用于终止查询。如需使用此过程,必须为 Looker 数据库用户分配 DBA 角色。

由于 DBA 是一种提升权限的数据库角色,您可以考虑跳过此步骤,放弃在 Looker 中终止查询。

如需向 Looker 数据库用户授予查询终止权限,请运行以下命令:

GRANT DBA TO LOOKER;

正在创建与数据库的 Looker 连接

在 Looker 的管理部分中,选择连接,然后点击添加连接

填写连接详情。大多数设置对于大多数数据库方言都是通用的。如需了解详情,请参阅将 Looker 连接到数据库文档页面。以下设置特定于 Oracle:

  • 名称:指定连接的名称。这是您在 LookML 项目中引用连接的方式。
  • 方言:Oracle。
  • 使用 TNS:启用透明网络底层 (TNS) 连接。
  • Host:主机名或 TNS 别名。
  • 端口:数据库端口。
  • 数据库:数据库名称(如果不使用 TNS)。
  • Service Name(服务名称):服务名称(如果使用 TNS)。
  • 用户名:数据库用户名或临时数据库(如果启用了 PDT)。
  • 密码:数据库用户密码。
  • 启用 PDT:使用此切换开关可启用永久性派生表。启用 PDT 后,连接窗口会显示其他 PDT 设置和 PDT 替换项部分。
  • 临时数据库:在 Oracle 中,用户是一种架构,因此应将其指定为数据库用户的名称。在此示例中,您将使用临时架构值 LOOKER
  • PDT 构建器连接数上限:指定此连接上可能的并发 PDT 构建数量。将此值设置得过高可能会对查询时间产生负面影响。如需了解详情,请参阅将 Looker 连接到您的数据库文档页面。
  • 其他 JDBC 参数:请将此字段留空,因为 Oracle 不支持其他 JDBC 参数。
  • 数据组和 PDT 维护时间表:一个 cron 表达式,用于指示 Looker 何时应检查数据组和永久性派生表。如需详细了解此设置,请参阅数据组和 PDT 维护时间表文档。
  • SSL:选中此选项可使用 SSL 连接。
  • 验证 SSL:请忽略此字段。Oracle 将使用默认 Java 信任存储区来验证 SSL。
  • 每个节点的连接数上限:此设置最初可以保留默认值。如需详细了解此设置,请参阅将 Looker 连接到数据库文档页面中的每个节点的最大连接数部分。
  • 连接池超时:此设置最初可以保留默认值。如需详细了解此设置,请参阅将 Looker 连接到数据库文档页面的连接池超时部分。
  • SQL Runner 预缓存:如需让 SQL Runner 不预加载表信息,并仅在选择表时加载表信息,请取消选中此选项。如需详细了解此设置,请参阅将 Looker 连接到数据库文档页面的 SQL Runner 预缓存部分。
  • 数据库时区:指定数据库中使用的时区。如果您不想进行时区转换,请将此字段留空。如需了解详情,请参阅使用时区设置文档页面。

如需验证连接是否成功,请点击测试。如需了解问题排查信息,请参阅测试数据库连接文档页面。

要保存这些设置,请点击连接。 在 Looker 的管理部分中,选择连接,然后点击添加连接

功能支持

要让 Looker 支持某些功能,您的数据库方言也必须支持这些功能。

从 Looker 24.16 开始,Oracle 支持以下功能:

特征 是否支持?
支持级别
支持
Looker (Google Cloud Core)
对称汇总
派生表
永久性 SQL 派生表
永久性原生派生表
稳定视图
查询终止
基于 SQL 的数据透视
时区
SSL
小计
JDBC 其他参数
区分大小写
位置类型
名单类型
百分位
不同百分位
SQL Runner 显示进程
SQL Runner 中的“Describe Table”命令
SQL Runner 显示索引
SQL Runner 选择 10
SQL 运行程序数量
SQL 说明
Oauth 凭据
上下文注释
连接池
HLL 草图
聚合感知
增量 PDT
毫秒
微秒
具体化视图
近似计数不同