はじめに
OCI の勉強がしたい、が、課金は嫌だ、ということで、
OCI Cloud Free Tier(Always Free クラウドサービス)の範囲で触れる箇所を触ってみる。
OCI Cloud Free Tierの詳細は下記。
最初の30日間の無料枠に加え、その後もAlways Free クラウドサービス として
- Compute VM * 2
- Automonous DB * 2
等が無料で利用可能。勉強用途で大変ありがたい。
OCIのアカウントを作成すると、最初は自動でFree Tierアカウントとなり、無料で使える箇所しか使えない安心設定になっている。
すでに最初の30日は過ぎてしまったため、Free Tierアカウントの範囲内でAlways Freeで使える箇所を試す。
VCN
「VCNウィザードの起動」から作成。
VCN名:my-vcn、コンパートメントはあらかじめ作成したmy-compartmentとして後はデフォルトで作成。
デフォルトでは
- VCNのサブネット:10.0.0.0/16
- パブリックサブネット:10.0.0.0/24
- プライベートサブネット10.0.1.0/24
が設定される。
VCNウィザードの記載によれば、本来はインターネット・ゲートウェイ、NATゲートウェイ、サービスゲートウェイもセットで作成されるはずなのだが、always freeではインターネットゲートウェイしか作成されないようだ。後からサービスゲートウェイを個別に作成してみようともしてみたが、制限に引っかかってできなかった。
デフォルトのセキュリティリストはインターネットからのsshを受け入れる設定。後で自宅のIPからのみ許可、等に絞っておきたい。
Compute VM
my-instanceという名前でコンピュートインスタンスを作成する。
- コンパートメント名:my-compartment
- VCN:my-vcn
- サブネット:パブリック・サブネットmy-vcn
で作成。(右下にブートボリュームの月額料金が書いてあるのが気になるが・・・これだけ別料金なのか?)
1分もかからず作成が完了。
インスタンス作成時にDLした秘密鍵でログインできた。
PS > ssh -i .\ssh-key-2023-10-09.key opc@XXX.XXX.XXX.XXX
Activate the web console with: systemctl enable --now cockpit.socket
Last login: Mon Oct 9 03:36:07 2023 from XXX.XXX.XXX.XXX
[opc@my-instance ~]$
[opc@my-instance ~]$ cat /etc/*release*
Oracle Linux Server release 8.8
NAME="Oracle Linux Server"
VERSION="8.8"
ID="ol"
ID_LIKE="fedora"
VARIANT="Server"
VARIANT_ID="server"
VERSION_ID="8.8"
PLATFORM_ID="platform:el8"
PRETTY_NAME="Oracle Linux Server 8.8"
ANSI_COLOR="0;31"
CPE_NAME="cpe:/o:oracle:linux:8:8:server"
HOME_URL="https://linux.oracle.com/"
BUG_REPORT_URL="https://github.com/oracle/oracle-linux"
ORACLE_BUGZILLA_PRODUCT="Oracle Linux 8"
ORACLE_BUGZILLA_PRODUCT_VERSION=8.8
ORACLE_SUPPORT_PRODUCT="Oracle Linux"
ORACLE_SUPPORT_PRODUCT_VERSION=8.8
Red Hat Enterprise Linux release 8.8 (Ootpa)
Oracle Linux Server release 8.8
cpe:/o:oracle:linux:8:8:server
素のままだとふと手を離したすきにsshが切断されてしまって不便なため以下を設定。
[root@my-instance ~]# cat /etc/ssh/sshd_config | grep Client
ClientAliveInterval 60
ClientAliveCountMax 3
Autonomous DB
Autonomous DBの作成
以下で作成する。 Oracle Autonomous DBには
- データウェアハウス:Autonomous Data Warehouse(ADW)
- トランザクション処理:Autonomous Transaction Processing(ATP)
- JSON:Autonomous JSON Database
- APEX:APEX Application Development
の4種類があるが、ここではデータウェアハウスを選択。
「ネットワーク・アクセスの選択」は「すべての場所からのセキュア・アクセス」を選択。
※折角OCIのコンピュートインスタンスも立てたので、インスタンスからautonomous DBに接続することを見越して、「許可されたIP及びVCN限定のセキュア・アクセス」としたいところだが、そのようにはせず。後述。
数分で作成完了する。
compute VMからautonomous DBへ接続
パブリックサブネットに配置されたcompute VMから、autonomous DBにsqlplusで接続することを考える。
ここでは、インターネット経由で接続することとし、OCIの内部で通信を完結させることはしない。
というのも、OCIのコンピュートインスタンスから、インターネットを経由せずに直接内部でautomonous DBに通信したい場合、サービスゲートウェイを経由する必要がある、が、Always Free アカウントではサービスゲートウェイを作成できない・・という事情があるため。
compute VMにoracle instant client, sqlplus, toolsを導入
https://qiita.com/shirok/items/bcc355de5515ee54e8dc
手順は上記を参考にした。
上記から
- Basicパッケージ(RPM):oracle-instantclient19.20-basic-19.20-0.0-1.x86_64.rpm
- SQL*Plusパッケージ(RPM):oracle-instantclient19.20-sqlplus:19.20.0.0.0.0-1.x86_64.rpm
- ツール・パッケージ(RPM):oracle-instantclient19.20-tools-19.20.0.0.0-1.x86_64.rpm
- ツールはなくてもよいが、data pump, SQL*Loaderを使いたい場合は必要。今回はついでに
をダウンロードする。
scpでインスタンスに送り、インスタンス上で以下を実行。(手順の詳細は上記の「インストール手順」を参照)
/usr/lib/oracle/19.20/client64
配下にパッケージが配置される。
[root@my-instance ~]# yum install oracle-instantclient19.20-sqlplus:19.20.0.0.0.0-1.x86_64.rpm
(略)
[root@my-instance ~]# yum install oracle-instantclient19.20-basic-19.20-0.0-1.x86_64.rpm
(略)
[root@my-instance ~]# rpm -qa | grep instantclient
oracle-instantclient19.20-sqlplus-19.20.0.0.0-1.x86_64
oracle-instantclient19.20-basic-19.20.0.0.0-1.x86_64
[root@my-instance ~]# rpm -ql oracle-instantclient19.20-sqlplus-19.20.0.0.0-1.x86_64
/usr/bin/sqlplus
/usr/bin/sqlplus64
/usr/lib/oracle
/usr/lib/oracle/19.20
/usr/lib/oracle/19.20/client64
/usr/lib/oracle/19.20/client64/bin
/usr/lib/oracle/19.20/client64/bin/sqlplus
/usr/lib/oracle/19.20/client64/lib
/usr/lib/oracle/19.20/client64/lib/glogin.sql
/usr/lib/oracle/19.20/client64/lib/libsqlplus.so
/usr/lib/oracle/19.20/client64/lib/libsqlplusic.so
/usr/share/oracle
/usr/share/oracle/19.20
/usr/share/oracle/19.20/client64
/usr/share/oracle/19.20/client64/doc
/usr/share/oracle/19.20/client64/doc/SQLPLUS_LICENSE
/usr/share/oracle/19.20/client64/doc/SQLPLUS_README
sqlplus が叩けるようになる。
(/usr/bin/sqlplus
がシンボリックリンクとして追加されており、特にPATHの追加は不要の模様。)
[root@my-instance ~]# which sqlplus
/usr/bin/sqlplus
[root@my-instance ~]# ll /usr/bin/sqlplus
lrwxrwxrwx. 1 root root 42 Jul 15 04:34 /usr/bin/sqlplus -> /usr/lib/oracle/19.20/client64/bin/sqlplus(/usr/share/Modules/bin:/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/root/bin)
[root@my-instance ~]# sqlplus
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Oct 9 06:58:59 2023
Version 19.20.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Enter user-name: ^C
[root@my-instance ~]#
ウォレットのダウンロード
「データベース接続」から、autonomous DB接続用のウォレットをダウンロードする。Wallet_myautonomousDB.zip
なるzipファイルを取得できる。
scpでインスタンスに送る。Wallet_myautonomousDB.zip
を解凍すると以下のファイルが入っている。
[root@my-instance ~]# ll /home/opc/Wallet/
total 72
-rw-r--r--. 1 root root 5349 Oct 9 04:44 cwallet.sso
-rw-r--r--. 1 root root 5304 Oct 9 04:44 ewallet.p12
-rw-r--r--. 1 root root 5710 Oct 9 04:44 ewallet.pem
-rw-r--r--. 1 root root 3190 Oct 9 04:44 keystore.jks
-rw-r--r--. 1 root root 691 Oct 9 04:44 ojdbc.properties
-rw-r--r--. 1 root root 3044 Oct 9 04:44 README
-rw-r--r--. 1 root root 114 Oct 9 04:44 sqlnet.ora
-rw-r--r--. 1 root root 804 Oct 9 04:44 tnsnames.ora
-rw-r--r--. 1 root root 2056 Oct 9 04:44 truststore.jks
-rw-rw-r--. 1 opc opc 21974 Oct 9 04:45 Wallet_myautonomousDB.zip
解凍されたファイル一式(zip本体除く)を、/usr/lib/oracle/19.20/client64/lib/network/wallet/
に配置する。
[root@my-instance ~]# mkdir /usr/lib/oracle/19.20/client64/lib/network/wallet/
[root@my-instance ~]# cp -pi /home/opc/Wallet/* /usr/lib/oracle/19.20/client64/lib/network/wallet/
[root@my-instance ~]# rm /usr/lib/oracle/19.20/client64/lib/network/wallet/Wallet_myautonomousDB.zip
[root@my-instance ~]# ll /usr/lib/oracle/19.20/client64/lib/network/wallet/
total 48
-rw-r--r--. 1 root root 5349 Oct 9 04:44 cwallet.sso
-rw-r--r--. 1 root root 5304 Oct 9 04:44 ewallet.p12
-rw-r--r--. 1 root root 5710 Oct 9 04:44 ewallet.pem
-rw-r--r--. 1 root root 3190 Oct 9 04:44 keystore.jks
-rw-r--r--. 1 root root 691 Oct 9 04:44 ojdbc.properties
-rw-r--r--. 1 root root 3044 Oct 9 04:44 README
-rw-r--r--. 1 root root 149 Oct 9 04:50 sqlnet.ora
-rw-r--r--. 1 root root 804 Oct 9 04:44 tnsnames.ora
-rw-r--r--. 1 root root 2056 Oct 9 04:44 truststore.jks
sqlnet.ora
に、ウォレットが配置されたディレクトリを記載する欄がある。
デフォルトの値から修正する。
[root@my-instance ~]# cat /usr/lib/oracle/19.20/client64/lib/network/wallet/sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="?/network/admin")))
SSL_SERVER_DN_MATCH=yes
[root@my-instance ~]# vi /usr/lib/oracle/19.20/client64/lib/network/wallet/sqlnet.ora ★修正
[root@my-instance ~]# cat /usr/lib/oracle/19.20/client64/lib/network/wallet/sqlnet.ora
WALLET_LOCATION = (SOURCE = (METHOD = file) (METHOD_DATA = (DIRECTORY="/usr/lib/oracle/19.20/client64/lib/network/wallet")))
SSL_SERVER_DN_MATCH=yes
tnsnames.oraの中身には以下が記載されている。特に修正不要。
処理の性質に応じて使い分ける意図で、複数の接続サービスがあらかじめ用意されている。
(内部的にはリソースマネージャのコンシューマーグループにマッピングされているとのこと)
https://blogs.oracle.com/oracle4engineer/post/adb-services-shares-201905
[root@my-instance ~]# cat /usr/lib/oracle/19.20/client64/lib/network/wallet/tnsnames.ora
myautonomousdb_high = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_myautonomousdb_high.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))
myautonomousdb_low = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_myautonomousdb_low.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))
myautonomousdb_medium = (description= (retry_count=20)(retry_delay=3)(address=(protocol=tcps)(port=1522)(host=adb.ap-tokyo-1.oraclecloud.com))(connect_data=(service_name=xxxxxxxxxxxxxxx_myautonomousdb_medium.adb.oraclecloud.com))(security=(ssl_server_dn_match=yes)))
環境変数の設定
あまり作法がわからず、以下で設定
[opc@my-instance ~]$ cat .bashrc | tail -n 5
export ORACLE_BASE=/usr/lib/oracle/
export ORACLE_HOME=/usr/lib/oracle/19.20
export TNS_ADMIN=/usr/lib/oracle/19.20/client64/lib/network/wallet/
export NLS_LANG=japanese_japan.UTF8
export PATH=$PATH:/usr/lib/oracle/19.20/client64/bin
接続確認
以下で疎通できる。
[root@my-instance ~]# sqlplus ADMIN/"パスワード"@myautonomousdb_medium
SQL*Plus: Release 19.0.0.0.0 - Production on Mon Oct 9 07:26:48 2023
Version 19.20.0.0.0
Copyright (c) 1982, 2022, Oracle. All rights reserved.
Last Successful login time: Mon Oct 09 2023 07:24:45 +00:00
Connected to:
Oracle Database 19c Enterprise Edition Release 19.0.0.0.0 - Production
Version 19.21.0.1.0
SQL> select * from user_tables;
no rows selected
SQL>