#はじめに
この記事では、OCIで作成したWindowsのコンピュートインスタンスにOracle Database 19cをインストールし、TCPS(SSL)で接続する手順を示します。
構築手順は以下です。
- Public Subnet内に踏み台インスタンスbastion01を作成
- Private Subnet内にWindowsインスタンスWin01を作成
- bastion01経由でWin01に接続
- Win01にOracle Databaseをインストール
- TCPS接続の設定
- 接続できるか確認
#1.Public Subnet内に踏み台インスタンスbastion01を作成
事前にVCNウィザードを使ってVCNを作成しておきます。
今回は、Public SubnetのCIDRブロック:10.0.0.0/24
Private SubnetのCIDRブロック:10.0.1.0/24として作成しています。
次にOCIコンソールのマーケットプレイスからOracle Cloud Developer Imageを使って踏み台インスタンスを作成します。
#2. Private Subnet内にWindowsインスタンスWin01を作成
インスタンス作成ページから、イメージWindows Server 2019 Standardを選択します。
今回はPrivate Subnet内に作成するので、プライベートIPアドレスのみ設定されます。
#3.bastion01経由でWin01に接続
今回はPUTTYを使用してWin01に接続します。
以下のように、[Connection]→[SSH]→[Tunnels]からポートフォワーディング設定をします。
Source Port:任意の空いているポート番号(本記事では3399)
Destination:{WindowsインスタンスのプライベートIPアドレス}:3389
上記の設定をAddして接続します。
リモートデスクトップ接続を許可するため、Private Subnetのイングレス・ルールにPublic Subnetからの3389番ポートを追加します。
次にリモートデスクトップ接続を起動し、localhost:{上で指定したSource Port}を設定します。
Windowsが起動できたら、opcのログイン画面が表示されます。初期パスワードはOCIコンソールに記載されています。
※初回ログイン後はパスワードの変更が求められます。
#4.Win01にOracle Databaseをインストール
opcにログイン後の初期状態では、ブラウザはInternet Explorerしかありません。
Oracle softwareはGoogle Chrome、Mozilla Firefox、Apple Safari、Microsoft Edgeが推奨されています。
今回はFirefoxをダウンロードします。
※補足
Internet Explorerの初期設定ではファイルのダウンロードが許可されていないため、
[ブラウザの設定]→[Internet options]→[Security]→[custom level...]→[Downloads]→File downloadをEnableに変更します。
ダウンロード後、FirefoxでこちらからOracle Databaseのイメージファイルをダウンロードします。
インストール前にOracleホーム・ユーザーを作成しておきます。
今回は以下のようにoracleというユーザーをWindowsアカウントとして追加します。
続いてoracleユーザーにリモートアクセスを許可します。
[コントロールパネル]→[システムとセキュリティ]→[システム欄のリモートアクセスの許可]→[ユーザーの選択]→[追加]
以下のようにoracleユーザーにリモートアクセスを許可します。
続いてOracleベースとOracleホームとなるフォルダを作成しておきます。
Oracleベースは、C:\app\oracle
Oracleホームは、C:\app\oracle\product\19.3.0\dbhome_1とします。
次に、先ほどダウンロードしたイメージファイル(zipファイル)をOracleホームに展開します。
展開後、Oracleホームに展開されたsetup.exeを実行します。
以下のようにインストール設定をします。
システム・クラスはServer classを選択します。
インストール・タイプはTypical installを選択します。
Oracleホームユーザーは、既存のWindowsユーザーを選択し、先ほど作成したoracleユーザーを指定します。
※ここで『仮想アカウントの使用』を選択すると、TCPS接続が上手くいかないことがあるので、あらかじめ別のWindowsユーザーを作成しておき、それをOracleホーム・ユーザーとして設定する手順を推奨しています。
今回は、EditionはStandard Edition2とします。
OracleベースとOracleホームを正常に作成していれば、デフォルトで入力されている状態になります。
以下の設定で問題なければインストールを開始します。
#5.TCPS接続の設定
インストール完了後、Windowsにoracleユーザーでログインし直します。
PowerShellを開き、以下のコマンドでOracleホームに移動します。
cd C:\app\oracle\product\19.3.0\dbhome_1
まずはSQL Plusでデータベースに接続できるか確認してみましょう。
sqlplus / as sysdba
接続できたら、検証用のサンプルスキーマ(HR)を作成します。こちらの「2. 移行対象となるHRスキーマをインストール」~「3. サンプルスキーマ(HR)への接続、スキーマの確認」を参考に、HRスキーマに接続できるようにします。
HRスキーマが作成できたら、ORACLEホームに戻り、TCPS接続の設定を行います。
1.ウォレット用のフォルダ作成
mkdir server\wallet
mkdir client\wallet
2.サーバー用ウォレットの作成
Oracleホーム直下server\walletに移動し以下のコマンドを実行します。
orapki wallet create -wallet ./ -pwd Oracle123456 -auto_login
orapki wallet add -wallet ./ -pwd Oracle123456 -dn "CN=Win" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256
3.クライアント用ウォレットの作成
Oracleホーム直下client\walletに移動し、以下のコマンドを実行します。
orapki wallet create -wallet ./ -pwd Oracle123456 -auto_login
orapki wallet add -wallet ./ -pwd Oracle123456 -dn "CN=client" -keysize 1024 -self_signed -validity 3650 -sign_alg sha256
4.証明書の交換
ルートフォルダに移動し、tmpフォルダを作成します。
cd \
mkdir tmp
Oracleホーム直下server\walletに移動し、サーバー証明書をエクスポートします。
orapki wallet export -wallet ./ -pwd Oracle123456 -dn "CN=Win" -cert /tmp/server.crt
Oracleホーム直下client\walletに移動し、クライアント証明書をエクスポートします。
orapki wallet export -wallet ./ -pwd Oracle123456 -dn "CN=client" -cert /tmp/client.crt
Oracleホーム直下server\walletに移動し、サーバーのウォレットにクライアント証明書をインポートします。
orapki wallet add -wallet ./ -pwd Oracle123456 -trusted_cert -cert /tmp/client.crt
Oracleホーム直下client\walletに移動し、クライアントのウォレットにサーバー証明書をインポートします。
orapki wallet add -wallet ./ -pwd Oracle123456 -trusted_cert -cert /tmp/server.crt
証明書が正しくインポートされているか確認します。
orapki wallet display -wallet .
以下のように表示されていれば、証明書の交換は成功です。
5. ネットワーク構成ファイルにウォレットのフォルダを追加
Oracleホーム直下のnetwork\adminに移動し、listener.oraを編集します。
ウォレットのディレクトリを追加するため、以下を追記します。
wallet_location =
(SOURCE=
(METHOD=File)
(METHOD_DATA=
(DIRECTORY=C:\app\oracle\product\19.3.0\dbhome_1\server\wallet)))
また、リスナーにTCPSエンドポイントを追加するため、以下を追記します。
(ADDRESS = (PROTOCOL = TCPS)(HOST = 10.0.1.226)(PORT = 1522))
wallet_location =
(SOURCE=
(METHOD=File)
(METHOD_DATA=
(DIRECTORY=C:\app\oracle\product\19.3.0\dbhome_1\server\wallet)))
SSL_SERVER_DN_MATCH=(ON)
ローカルでTCPS接続できるようにするため、tnsnames.oraにORCLPDB2というネットサービスを追記します。
サービスはorclpdbというデフォルトのPDBに設定しています。
ORCLPDB2 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCPS)(HOST = 10.0.1.226)(PORT = 1522))
(CONNECT_DATA =
(SERVICE_NAME = orclpdb)
)
(SECURITY =
(SSL_SERVER_CERT_DN = "CN=Win")
)
)
リスナーの再起動を行います。oracleユーザーではlsnrctl startコマンドを実行できないため、管理者権限で起動したPowerShellで実行します。
lsnrctl stop listener
lsnrctl start listener
以下のコマンドでTCPSのエンドポイントが追加されているか確認します。
lsnrctl status
上記が確認できたら、次にTCPS接続で使用する1522番ポートを開放します。
[コントロールパネル]→[システムとセキュリティ]→[Windows Defender ファイアウォール]→[詳細設定]で受信の規則、送信の規則に1522番ポートを追加します。
ここまでで、Windowsで行う設定は以上になります。
次にOCIコンソールからPrivate Subnetのイングレス・ルールに1522番ポートを追加します。
#6. 接続できるか確認
まずはSYSでデータベースに接続します。
sqlplus / as sysdba
PDBが起動しているか確認します。
show pdbs
ORCLPDBがMOUNTEDの場合、以下で起動させます。
alter pluggable database orclpdb open;
起動できたら、『5.TCPS接続の設定』で指定したHRスキーマで接続します。
connect HR/WelCome123#123#@orclpdb2
接続できたら以下のSQLを実行します。
select * from countries;
これでWindows上のOracle DatabaseにローカルでTCPS(SSL)接続できるようになりました。
#エラーへの対応例
-
『ORA-28759: ファイルのオープンに失敗しました』が発生する場合
sqlnet.ora、listener.oraファイルに正しいウォレット・ロケーションが指定されていることを確認してください。 -
『ORA-28865:SSL接続はクローズしました』、『ORA-28864: SSL接続は正常にクローズしました』が発生する場合
Oracleホームユーザーにウォレットファイル(cwallet.sso)の読み取り権限があることを確認してください。 -
『ORA-29003:SSLトランスポートがサーバー証明書の不一致を検出しました』が発生する場合
tnsnames.oraの接続記述子に(SECURITY=(SSL_SERVER_CERT_DN="CN=Win"))句があるか確認してください。 -
『ORA-12224: TNS: リスナーがありません』が発生する場合
管理者権限でlsnrctl start listenerでリスナーを起動してください。
再起動後1分程待ち、lsnrctl statusで正常に起動しているか確認します。
サービスを正しく認識していない場合は、sqlplus / as sysdba で接続し、初期化パラメータlocal_listenerを確認します。
show parameter local_listener
デフォルトはLISTENER_<ORACLE_SID>になっています。この初期化パラメータに何らかの変更をしているとサービスが認識されない場合があるので、以下のコマンドで修正します。
alter system set local_listener="LISTENER_<ORACLE_SID>";
- データベースへの接続がタイムアウトする場合
OCIのセキュリティリストとWindowsのポート設定を見直してください。必要なポートが空いていない可能性があります。
以下の記事では、今回構築したWindows上のOracle DatabaseとAutonomous Database間のデータベース・リンクの構築手順を紹介しています。