

翻訳は機械翻訳により提供されています。提供された翻訳内容と英語版の間で齟齬、不一致または矛盾がある場合、英語版が優先します。

# Oracle Database のデータソースへの接続
<a name="oracle-datasource-AMG"></a>

**注記**  
このデータソースは、Grafana Enterprise 専用です。詳細については、「[Enterprise プラグインへのアクセス許可の管理](upgrade-to-enterprise-plugins.md)」を参照してください。  
さらに、バージョン 9 以降をサポートするワークスペースでは、このデータソースに適切なプラグインをインストール必要がある可能性があります。詳細については、「[プラグインを使用したワークスペースの拡張](grafana-plugins.md)」を参照してください。

## データソースの追加
<a name="datasource-configuration"></a>

 Grafana の左側パネルで **[データソース]** を選択します。

 以下のようにデータソースの追加を選択します。

 **oracle** を入力してデータソースを検索します。

 Oracle サーバーの詳細を入力します。

 ホスト名 (または IP アドレス) とポート番号、接続するユーザー名およびパスワードを入力します。

 tnsnames オプションのトグルを使用すると、tnsnames.ora の設定ファイルにある有効なエントリを、基本認証とともに使用できます。

 前の例と似ていますが、認証には Kerberos を使用しています。OS または docker コンテナで kerberos を使用するための設定方法については、kerberos 固有のセットアップガイドを参照してください。

 必要に応じて、Oracle サーバーへの接続に使用、およびタイムゾーン対応マクロで使用される、タイムゾーンを変更します。デフォルト設定は UTC です。

 データソースを保存してテストすると、「データベース接続 OK」という緑のメッセージが表示されます。

## 使用方法
<a name="usage-4"></a>

### マクロ
<a name="macros-1"></a>

 構文を簡素化し、日付範囲フィルターなどの動的部分を許可するため、クエリにマクロを含めることができます。列名は二重引用符 (`"`) 内に含める必要があります。


|  マクロの例  |  説明  | 
| --- | --- | 
|  \$1\$1\$1\$1time(dateColumn)\$1 \$1 列の名前を「time」に変更した式に置き換えられます。例えば、`dateColumn as time` \$1\$1\$1\$1timeEpoch(dateColumn)\$1 は  |  列の名前を time に変更し、値を Unix タイムスタンプ (ミリ秒単位) に変換する式に置き換えられます。 | 
|  \$1\$1\$1\$1timeFilter(dateColumn)\$1 \$1 指定された列名を使用して時間範囲フィルターに置き換えられます。例えば、`dateColumn BETWEEN TO\$1DATE('19700101','yyyymmdd') \$1 (1/24/60/60/1000) \$1 1500376552001 AND TO\$1DATE('19700101','yyyymmdd') \$1 (1/24/60/60/1000) \$1 1500376552002` \$1\$1\$1\$1timeFrom()\$1 は  |  DATE データ型に変換された現在アクティブな時間選択の開始に置き換えられます。例えば、TO\$1DATE('19700101','yyyymmdd') \$1 (1/24/60/60/1000) \$1 1500376552001。 | 
|  \$1\$1\$1\$1timeTo ()\$1 \$1 現在アクティブな時間選択の末尾が「DATE」のデータ型に変換されます。`DATE` data type. \$1\$1\$1\$1timeGroup(dateColumn,"5m")\$1 は  |  GROUP BY 句で使用できる式に置き換えられます。 | 
|  \$1\$1\$1\$1timeGroup(dateColumn,"5m"[, fillvalue])\$1 は  |  GROUP BY 句で使用できる式に置き換えられます。fillValue に NULL または浮動値を指定すると、時間範囲内の空のシリーズにその値が自動的に入力されます。例えば、timeGroupcreatedAt, ′1m′, 0.\$1\$1\$1timeGroup(dateColumn,"5m", 0)\$1. | 
|  \$1timeGroup(dateColumn, ‘5m’, NULL) \$1 \$1SameasabovebutNULLwillbeusedasvalueformissingpoints.\$1\$1\$1timeGroup(dateColumn,"5m", previous)\$1  |  上記と同じですが、しのシリーズの前の値がフィル値として使用されます。まだ値が見つからない場合は NULL が使用されます。 | 
|  \$1\$1\$1\$1unixEpochFilter(dateColumn)\$1 \$1 指定された列名を使用して、Unix タイムスタンプとして表される時間 (ミリ秒単位) で時間範囲フィルターに置き換えられます。例えば、`dateColumn >= 1500376552001 AND dateColumn <= 1500376552002` \$1\$1\$1\$1unixEpochFrom()\$1 は  |  現在アクティブな時間選択の開始が Unix タイムスタンプに置き換えられます。例えば、1500376552001。 | 
|  \$1\$1\$1\$1unixEpochTo()\$1 は  |  現在アクティブな時間選択の最後が Unix タイムスタンプに置き換えられます。例えば、1500376552002。 | 

 プラグインは中括弧 `{}` を使用した表記もサポートしています。パラメータ内でクエリが必要な場合はこの表記を使用します。

**注記**  
クエリごとに 1 つの表記タイプを使用します。クエリに中括弧が必要な場合、クエリ内のすべてのマクロで中括弧を使用する必要があります。

```
$__timeGroup{"dateColumn",'5m'}
$__timeGroup{SYS_DATE_UTC("SDATE"),'5m'}
$__timeGroup{FROM_TZ(CAST("SDATE" as timestamp), 'UTC'), '1h'}
```

 クエリエディタには、パネル編集モードでクエリが実行された後に表示される **[生成 SQL]** リンクがあります。リンクを選択すると、リンクが展開されて実行済みの未加工の補間 SQL 文字列が表示されます。

### テーブルクエリ
<a name="table-queries"></a>

 **[Format as]** クエリオプションが **[テーブル]** に設定されている場合は、基本的に任意のタイプの SQL クエリを実行できます。テーブルパネルにはクエリが返す列と行の結果が自動的に表示されます。テーブルパネルの列名は、通常の `as` SQL 列選択構文を使用して制御できます。

### 時系列クエリ
<a name="time-series-queries"></a>

 例えば Graph パネルで使用するために **[Format as]** を **[時系列]** に設定した場合、クエリは SQL 日時または Unix エポック (秒単位) を表す任意の数値データ型を返す `time` という名前の列を返す必要があります。Grafana は明示的なタイムゾーンがない DATE 列と TIMESTAMP 列を UTC として解釈します。`time` および `metric` を除くすべての列は、値列として扱われます。値列のメトリクス名として使用される `metric` という名前の列を返すことができます。

 次のコード例は、`metric` 列を示しています。

```
SELECT
  $__timeGroup("time_date_time", '5m') AS time,
  MIN("value_double"),
  'MIN' as metric
FROM test_data
WHERE $__timeFilter("time_date_time")
GROUP BY $__timeGroup("time_date_time", '5m')
ORDER BY time
```

### その他のクエリ – oracle-fake-data-gen を使用します
<a name="more-queries---using-oracle-fake-data-gen"></a>

```
SELECT
  $__timeGroup("createdAt", '5m') AS time,
  MIN("value"),
  'MIN' as metric
FROM "grafana_metric"
WHERE $__timeFilter("createdAt")
GROUP BY $__timeGroup("createdAt", '5m')
ORDER BY time
```

 次のコード例は偽データの時系列を示しています。

```
SELECT
  "createdAt",
  "value"
FROM "grafana_metric"
WHERE $__timeFilter("createdAt")
ORDER BY "createdAt" ASC
```

```
SELECT
  "createdAt" as time,
  "value" as value
FROM "grafana_metric"
WHERE $__timeFilter("createdAt")
ORDER BY time ASC
```

 次の例は便利なテーブルの結果を示しています。

```
select tc.table_name Table_name
,tc.column_id Column_id
,lower(tc.column_name) Column_name
,lower(tc.data_type) Data_type
,nvl(tc.data_precision,tc.data_length) Length
,lower(tc.data_scale) Data_scale
,tc.nullable nullable
FROM all_tab_columns tc
,all_tables t
WHERE tc.table_name = t.table_name
```

### テンプレート作成
<a name="templating-3"></a>

 メトリクスクエリではサーバー、アプリケーション、センサー名などをハードコーディングする代わりに、変数を使用できます。変数は、ダッシュボードの上部にドロップダウン選択ボックスとして表示されます。これらのドロップダウンボックスを使用すると、ダッシュボード内に表示されるデータを簡単に変更できます。

#### クエリ変数
<a name="query-variable-1"></a>

 タイプ `Query` のテンプレート変数を追加すると、測定名、キー名、ドロップダウン選択ボックスとして表示されるキー値などを返すことができる Oracle クエリを記述できます。

 例えば、テンプレート変数の*クエリ*設定でこのようなクエリを指定した場合、テーブル内の `hostname` 列のすべての値を含む変数を指定できます。

```
SELECT "hostname" FROM host
```

 クエリは複数の列を返すことができ、Grafana はそれらの列からリストを自動的に作成します。例えば、次のクエリは、 `hostname` と `hostname2` の値を含むリストを返します。

```
SELECT "host.hostname", "other_host.hostname2" FROM host JOIN other_host ON host.city = other_host.city
```

 クエリで `$__timeFilter("time_column")` などの時間範囲依存マクロを使用するには、テンプレート変数の更新モードを *[時間範囲変更]* に設定する必要があります。

```
SELECT "event_name" FROM event_log WHERE $__timeFilter("time_column")
```

 もう 1 つのオプションは、キー/値変数を作成できるクエリです。クエリは、 `__text` と `__value` という名前の 2 つの列を返します。`__text` 列の値は一意である必要があります (一意でない場合は、最初の値が使用されます)。ドロップダウンリストのオプションには、わかりやすい名前をテキストとして、ID を値として指定できるテキストと値があります。次のコード例は、`hostname` をテキストとして、`id` を値として持つクエリを示しています。

```
SELECT "hostname" AS __text, "id" AS __value FROM host
```

 ネストされた変数も作成できます。例えば、`region` という名前の別の変数がある場合です。次に、ホスト変数に、このようなクエリを含む、現在選択されているリージョンからのホストのみを表示させることができます (`region` が複数値変数の場合は、`=` を使用して複数の値と照合するのではなく、`IN` 比較演算子を使用します)。

```
SELECT "hostname" FROM host WHERE region IN('$region')
```

#### クエリでの変数の使用
<a name="using-variables-in-queries-1"></a>

 テンプレート変数の値は、テンプレート変数が `multi-value` の場合にのみ引用符で囲まれます。

 変数が複数値の変数の場合は、`=` を使用して複数の値と照合するのではなく、`IN` 比較演算子を使用します。

 2 つの構文があります。

 `$<varname>` `hostname` という名前のテンプレート変数の例: 

```
SELECT
  "atimestamp" as time,
  "aint" as value
FROM table
WHERE $__timeFilter("atimestamp") AND "hostname" IN('$hostname')
ORDER BY "atimestamp" ASC
```

 `[[varname]]` `hostname` という名前のテンプレート変数の例: 

```
SELECT
  "atimestamp" as time,
  "aint" as value
FROM table
WHERE $__timeFilter("atimestamp") AND "hostname" IN('[[hostname]]')
ORDER BY atimestamp ASC
```