Oracle

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 からアクセスする予定のデータテーブルに対する適切な SELECT 権限を Looker ユーザーに付与します。今後、追加のテーブルにアクセスする場合は、その新しいテーブルにも SELECT を付与する必要があります。

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

Looker がすべてのテーブルを認識できるようにする

Looker は、最初に Oracle で統計情報を収集しないとテーブル(特に空のテーブル)を識別できない場合があります。生成された LookML または SQL Runner に目的のテーブルが表示されない場合は、次のコマンドを実行してみてください。

EXEC DBMS_STATS.GATHER_DATABASE_STATS;

別の方法については、Oracle のドキュメントをご覧ください。

メイン データベース オブジェクトの設定

Oracle DBA は、Oracle 上で次のオブジェクトと権限を設定する必要があります。次のコマンドは、V$SESSIONV$SQL の類義語として LOOKER_SESSIONLOOKER_SQL を作成します。

root ユーザーとして次のコマンドを実行して、この設定を完了します。これらの例では、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=&apos;LOOKER&apos;;

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=&apos;LOOKER&apos;;

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;

Oracle データベースの構成に応じて、SYS 接頭辞を SYSDBAADMIN、または不要にできます。

永続的な派生テーブルの設定

永続的な派生テーブルを有効にするには、Looker ユーザーに UNLIMITED TABLESPACE 権限と CREATE TABLE 権限を付与します。次のコマンドは、Looker ユーザー名が LOOKER であることを前提としています。

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

クエリの強制終了の設定

以下の手順に従って、従来の Oracle デプロイまたは Amazon RDS デプロイに対するクエリ強制終了を構成します。

従来の Oracle デプロイ

従来の Oracle デプロイメントでクエリの強制終了を設定するには、Oracle DBA で ALTER SYSTEM KILL SESSION の類義語として LOOKER_KILL_QUERY プロシージャを作成する必要があります。これを行うには、次のコマンドを実行します。

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,
                   &apos;ALTER SYSTEM KILL SESSION &apos;&apos;&apos;
                   || p_sid || &apos;,&apos; || p_serial# || &apos;&apos;&apos;&apos;,
                   dbms_sql.native);
    ignore := dbms_sql.execute(cursor_name);
  ELSE
    raise_application_error(-20001,
                            &apos;You do not own session &apos;&apos;&apos; ||
                            p_sid || &apos;,&apos; || p_serial# ||
                            &apos;&apos;&apos;&apos;);
  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;

Oracle データベースの構成に応じて、SYS 接頭辞を SYSDBAADMIN、または不要にできます。

Amazon RDS のデプロイ

Amazon RDS Oracle のデプロイでは、rdsadmin.rdsadmin_util.kill プロシージャを使用してクエリを強制終了します。この手順を使用するには、Looker データベース ユーザーに DBA ロールが割り当てられている必要があります。

DBA は昇格したデータベース ロールであるため、この手順をスキップし、Looker でのクエリの強制終了を使用しないことをおすすめします。

Looker データベースのユーザークエリを強制終了するには、次のコマンドを実行します。

GRANT DBA TO LOOKER;

Looker 接続の設定

Looker の [Admin] セクションで [Connections] を選択し、[Add Connection] をクリックします。

これらの設定の多くはデータベース言語に共通するものであり、Looker のデータベースへの接続に関するドキュメント ページで説明しています。以下の設定は、Oracle に固有の [接続設定] ページに固有のものです。

  • 名前: 接続の名前を指定します。これは、LookML プロジェクトの接続の参照方法です。
  • Dialect: Oracle。
  • TNS を使用する: 透過的ネットワーク基板(TNS)接続を有効にします。
  • ホスト: ホスト名または TNS エイリアス。
  • ポート: データベース ポート。
  • データベース: データベース名(TNS を使用しない場合)。
  • サービス名: サービス名(TNS を使用している場合)。
  • ユーザー名: データベースのユーザー名または PDT が有効になっている場合は一時データベース
  • パスワード: データベース ユーザーのパスワード。
  • 永続的な派生テーブル: 永続派生テーブルを有効にするには、このチェックボックスをオンにします。これにより、[Temp Database] フィールドと [PDT Overrides] 列が表示されます。
  • 一時データベース: Oracle ではユーザーはスキーマであるため、データベース ユーザー名として指定する必要があります。この例では、一時スキーマ値 LOOKER を使用します。
  • 最大 PDT ビルダー接続: この接続で可能な同時 PDT ビルドの数を指定します。この値を大きくしすぎると、クエリ時間に悪影響を及ぼす可能性があります。詳細については、Looker のデータベースへの接続ドキュメント ページをご覧ください。
  • Additional Params: Oracle では追加の JDBC パラメータをサポートしていないため、空白のままにします。
  • PDT とデータグループのメンテナンス スケジュール: Looker でデータグループと永続的な派生テーブルをいつチェックするかを指定する cron 式。この設定の詳細については、PDT とデータグループのメンテナンス スケジュールのドキュメントをご覧ください。
  • SSL: SSL 接続を使用する場合はチェックボックスをオンにします。
  • SSL 証明書を確認する: このフィールドは無視されます。Oracle ではデフォルトの Java Truststore を使用して SSL を検証します。
  • 最大接続数: 最初はデフォルト値のままでも構いません。この設定の詳細については、Looker のデータベースへの接続ドキュメントで最大接続数をご覧ください。
  • Connection Pool Timeout: 最初はデフォルト値のままでも構いません。この設定の詳細については、Looker のデータベースへの接続に関するドキュメントの接続プールのタイムアウトをご覧ください。
  • SQL Runner のプリキャッシュ: SQL Runner でテーブル情報をプリロードせず、テーブルが選択されている場合にのみテーブル情報を読み込みないようにするには、このオプションをオフにします。この設定の詳細については、Looker のデータベースへの接続ドキュメント ページの SQL Runner プリキャッシュ セクションをご覧ください。
  • データベースのタイムゾーン: データベースで使用するタイムゾーンを指定します。タイムゾーンの変換を希望しない場合は、このフィールドを空白のままにします。詳しくは、タイムゾーンの設定の使用に関するドキュメントをご覧ください。

機能のサポート

一部の機能については、Lookerでサポートするには、データベースダイアレクトが同じ機能に対応している必要があります。

Looker の最新リリースでは、Oracle は次の Looker 機能をサポートしています。

次のステップ

データベースの構成が完了したら、Looker からデータベースに接続します。