便利なOCI CLIコマンド例

このシリーズの他の記事は、[オラクル・クラウドの個人ブログ一覧 ](https://qiita.com/letian/items/10152a4fec813c1b7d98)からご覧いただけます。

# 初めに
OCI CLIは、オラクル・クラウド（OCI）のリソースをコマンドラインから操作するための強力なツールです。OCIコンソールで行えるほとんどの操作をCLIで実行できるため、開発者や自動化を好むユーザーにとって非常に便利です。特に、バッチスクリプトと組み合わせることで、繰り返し作業の効率化や複雑なタスクの自動化が可能になります。

この記事では、私が実際の作業でよく使うOCI CLIのコマンド例を厳選して紹介します。現場によく聞かれる質問を焦点に当てているため、すぐに実践で活用できます。詳細なオプションや設定方法については、[マニュアル](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.29.2/oci_cli_docs/)を参照してください。

本記事は、OCI-CLIの基本的な使い方から実践的な活用例まで、少しでも多くの方のお役に立てれば幸いです

※、2025年6月時点で、OCI CLIの最新バージョンは`3.59.0`です。

__サポートされているOS__
- Microsoft Windows
- Linux (Oracle Linux, CentOS, Ubuntu)
- Mac OS

__相当なサービス__
|クラウド・プロバイダー|OCI|AWS|Azure|GCP
|:--|:---|:--|:---|:--|
|サービス名|OCI CLI|AWS CLI|Azure CLI|Google Cloud CLI|

__索引__
- [1. CLIのインストールとセットアップ](#1-cliのインストールとセットアップ)
  - [CLIのインストール](#cliのインストール)
  - [構成ファイルの設定](#構成ファイルの設定)
  - [CLIのアップグレード](#cliのアップグレード)
  - [CLIのアンインストール](#cliのアンインストール)
  - [CLIのオフライン・インストール](#cliのオフラインインストール)
- [2. テナンシ情報の取得](#2-テナンシ情報の取得)
  - [オブジェクト・ストレージ・ネームスペースの取得](#オブジェクトストレージネームスペースの取得)
  - [テナンシ名の取得](#テナンシ名の取得)
  - [ドメイン情報の取得](#ドメイン情報の取得)
  - [リージョン一覧の取得](#リージョン一覧の取得)
- [3. オブジェクト・ストレージにアクセス](#3-オブジェクトストレージにアクセス)
  - [バケット情報の取得](#バケット情報の取得)
  - [指定したバケットにオブジェクト一覧の取得](#指定したバケットにオブジェクト一覧の取得)
  - [ファイルごとのアップロード・ダウンロード・削除](#ファイルごとのアップロードダウンロード削除)
  - [一括アップロード・ダウンロード・削除](#一括アップロードダウンロード削除)
  - [ディレクトリの同期](#ディレクトリの同期)
  - [バケット単位の近似サイズ(使用量)の確認](#バケット単位の近似サイズ使用量の確認)
- [4. インスタンスの起動・停止](#4-インスタンスの起動停止)
  - [OCIインスタンスのライフサイクル状態を取得](#ociインスタンスのライフサイクル状態を取得)
  - [Computeインスタンスの起動・停止・終了](#computeインスタンスの起動停止終了)
  - [Oracle Base DBの起動・停止](#oracle-base-dbの起動停止)
  - [Autonomous DBの起動・停止](#autonomous-dbの起動停止)
  - [MySQL DB Serviceの起動・停止](#mysql-db-serviceの起動停止)
  - [OACインスタンスの一時停止・再開](#oacインスタンスの一時停止再開)
  - [データ統合ワークスペースの起動・停止](#データ統合ワークスペースの起動停止)
- [5. 拡張リソース問合わせ機能の活用](#5-拡張リソース問合わせ機能の活用)
  - [コンパートメント内のすべてのリソースを検出](#コンパートメント内のすべてのリソースを検出)
  - [DRG使用量の確認](#drg使用量の確認)
- [6. サービス制限値の確認](#6-サービス制限値の確認)
  - [サポート対象のサービス名を確認](#サポート対象のサービス名を確認)
  - [VCNの使用可能値を確認](#vcnの使用可能値を確認)
  - [OCPUの使用可能値を確認](#ocpuの使用可能値を確認)
- [7. IPアドレス関連](#7-ipアドレス関連)
  - [IPアドレスの情報取得](#ipアドレスの情報取得)
  - [予約済パブリックIPの割り当てと解除](#予約済パブリックipの割り当てと解除)
- [8. Base DB の接続文字列の取得](#8-base-db-の接続文字列の取得)
  - [CDBの接続文字列](#cdbの接続文字列)
  - [PDBの接続文字列](#pdbの接続文字列) 
- [付録](#付録)
  - [1. OCI-CLIに関するFAQ](#1-oci-cliに関するfaq)
  - [2. query引数の書き方](#2-query引数の書き方)
  - [3. 優先順位](#3-優先順位)
  - [4. 警告メッセージの回避](#4-警告メッセージの回避)

# 1. CLIのインストールとセットアップ
OCI CLIのインストールと構成ファイルの作成については、[クイックスタート](https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/cliinstall.htm)をご参照ください。

以下は抜粋した内容です。<strong>Cloud Shell</strong>を使用する場合は、既にインストールと設定が完了しているため、そのままご利用いただけます。

## CLIのインストール
- Oracle Linux 9の場合：
```bash
sudo dnf -y install oraclelinux-developer-release-el9
sudo dnf install python39-oci-cli
```

- Oracle Linux 8の場合：
```bash
sudo dnf -y install oraclelinux-developer-release-el8
sudo dnf install python36-oci-cli
```
- Oracle Linux 7の場合：
```bash
sudo yum install python36-oci-cli
```

- Windowsの場合（管理者として実行）:
```powershell
Set-ExecutionPolicy RemoteSigned
Invoke-WebRequest https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1 -OutFile install.ps1
iex ((New-Object System.Net.WebClient).DownloadString('https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.ps1'))
```
※、Windows 2012およびWindows 2016の場合は、PowerShellでTLS 1.2が使用されるよう強制します。
```powershell
[Net.ServicePointManager]::SecurityProtocol = [Net.SecurityProtocolType]::Tls12
```

- Macの場合：
```bash
brew update && brew install oci-cli
```

__OCI CLI バージョンの確認__
```bash
$ oci -v
3.33.1
```

## 構成ファイルの設定
コマンド：`oci setup config`

構成ファイルの場所（デフォルト）：
Oracle Linux: `/home/opc/.oci/config`
Windows: `C:\Users\<username>\.oci\config`

構成ファイルの中身：
```bash
[DEFAULT]
user=ocid1.user.oc1..<unique_ID>
fingerprint=<your_fingerprint>
key_file=/home/opc/.oci/oci_api_key.pem
tenancy=ocid1.tenancy.oc1..<unique_ID>
region=ap-tokyo-1
```

__PEMファイルの権限を変更する__
Oracle Linuxの場合：
```bash
oci setup repair-file-permissions --file /home/opc/.oci/oci_api_key.pem
```
Windowsの場合：
```bash
oci setup repair-file-permissions --file C:\Users\<username>\.oci\<PEM_File_Name>.pem
```

## CLIのアップグレード
最新バージョンを使用することをお勧めします。

<strong>インストールスクリプト</strong>を使用してCLIをインストールした場合は、次の手順でCLIをアップグレードします。
- インストール・スクリプトを実行し、同じインストール・ディレクトリを指定します。
- 表示されたプロンプトに対して、既存のディレクトリを削除するかどうかを尋ねられたら、"Y"と回答します。

```bash
bash -c "$(curl -L https://raw.githubusercontent.com/oracle/oci-cli/master/scripts/install/install.sh)"
```

CLIを<strong>手動</strong>でインストールした場合は、次のコマンドを実行します。
```bash
pip install oci-cli --upgrade
```

pipの格納場所：
__Windows__: `C:\Users\<username>\lib\oracle-cli\Scripts\`
__Linux__: `/home/opc/lib/oracle-cli/bin/pip`

Homebrewを使用して<strong>Mac OS X</strong>でCLIインストールをアップグレードするには:
```bash
brew update && brew upgrade oci-cli
```
## CLIのアンインストール
- Oracle Linuxの場合：
  - OL9: `sudo dnf remove python39-oci-cli`
  - OL8: `sudo dnf remove python36-oci-cli`
  - OL7: `sudo yum remove python36-oci-cli`
- Windowsの場合：
  - pipを使用してCLIを手動でインストールした場合: `pip uninstall oci-cli`
  - インストール・スクリプトとデフォルトのインストール場所を使用した場合、次のものを削除する必要がある。
`%USERPROFILE%/lib/oracle-cli` (ディレクトリ)
`%USERPROFILE%/bin/oci-cli-scripts` (ディレクトリ)
`%USERPROFILE%/bin/oci.exe`

## CLIのオフライン・インストール
インターネットにアクセスできない環境に OCI-CLI をインストールすることも可能です。OCI-CLIをインストールする前に、<font color=blue>Python</font>をインストールする必要があります。

詳細について、[OCI-CLIオフライン・インストールの手順](https://qiita.com/letian/items/d99506bc3c9869e26d29)をご参照ください。

:::note warn
オフライン・インストールが可能ですが、オフライン・アップグレードができません。
:::

# 2. テナンシ情報の取得
## オブジェクト・ストレージ・ネームスペースの取得
私がよく使うコマンドです。OCIDは不要で、非常に使いやすいです。構成ファイルを設定した後、疎通確認として使用するのが便利です。
```bat
$ oci os ns get
{
  "data": "<Your_Object_Storage_Namespace>"
}
```
## テナンシ名の取得
コマンド：`oci iam tenancy get --tenancy-id <Tenancy_OCID>`
```bat
$ oci iam tenancy get --tenancy-id ocid1.tenancy.oc1..<unique_ID>
{
  "data": {
    "defined-tags": {},
    "description": "<Your_Tenancy_Name>",
    "freeform-tags": {},
    "home-region-key": "NRT",
    "id": "ocid1.tenancy.oc1..<unique_ID>",
    "name": "<Your_Tenancy_Name>",
    "upi-idcs-compatibility-layer-endpoint": null
  }
}
```

※、テナントIDでテナント名の取得ができますが、テナント名でテナントIDの取得ができません。

## ドメイン情報の取得
コマンド：`oci iam availability-domain list` 
パラメータを指定しなくてもよい。

```bat
$ oci iam availability-domain list
{
  "data": [
    {
      "compartment-id": "ocid1.tenancy.oc1..<unique_ID>",
      "id": "ocid1.availabilitydomain.oc1..<unique_ID>",
      "name": "xxxx:AP-TOKYO-1-AD-1"
    }
  ]
}
```

## リージョン一覧の取得
__OCIのすべてのリージョンを取得__
コマンド：`oci iam region list`　（パラメータ`--all`を指定しなくてもよい）

```bat
$ oci iam region list
{
  "data": [
<中略>
    {
      "key": "NRT",
      "name": "ap-tokyo-1"
    },
<中略>
    {
      "key": "KIX",
      "name": "ap-osaka-1"
    },
<中略>
  ]
}
```
※、このコマンドを使用することで、すべての<font color=blue>リージョン・キー</font>（key）と<font color=blue>リージョン識別子</font>（name）を素早く確認できます。リージョン・キーと識別子の詳細について、[ドキュメント](https://docs.oracle.com/ja-jp/iaas/Content/General/Concepts/regions.htm)を参照してください。

__サブスクリプション済のリージョン一覧を取得__
コマンド：`oci iam region-subscription list`

```bat
$ oci iam region-subscription list
{
  "data": [
    {
      "is-home-region": false,
      "region-key": "KIX",
      "region-name": "ap-osaka-1",
      "status": "READY"
    },
    {
      "is-home-region": true,
      "region-key": "NRT",
      "region-name": "ap-tokyo-1",
      "status": "READY"
    }
  ]
}
```
※、`is-home-region`をチェックすることで、ホーム・リージョンを取得できます。

# 3. オブジェクト・ストレージにアクセス
## バケット情報の取得
- __一覧の取得__ oci os <font color=blue>bucket list</font> -c \<Compartment_OCID>
- __使用量の近似サイズの取得__ oci os bucket get -bn \<Bucket_name> <font color=blue>--fields approximateSize</font>

## 指定したバケットにオブジェクト一覧の取得
コマンド：oci os <font color=blue>object list</font> -bn \<Bucket_Name>
例：`oci os object list -bn MyBucket | grep name`

## ファイルごとのアップロード・ダウンロード・削除
- __アップロード__
oci os object <font color=blue>put</font> -bn \<bucket_name> --file \<local_file_name>
- __ダウンロード__
oci os object <font color=blue>get</font> -bn \<bucket_name> --file \<local_file_name> --name \<object_name>
- __削除__
`oci os object <font color=blue>delete</font> -bn \<bucket_name> --name \<object_name>

:::note alert
`os object put|get|delete`を利用する時、<strong>１個のファイル</strong>しか指定できません。`put --file file1 file2`あるいは`put --file file*`のような書き方が正しくないです。
:::

## 一括アップロード・ダウンロード・削除
- __アップロード__ (サブディレクトリを含む)
oci os object <font color=blue>bulk-upload</font> -bn \<bucket_name> <font color=blue>--src-dir</font> \<source_dir_name>
- __ダウンロード__ (サブディレクトリを含む)
oci os object <font color=blue>bulk-download</font> -bn \<bucket_name> <font color=blue>--dest-dir</font> \<dest_dir_name>
※、ローカルに、このディレクトリが存在しない場合は自動に作成されます。
- __一括削除__
oci os object <font color=blue>bulk-delete</font> -bn \<bucket_name>
オプション引数：`--force` 一括削除実行前に確認を求めない。

※、アップロード/ダウンロードの共通オプション引数：`--overwrite`
（同名のオブジェクトが存在する場合、上書きする）

## ディレクトリの同期
コマンド：oci os object <font color=blue>sync</font> -bn \<bucket_name> <font color=blue>--src-dir</font> \<source_dir_name>

※、ローカルのディレクトリをバケット内のオブジェクトと同期します。<strong>サブディレクトリ</strong>をトラバースして、<strong>新規および変更</strong>されたファイルまたはオブジェクトをソースから宛先にコピーし、必要に応じてソースに存在しないファイルやオブジェクトを<strong>削除</strong>します。

## バケット単位の近似サイズ(使用量)の確認
コマンド：`oci os bucket get -bn <Bucket_Name> --fields approximateSize`

# 4. インスタンスの起動・停止
:::note
時はお金なり。土日祝など、長時間にわたりインスタンスを使用しない場合は、コストを節約するために停止することをお勧めします。
:::

以下のツールと組み合わせて使えば、定時起動・停止用のスクリプトが作成できます。
- Linux OSの場合：crontabを利用
実施例： 毎日18時（OSのタイムゾーン）、自動停止用スクリプトを呼び出す。
```bash
[opc@linux8 ~]$ crontab -l
00 18 * * * /home/opc/shell/compute_auto_stop.sh
```
- Windows OSの場合：タスクスケジューラを利用

## OCIインスタンスのライフサイクル状態を取得
OCIインスタンスを自動開始または停止する前に、ライフサイクル状態を確認することをお薦めします。詳しくは以下の記事をご覧ください。
[OCI-CLIを使用してOCIインスタンスのライフサイクル状態を取得する方法](https://qiita.com/letian/items/ff78090395567c7906c2)

## Computeインスタンスの起動・停止・終了
- インスタンス<strong>一覧</strong>の取得: oci compute instance <font color=blue>list</font> -c \<Compartment_OCID>
- インスタンスの<strong>起動</strong>：oci compute instance action <font color=blue>--action "START</font>" --instance-id \<Instance_OCID>
- インスタンスの<strong>停止</strong>：oci compute instance action <font color=blue>--action "SOFTSTOP</font>" --instance-id \<Instance_OCID>
- インスタンスの<strong>再起動</strong>：oci compute instance action <font color=blue>--action "SOFTRESET</font>" --instance-id \<Instance_OCID>
- インスタンスの<strong>終了</strong>：oci compute instance <font color=blue>terminate</font> --instance-id \<Instance_OCID>

:::note
`--action`引数は、"SOFT"なしで"STOP"と"RESET"を指定できますが、個人的に"SOFTSTOP"と"SOFTRESET"の使用をお勧めします。
:::

## Oracle Base DBの起動・停止
DBノードの情報取得：oci <font color=blue>db node list</font> -c \<Compartment_OCID> <font color=blue>--db-system-id</font> \<DB_System_OCID>
※、パラメータの`--db-system-id`は必要です。

- DBノードの<strong>起動</strong>：oci <font color=blue>db node start</font> --db-node-id \<DB_Node_OCID>
- DBノードの<strong>停止</strong>：oci <font color=blue>db node stop</font> --db-node-id \<DB_Node_OCID>
- DBノードの<strong>再起動</strong>：oci <font color=blue>db node soft-reset</font> --db-node-id \<DB_Node_OCID>

:::note warn
起動・停止対象は、DB systemではなく、<strong>DBノード</strong>です。
:::

## Autonomous DBの起動・停止
ADB一覧の取得：oci db autonomous-database <font color=blue>list</font> -c \<Compartment_OCID>

- ADBの<strong>起動</strong>：oci db autonomous-database <font color=blue>start</font> --autonomous-database-id \<ADB_OCID>
- ADBの<strong>停止</strong>：oci db autonomous-database <font color=blue>stop</font> --autonomous-database-id \<ADB_OCID>
- ADBの<strong>再起動</strong>：oci db autonomous-database <font color=blue>restart</font> --autonomous-database-id \<ADB_OCID>

## MySQL DB Serviceの起動・停止
- DB Systemの<strong>起動</strong>：oci mysql <font color=blue>db-system start</font> --db-system-id \<DB_System_OCID>
- DB Systemの<strong>停止</strong>：oci mysql <font color=blue>db-system stop</font> --shutdown-type <strong>FAST|IMMEDIATE|SLOW</strong> --db-system-id \<DB_System_OCID>

## OACインスタンスの一時停止・再開
- OACの<strong>一時停止</strong>：oci analytics analytics-instance <font color=blue>stop</font> --analytics-instance-id \<Analytics_Instance_OCID>
- OACの<strong>再開</strong>：oci analytics analytics-instance <font color=blue>start</font> --analytics-instance-id \<Analytics_Instance_OCID>

:::note warn
OAC一時停止中、課金が完全に止まるのではなく、<strong>通常の15%の課金</strong>が引き続き発生します。再開すると、通常の課金に戻ります。完全に課金を止めたい場合、OACインスタンスの削除が必要です。
:::

## データ統合ワークスペースの起動・停止
- ワークスペースの<strong>起動</strong>：oci data-integration <font color=blue>workspace start</font> --workspace-id \<Workspace_OCID>  
- ワークスペースの<strong>停止</strong>：oci data-integration <font color=blue>workspace stop</font> --workspace-id \<Workspace_OCID>  

# 5. 拡張リソース問合わせ機能の活用
詳細は、この記事（[OCIのサービス制限値をCLIで確認する方法](https://qiita.com/letian/items/75be7a7090f32d2150ec)）をご参照ください。次は抜粋したコマンド例です。

## コンパートメント内のすべてのリソースを検出
コマンド例：oci search resource structured-search --query-text "query all resources where compartmentId = 'compartmentOcid'" | grep "resource-type"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/957c8b79-a440-36d4-9de3-3a8c8efe650a.png)

## DRG使用量の確認
コマンド例：
oci search resource structured-search --query-text "query drg resources" | grep "display-name"
![image.png](https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/1121622/bc5fcb08-82ce-d9eb-5825-b5ebbd77e51b.png)

# 6. サービス制限値の確認
詳細は、この記事（[OCIのサービス制限値をCLIで確認する方法](https://qiita.com/liu-wei/items/75be7a7090f32d2150ec)）をご参照ください。次はコマンド例の抜粋です。

## サポート対象のサービス名を確認
コマンド：`oci limits service list -c <Tenancy_OCID>`

次のようにアルファベットの昇順で全サービスがリストされます。次のステップでサービス制限値を取る時、サービス名の略称(name項目)を指定する必要があります。
```bat
$ oci limits service list -c <Tenancy_OCID>
{
  "data": [
    {
      "description": "Application Dependency Management",
      "name": "adm"
    },
<中略>
    {
      "description": "Virtual Cloud Network",
      "name": "vcn"
    },
<中略>
    {
      "description": "Web Application Firewall",
      "name": "waf"
    }
  ]
}
```
ご覧の通り、`Virtual Cloud Network`に対するサービス名は、<font color=blue>vcn</font>です。

## VCNの使用可能値を確認
コマンド例：oci limits resource-availability get -c \<Tenancy_OCID> --service-name <font color=blue>vcn</font> --limit-name <font color=blue>vcn-count</font>

```bat
$ oci limits resource-availability get -c <Tenancy_OCID> --service-name vcn --limit-name vcn-count
{
  "data": {
    "available": 46,
    "effective-quota-value": null,
    "fractional-availability": 46.0,
    "fractional-usage": 4.0,
    "used": 4
  }
}
```
<strong>used</strong>: 4 (使用量)、 <strong>available</strong>: 46 (使用可能値)
両者の合計は、サービス制限値の`50`となります。

## OCPUの使用可能値を確認
コマンド例：
oci limits resource-availability get -c \<Tenancy_OCID> --service-name <font color=blue>compute</font> --limit-name <font color=blue>standard-e4-core-count</font> --availability-domain <font color=blue>xxxx:AP-TOKYO-1-AD-1</font>

ADの冒頭の<font color=blue>xxxx</font>は、ADに自動に付与された4桁の英字で、`oci iam availability-domain list`で取得できます。

```bat
$ oci limits resource-availability get -c <Tenancy_OCID> --service-name compute --limit-name standard-e4-core-count --availability-domain xxxx:AP-TOKYO-1-AD-1
{
  "data": {
    "available": 100,
    "effective-quota-value": null,
    "fractional-availability": 100.0,
    "fractional-usage": 0.0,
    "used": 0
  }
}
```
<strong>used</strong>: 0 (使用量)、<strong>available</strong>: 100 (使用可能値)

# 7. IPアドレス関連
## IPアドレスの情報取得
|分類|OCIコンソールでOCIDを取得|OCI-CLIでOCIDを取得|
|:--|:--:|:--:|
|エフェメラル・パブリックIP|×|〇|
|予約済パブリックIP|〇|〇|
|プライベートIP|×|〇|

:::note
エフェメラル・パブリックIP、プライベートIPのOCIDが直接にOCIコンソールより確認できないが、OCI-CLIで簡単に取得できます。
:::

__指定したプライベートIPのOCIDを取得__
コマンド例：
`oci network private-ip list --ip-address <Private_IP> --subnet-id <Subnet_OCID>`

```bat
$ oci network private-ip list --ip-address 10.0.0.03  --subnet-id ocid1.subnet.oc1.ap-tokyo-1.<中略> | grep '"id":' | cut -f4 -d'"'
ocid1.privateip.oc1.ap-tokyo-1.<中略>
```

__指定したCompartmentの下にすべてのパブリックIPを取得__
コマンド例：
`oci network public-ip list -c <Compartment_OCID> --scope REGION --all`

上記コマンドの出力には、エフェメラル・パブリックIPと予約済エフェメラルIPの両方を含めます。片方のみを取得したい場合、`--lifetime`をつけてください。

<strong>エフェメラル</strong>・パブリックIPの場合：`--lifetime EPHEMERAL`
<strong>予約済</strong>パブリックIPの場合：`--lifetime RESERVED`

## 予約済パブリックIPの割り当てと解除
__自動に割り当てられたエフェメラル・パブリックIPを解除__
oci network public-ip <font color=blue>delete</font> --public-ip-id \<<strong>Ephemeral</strong>_Public_IP_OCID> 

__予約済パブリックIPの割り当て__
oci network public-ip <font color=blue>update</font> --public-ip-id \<<strong>Reserved</strong>_Public_IP_OCID> --private-ip-id \<Private_IP_OCID>

__割り当てた予約済パブリックIPの解除__
oci network public-ip <font color=blue>update</font> --public-ip-id \<<strong>Reserved</strong>_Public_IP_OCID> --private-ip-id <font color=blue>""</font>
※、プライベートIPを<strong>空白の文字列</strong>にすると、割り当てた予約済パブリックIPが解除されます。

# 8. Base DB の接続文字列の取得
:::note
- DBが停止中でも、OCI-CLIを使用して接続文字列を取得できます。
- 以下はCloud Shellから実行した例です。Windowsの場合、ダブルクォーテーションを付ける際に  `\`(バックスラッシュ) を追加する必要があります。
:::

## CDBの接続文字列
※、事前にデータベースのOCIDを用意してください。

__接続文字列（簡易接続）を取得する__
コマンド例：`oci db database get --database-id <Database_OCID> --query 'data."connection-strings"."all-connection-strings".cdbDefault'`
```bat
<username>@cloudshell:~ (ap-tokyo-1)$ oci db database get --database-id ocid1.database.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."all-connection-strings".cdbDefault'
"db19c.publicsubnet1.vcn1.oraclevcn.com:1521/db19c_xxx_nrt.publicsubnet1.vcn1.oraclevcn.com"
```
※、ポート番号1521の後ろの部分がサービス名になります。

__接続文字列（長）を取得する__
コマンド例：`oci db database get --database-id <Database_OCID> --query 'data."connection-strings"."all-connection-strings".cdbIpDefault'`

```bat
<username>@cloudshell:~ (ap-tokyo-1)$ oci db database get --database-id ocid1.database.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."all-connection-strings".cdbIpDefault'
"(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.xx.xx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=db19c_xxx_nrt.publicsubnet1.vcn1.oraclevcn.com)))"
```

※、"SERVICE_NAME"で明確に示されています。

## PDBの接続文字列
※、事前に<strong>PDBのOCID</strong>を用意してください。

__接続文字列（簡易接続）を取得する__
コマンド例：`oci db pluggable-database get --pluggable-database-id <Pluggable_Database_OCID> --query 'data."connection-strings"."pdb-default"'`

```bat
<username>@cloudshell:~ (ap-tokyo-1)$ oci db pluggable-database get --pluggable-database-id ocid1.pluggabledatabase.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."pdb-default"'
"db19c.publicsubnet1.vcn1.oraclevcn.com:1521/db19c_pdb1.publicsubnet1.vcn1.oraclevcn.com"
```

__接続文字列（長）を取得する__
コマンド例：`oci db pluggable-database get --pluggable-database-id <Pluggable_Database_OCID> --query 'data."connection-strings"."pdb-ip-default"'`

```bat
<username>@cloudshell:~ (ap-tokyo-1)$ oci db pluggable-database get --pluggable-database-id ocid1.pluggabledatabase.oc1.ap-tokyo-1.<中略> --query 'data."connection-strings"."pdb-ip-default"'
"(DESCRIPTION=(CONNECT_TIMEOUT=5)(TRANSPORT_CONNECT_TIMEOUT=3)(RETRY_COUNT=3)(ADDRESS_LIST=(LOAD_BALANCE=on)(ADDRESS=(PROTOCOL=TCP)(HOST=10.0.xx.xx)(PORT=1521)))(CONNECT_DATA=(SERVICE_NAME=db19c_pdb1.publicsubnet1.vcn1.oraclevcn.com)))"
```

# 付録
## 1. OCI-CLIに関するFAQ
以下のようなよくある質問に対する回答をまとめました。詳細については、「[OCI-CLIに関するFAQ](https://qiita.com/letian/items/890e3f285c0dff93509f)」をご参照ください。

- OCI-CLIを利用するのにPythonは必須ですか？
- Oracle Base DBのインスタンスにもOCI-CLIを利用することができますか？
- 特定のユーザーにOCI-CLIを使用させたくない場合、それは可能ですか？

## 2. query引数の書き方
OCI-CLIの出力結果はJSON形式のため、結果の件数が多いと見づらいことがあります。引数に`--output table`を付けると、表形式で結果が表示されます。項目が多い場合は、`--query`を使用して表示内容を絞り込むことも可能です。これらの引数はグローバル引数で、すべてのCLIコマンドに適用できます。

:::note
query引数の書き方は、実行環境の種類により違いがあります。
:::

Computeインスタンスのライフサイクル状態を取得する例：

|実行環境|書き方|
|:--|:--|
|Linux (or Cloud Shell)|`--query 'data."lifecycle-state"'`|
|Windows BAT|`--query "data.\"lifecycle-state\""`|
|Windows PowerShell| `--query 'data.\"lifecycle-state\"'`|

- "display-name" や "lifecycle-state" のようにハイフンが含まれる項目には、<strong>ダブルクォーテーション</strong>を付ける必要があります。Windowsの場合、ダブルクォーテーションを付ける際に '`\`'(バックスラッシュ) を忘れずに。
- 階層項目にダブルクォーテーションを付ける場合、各階層レベルごとにダブルクォーテーションを付ける必要があります。
正：`"defined-tags"."Oracle-Tags".CreatedBy`
誤：`"defined-tags.Oracle-Tags".CreatedBy`

## 3. 優先順位
CLIは、次の優先順位に従って、オプション、環境変数またはOCI構成ファイル・エントリで指定された構成を適用します:
1. コマンド・オプションで指定された値。
例: コマンドに`--region ap-tokyo-1`を指定
2. 環境変数に指定された値。
例: 環境変数`OCI_CLI_REGION`を事前に設定
3. OCI構成ファイルで指定された値。
例: `~/.oci/config`から`region`変数を読み込む

## 4. 警告メッセージの回避
__エラー現象__: OCI-CLIコマンドを実施する際、次の警告メッセージが出る。
```bat
WARNING: Permissions on <PEM_File>.pem are too open.
```

__原因__: PEM鍵ファイルの権限は、読込専用になっていない。

__対策__
- 方法１：次のOCI-CLI コマンドを実行する
```bat
oci setup repair-file-permissions --file C:\Users\<username>\.oci\<PEM_File_Name>.pem
```
- 方法２：環境変数を設定する

Windowsバッチを利用する場合：
```bat
SET OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING=True
```
PowerShellを利用する場合：
```powershell
$Env:OCI_CLI_SUPPRESS_FILE_PERMISSIONS_WARNING="True"
```

以上です。

----
__関連記事__
[OCIインスタンスの自動起動・停止](https://qiita.com/letian/items/2f059ec0ce4139632a11)
[OCI-CLIオフライン・インストールの手順](https://qiita.com/letian/items/d99506bc3c9869e26d29)

__ドキュメント__
コマンドライン・インタフェース(CLI) [英語](https://docs.oracle.com/en-us/iaas/Content/API/Concepts/cliconcepts.htm) [日本語](https://docs.oracle.com/ja-jp/iaas/Content/API/Concepts/cliconcepts.htm)
CLI環境変数 [英語](https://docs.oracle.com/en-us/iaas/Content/API/SDKDocs/clienvironmentvariables.htm) [日本語](https://docs.oracle.com/ja-jp/iaas/Content/API/SDKDocs/clienvironmentvariables.htm)
OCI CLI Command Reference: [英語](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.32.0/oci_cli_docs/)
Docs » setup » repair-file-permissions: [英語](https://docs.oracle.com/en-us/iaas/tools/oci-cli/3.59.0/oci_cli_docs/cmdref/setup/repair-file-permissions.html)