对 Oracle 的 Looker 支持是使用传统的 Oracle 部署实现的。如果您的 Oracle 数据库是 Oracle RAC 部署,则 Looker 可以成功集成,但由于从节点检索查询连接 ID 的元数据不同,终止终止查询时可能会遇到问题。
加密网络流量
Looker 强烈建议对 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_SESSION
和 LOOKER_SQL
作为 V$SESSION
和 V$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 comments below:
-- 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
函数的同义词。DBA 还必须创建关联的同义词和特权。以下命令假定 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
前缀可能是SYSDBA
、ADMIN
或不必要,具体取决于您的 Oracle 数据库配置。
设置永久性派生表
如需启用永久性派生表,请向 Looker 用户授予 UNLIMITED TABLESPACE
和 CREATE 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;
DBA 还需要运行以下相关命令:
CREATE OR REPLACE SYNONYM LOOKER.LOOKER_KILL_QUERY FOR SYS.LOOKER_KILL_QUERY;
GRANT EXECUTE ON SYS.LOOKER_KILL_QUERY TO LOOKER;
SYS
前缀可能是SYSDBA
、ADMIN
或不必要,具体取决于您的 Oracle 数据库配置。
Amazon RDS 部署
在 Amazon RDS Oracle 部署中,rdsadmin.rdsadmin_util.kill
过程用于终止查询。如需执行此过程,必须为 Looker 数据库用户分配 DBA
角色。
由于 DBA 是一个提升的数据库角色,因此您可以考虑跳过此步骤,并在 Looker 中放弃查询终止。
如需授予 Looker 数据库用户查询终止功能,请运行以下命令:
GRANT DBA TO LOOKER;
创建与数据库的 Looker 连接
在 Looker 的管理部分中,选择连接,然后点击添加连接。
填写连接详情。大多数设置是大多数数据库方言通用的设置。如需了解相关信息,请参阅将 Looker 连接到数据库文档页面。以下设置仅适用于 Oracle:
- 名称:指定连接的名称。这是您在 LookML 项目中引用连接的方式。
- Dialect:Oracle。
- 使用 TNS:启用透明网络基站 (TNS) 连接。
- 主机:主机名或 TNS 别名。
- 端口:数据库端口。
- 数据库:数据库名称(如果未使用 TNS)。
- 服务名称:服务名称(如果使用 TNS)。
- 用户名:数据库用户名;如果已启用 PDT,则为临时数据库。
- 密码:数据库用户密码。
- 启用 PDT:使用此切换开关可以启用永久性派生表。启用 PDT 后,Connection 窗口会显示其他 PDT 设置和 PDT Override 部分。
- 临时数据库:在 Oracle 中,用户是一个架构,因此应指定为数据库用户的名称。在此示例中,您应使用临时架构值
LOOKER
。 - PDT 构建器连接数上限:指定此连接上可能同时存在的 PDT build 的数量。将此值设得过高可能会对查询时间产生负面影响。如需了解详情,请参阅将 Looker 连接到数据库文档页面。
- 更多 JDBC 参数:将此字段留空,因为 Oracle 不支持其他 JDBC 参数。
- 数据组和 PDT 维护时间表:一个
cron
表达式,用于指示 Looker 何时应检查数据组和永久性派生表。如需详细了解此设置,请参阅 Datagroup 和 PDT 维护时间表文档。 - SSL:选中即可使用 SSL 连接。
- 验证 SSL:忽略此字段。Oracle 将使用默认的 Java Truststore 验证 SSL。
- 每个节点的连接数上限:此设置可以最初设为默认值。如需详细了解此设置,请参阅将 Looker 连接到数据库文档页面的每个节点的连接数上限部分。
- 连接池超时:此设置最初可以保留默认值。如需详细了解此设置,请参阅将 Looker 连接到数据库文档页面的连接池超时部分。
- SQL Runner 预缓存:若要防止 SQL Runner 预加载表信息以及仅在用户选择表时加载表信息,请取消选中此选项。如需详细了解此设置,请参阅将 Looker 连接到数据库文档页面的 SQL Runner 预缓存部分。
- 数据库时区:指定数据库中使用的时区。如果不想转换时区,请将此字段留空。如需了解详情,请参阅使用时区设置文档页面。
如需验证连接是否成功,请点击测试。如需了解问题排查信息,请参阅测试数据库连接文档页面。
要保存这些设置,请点击连接。 在 Looker 的管理部分中,选择连接,然后点击添加连接。
功能支持
为了让 Looker 支持某些功能,您的数据库方言也必须支持这些功能。
Oracle 从 Looker 23.8 开始支持以下功能:
功能 | 是否支持? |
---|---|
支持级别 | 支持 |
Looker (Google Cloud Core) | 是 |
对称聚合 | 是 |
派生表 | 是 |
永久性 SQL 派生表 | 是 |
永久性原生派生表 | 是 |
稳定版观看次数 | 是 |
查询终止 | 是 |
基于 SQL 的数据透视 | 是 |
时区 | 是 |
SSL | 是 |
小计 | 是 |
JDBC 附加参数 | 否 |
区分大小写 | 是 |
位置类型 | 是 |
列表类型 | 是 |
百分位 | 是 |
不同百分位 | 否 |
SQL Runner 显示进程 | 是 |
SQL Runner 描述表 | 是 |
SQL Runner 显示索引 | 是 |
SQL Runner 选择 10 | 是 |
SQL 运行程序计数 | 是 |
SQL 说明 | 否 |
OAuth 凭据 | 否 |
上下文评论 | 是 |
连接池 | 否 |
HLL 素描 | 否 |
总体认知度 | 是 |
PDT 增幅 | 否 |
毫秒 | 是 |
微秒 | 是 |
具体化视图 | 否 |
唯一计数 | 否 |