

本文為英文版的機器翻譯版本，如內容有任何歧義或不一致之處，概以英文版為準。

# 連線至 Oracle 資料庫資料來源
<a name="oracle-datasource-AMG"></a>

**注意**  
此資料來源僅適用於 Grafana Enterprise。如需詳細資訊，請參閱[管理對企業外掛程式的存取](upgrade-to-enterprise-plugins.md)。  
此外，在支援第 9 版或更新版本的工作區中，此資料來源可能會要求您安裝適當的外掛程式。如需詳細資訊，請參閱[使用外掛程式擴展您的工作區](grafana-plugins.md)。

## 新增資料來源
<a name="datasource-configuration"></a>

 選取 Grafana 左側面板上的**資料來源**。

 選取新增資料來源：

 輸入 **oracle** 以尋找資料來源。

 輸入 Oracle 伺服器詳細資訊。

 輸入主機名稱 （或 IP 地址） 以及連接埠號碼，以及要連線的使用者名稱和密碼。

 使用 tnsnames 選項切換，可在 tnsnames.ora 組態檔案中找到的任何有效項目，以及基本身分驗證。

 與先前的範例類似，但使用 Kerberos 進行身分驗證。如需如何設定作業系統或 Docker 容器以使用 kerberos 的詳細資訊，請參閱 kerberos 特定設定指南。

 選擇性地變更用於連線至 Oracle 伺服器和供時區感知巨集使用的時區。預設設定為 UTC。

 儲存並測試資料來源，您應該會看到綠色訊息，其中包含「資料庫連線正常」 

## Usage
<a name="usage-4"></a>

### 巨集
<a name="macros-1"></a>

 為了簡化語法並允許動態部分，例如日期範圍篩選條件，查詢可以包含巨集。資料欄名稱必須包含在雙引號 () 中`"`。


|  巨集範例  |  Description  | 
| --- | --- | 
|  \*$\_\_time(dateColumn)\* \| 將由表達式取代，將資料欄重新命名為 `time`。例如，`dateColumn as time` \*$\_\_timeEpoch(dateColumn)\*  |  將由表達式取代，將資料欄重新命名為 ，time並將值轉換為 unix 時間戳記 （以毫秒為單位）。 | 
|  \*$\_\_timeFilter(dateColumn)\* \| 將由使用指定資料欄名稱的時間範圍篩選條件取代。例如，`dateColumn BETWEEN TO\_DATE('19700101'，'yyyymmdd') \+ (1/24/60/60/1000) \* 1500376552001 AND TO\_DATE('19700101'，'yyyymmdd') \+ (1/24/60/60/1000) \* 1500376552002` \*$\_\_timeFrom()\*  |  將取代為目前作用中時間選擇的開頭，轉換為DATE資料類型。例如 TO\_DATE('19700101','yyyymmdd') \+ (1/24/60/60/1000) \* 1500376552001。 | 
|  \*$\_\_timeTo()\* \| 將由轉換為 `DATE` 資料類型的目前作用中時間選取結束時取代。\*$\_\_timeGroup(dateColumn，"5m")\*  |  將由 GROUP BY 子句中可用的表達式取代。 | 
|  \*$\_\_timeGroup(dateColumn，"5m"【， fillvalue】)\*  |  將由 GROUP BY 子句中可用的表達式取代。提供 NULL 或浮點數的 fillValue 會自動以該值填入時間範圍中的空序列。例如，timeGroupcreatedAt、 ′1m′、 0.\*\_\_timeGroup(dateColumn、"5m"、0)\*。 | 
|  \*timeGroup(dateColumn、 '5m'、 NULL) \* \|SameasabovebutNULwillbeusedasvalueformisinpoints.\*\_\_timeGroup(dateColumn，"5m"， previous)\*  |  與上述相同，但如果尚未看到 NULL 值，則會使用該序列中的上一個值作為填充值。 | 
|  \*$\_\_unixEpochFilter(dateColumn)\* \| 將使用指定的資料欄名稱取代為時間範圍篩選條件，時間表示為 unix 時間戳記 （以毫秒為單位）。例如，`dateColumn >= 1500376552001 AND dateColumn <= 1500376552002` \*$\_\_unixEpochFrom()\*  |  將由目前作用中時間選擇的開頭取代為 unix 時間戳記。例如 1500376552001。 | 
|  \*$\_\_unixEpochTo()\*  |  將被目前作用中時間選擇的結尾取代為 unix 時間戳記。例如 1500376552002。 | 

 外掛程式也支援使用括號 進行標記`{}`。當參數內需要查詢時，請使用此表示法。

**注意**  
每個查詢使用一種表示法類型。如果查詢需要括號，則查詢中的所有巨集都必須使用括號。

```
$__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>

 如果**格式化為**查詢選項設定為**資料表**，則基本上您可以執行任何類型的 SQL 查詢。資料表面板會自動顯示查詢傳回的任何資料欄和資料列的結果。您可以使用一般 `as` SQL 資料欄選取語法來控制資料表面板資料欄的名稱。

### 時間序列查詢
<a name="time-series-queries"></a>

 如果您**將格式**設定為**時間序列**，例如在圖形面板中使用，查詢必須傳回名為 的資料欄`time`，以秒為單位傳回 SQL 日期時間或任何代表 unix epoch 的數值資料類型。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")
```

 另一個選項是可建立索引鍵/值變數的查詢。查詢應傳回兩個名為 `__text`和 的資料欄`__value`。`__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`比較運算子`=`，而不是比對多個值。

 有兩種語法：

 `$<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
```