Windows Server 2022 に Oracle Database 21c(21.3)を GUI のインストーラーで入れ、別のコンピューターから SQL*Plus で接続できるようにするまでの手順です。データベースの起動・停止のしかたと、接続できないときに出るエラーの見分け方も載せています。
全体の流れは次のとおりです。


21c のデータベースは必ず「コンテナ型」になる
Oracle Database 12c(12.1)から、1 つのデータベースの中に複数のデータベースを入れられるマルチテナントという構成が使えるようになりました。外側の入れ物をコンテナ・データベース(CDB)、中に入れるデータベースをプラガブル・データベース(PDB)と呼びます。
19c までは、従来どおりの「非コンテナ型」も選べましたが、21c では非コンテナ型は作れません。この記事の手順で作ると、CDB「orcl」の中に PDB「orclpdb」が 1 つ入った形になります。

インストールの最後の確認画面に出る「汎用目的/トランザクション処理」は、データベースの使い方の型(初期設定のひな形)です。コンテナ型かどうかとは関係ありません。
ソフトウェアのダウンロードとインストールする環境
インストール用の zip は、次のどちらからでもダウンロードできます。どちらも Oracle のアカウントが必要です。
| ダウンロード元 | ファイル名 | 大きさ |
|---|---|---|
| Oracle Software Delivery Cloud(edelivery) 「Oracle Database 21.3.0.0.0 for Microsoft Windows x64 (64-bit)」 | V1017685-01.zip | 2,661,783,521 バイト(約 2.5 GB) |
| Oracle Database 21c (21.3) for Windows のダウンロードページ | WINDOWS.X64_213000_db_home.zip | 同上 |
2 つはファイル名が違うだけで、中身は同じです(SHA-256 が同じ値になります)。ダウンロードしたら、PowerShell で SHA-256 を表示し、次の値と一致するか確かめておくと安心です。
PS C:\> (Get-FileHash .\V1017685-01.zip).Hash
85A41B94BCCAE23FE2AF3F3D1D3D9E7E93E13F32AD7731DCF72D1CC6763C04AD
edelivery では、次の画面でサインインします。アカウントが無い場合は、下の「アカウントの作成」から作ります。

インストールする環境は次のとおりです。
| 項目 | 値 |
|---|---|
| OS | Windows Server 2022 Standard |
| コンピューター名(例) | SADARI221 |
| IP アドレス(例) | 192.168.1.221 |
| エディション | Standard Edition 2 |
この記事のコマンドとファイルのパスでは \(バックスラッシュ)を使っています。日本語のフォントでは ¥ に見えることがありますが、同じ文字です。
ソフトウェアのインストール
Oracle は、ディレクトリの作り方の推奨ルール OFA(Optimal Flexible Architecture)に沿って、次の場所に Oracle ホーム(Oracle のソフトウェアを置くフォルダ)を作ります。
<Oracle ベース>\product\21.3.0\dbhome_1
(例:C:\app\oracle\product\21.3.0\dbhome_1)
18c からは「イメージ形式」のインストールになり、zip を Oracle ホームに直接解凍してから、その中の setup を実行します。解凍した場所がそのまま Oracle ホームになるので、あとから移動しないでください。
zip を解凍して setup を実行する
V1017685-01.zip(または WINDOWS.X64_213000_db_home.zip)を C:\app\oracle\product\21.3.0\dbhome_1 に解凍し、その中の setup(アイコンが赤い方。もう 1 つはコマンド用)をダブルクリックします。

黒いコンソールの窓が開き、しばらくするとインストーラーの画面が出ます。
構成オプションとシステム・クラス
最初から選ばれている「単一インスタンス・データベースを作成および構成します」のまま、「次へ」を押します。ソフトウェアと一緒に、最初のデータベースも作る設定です。

「デスクトップ・クラス」のまま「次へ」を押します。細かい設定をせずに、ひと通り入れる方法です。

Oracle ホーム・ユーザー
「仮想アカウントの使用」のまま「次へ」を押します。Oracle のサービスを動かすための専用のアカウントを、Windows が自動で用意してくれます。

標準インストール構成
Oracle ベースは最初から C:\app\oracle になっています。データベース・ファイルの位置も、それに合わせて自動で決まります。
「データベースのエディション」を開き、Standard Edition 2 を選びます。

文字セットは、最初から選ばれているユニコード(AL32UTF8)のままにします。Oracle が推奨する設定で、日本語も問題なく扱えます。
パスワードを 2 か所に入力し、「次へ」を押します。このパスワードは、管理用のユーザー(SYS・SYSTEM など)のパスワードになります。この記事では練習用に admin1234 にしました。
グローバル・データベース名「orcl」とプラガブル・データベース名「orclpdb」は、あとで外部から接続するときのサービス名になるので覚えておいてください。

パスワードが短いと、次の警告が出ます。練習用なので「はい」で進めます。

前提条件のチェックとサマリー
前提条件のチェックが自動で行われ、問題が無ければサマリーの画面に進みます。内容を確かめて「インストール」を押します。

インストールの進み具合と終了
インストールとデータベースの作成が進みます。この記事の環境では、およそ 15 分かかりました。

「Oracle Database の構成が成功しました。」と出たら完了です。「閉じる」を押します。

インストールされたものを確かめる
レジストリに登録された設定
インストーラーは、Oracle を動かすための設定をレジストリに登録します。環境変数と同じ働きをしますが、システムの環境変数には入っていません。
Windows キー+R で「ファイル名を指定して実行」を開き、regedit と入力して レジストリ エディターを開きます。HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB21Home1 を選ぶと、右側に設定が並びます。

| 名前 | 値(この記事の環境) | 意味 |
|---|---|---|
| ORACLE_HOME | C:\app\oracle\product\21.3.0\dbhome_1 | Oracle のソフトウェアの場所 |
| ORACLE_BASE | C:\app\oracle | Oracle 関係のフォルダの基点 |
| ORACLE_SID | orcl | データベース(インスタンス)の名前 |
| NLS_LANG | JAPANESE_JAPAN.JA16SJISTILDE | SQL*Plus などが使う言語と文字コード。 データベースの文字セット(AL32UTF8)とは別のもの |
| ORACLE_HOME_READONLY | Y | 読み取り専用 Oracle ホーム。設定ファイルは別の場所(homes\OraDB21Home1)に置かれる |
| ORA_ORCL_AUTOSTART | TRUE | サービスを開始するとデータベースも起動する |
PATH に Oracle の bin が入る
コマンドプロンプトで PATH を表示すると、先頭に Oracle の bin フォルダが入っています。これで、どのフォルダからでも sqlplus や lsnrctl を実行できます。
C:\Users\Administrator>echo %PATH%
C:\app\oracle\product\21.3.0\dbhome_1\bin;C:\Windows\system32;C:\Windows;…

スタートメニュー
スタートメニューに Oracle のツールが追加されます。

サービス
Windows キー+R で services.msc を実行してサービスの一覧を開きます。次の 2 つが「実行中」・「自動」になっていれば、データベースとリスナーが動いています。
| サービス名 | 役割 |
|---|---|
| OracleServiceORCL | データベース(インスタンス orcl) |
| OracleOraDB21Home1TNSListener | リスナー(外部からの接続を受け付ける窓口。1521 番ポート) |

認証の設定(sqlnet.ora)
21c は「読み取り専用 Oracle ホーム」なので、接続の設定ファイルは Oracle ホームではなく、C:\app\oracle\homes\OraDB21Home1\network\admin にあります。この中の sqlnet.ora を開くと、次の設定が入っています。
# sqlnet.ora Network Configuration File: C:\app\oracle\homes\OraDB21Home1\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.
# This file is actually generated by netca. But if customers choose to
# install "Software Only", this file wont exist and without the native
# authentication, they will not be able to connect to the database on NT.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)

NTS は、Windows にサインインしているユーザーの情報で Oracle に接続する設定です。サインインしているユーザーが ORA_DBA グループに入っていれば、パスワードなしで sqlplus / as sysdba と入力して管理者として接続できます(/ の前後にスペースが必要です)。インストールしたユーザーは、自動でこのグループに入ります。
リスナーの状態
リスナーは、外部からの接続を受け付けてデータベースへつなぐ窓口です。コマンドプロンプトで lsnrctl status を実行して、状態を確かめます。
C:\Users\Administrator>lsnrctl status
LSNRCTL for 64-bit Windows: Version 21.0.0.0.0 - Production on 07-11月-2026 15:07:32
Copyright (c) 1991, 2021, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=SADARI221)(PORT=1521)))に接続中
リスナーのステータス
(略)
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=SADARI221)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(略)
サービスのサマリー...
(略)
サービス"orcl"には、1件のインスタンスがあります。
インスタンス"orcl"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"orclXDB"には、1件のインスタンスがあります。
インスタンス"orcl"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"orclpdb"には、1件のインスタンスがあります。
インスタンス"orcl"、状態READYには、このサービスに対する2件のハンドラがあります...
コマンドは正常に終了しました。

確かめるのは次の 2 点です。
- 待ち受けアドレスの HOST が、外部から届く名前(この記事の環境ではコンピューター名の SADARI221)になっていること。localhost や 127.0.0.1 になっていると外部から接続できません(→「リスナーの HOST が localhost になっている場合」)
- サービスのサマリーに orcl(CDB)と orclpdb(PDB)が出ていること
接続にかかわる設定ファイルの関係は、次の図のとおりです。

サーバー上で接続を確かめる
まず、データベースのサーバー上で SQL*Plus から接続できるか確かめます。コード中の赤い太字は、自分の環境に合わせて書き換える部分です。
C:\Users\Administrator>sqlplus system/admin1234
SQL*Plus: Release 21.0.0.0.0 - Production on 土 11月 7 15:07:56 2026
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
最終正常ログイン時間: 土 11月 07 2026 15:00:19 +09:00
Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL>

データベースの起動と停止
インストール直後は、Windows の起動と一緒にデータベースとリスナーも自動で起動します(サービスのスタートアップの種類が「自動」のため)。サービス(OracleServiceORCL)を開始・停止すると、データベースも起動・停止します。
SQL*Plus から止めたり起動したりするときは、管理者として接続して次のように実行します。
C:\Users\Administrator>sqlplus / as sysdba
(略)
SQL> shutdown immediate
データベースがクローズされました。
データベースがディスマウントされました。
ORACLEインスタンスがシャットダウンされました。
SQL> startup
ORACLEインスタンスが起動しました。
(略)
データベースがマウントされました。
データベースがオープンされました。
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 ORCLPDB MOUNTED
SQL> alter pluggable database orclpdb open;
プラガブル・データベースが変更されました。
SQL> alter pluggable database orclpdb save state;
プラガブル・データベースが変更されました。
SQL> show pdbs
(略)
3 ORCLPDB READ WRITE NO

startup だけでは PDB(orclpdb)は開きません(OPEN MODE が MOUNTED のまま)。この状態では orclpdb に接続できないので、alter pluggable database orclpdb open; で開きます。続けて save state を実行しておくと、今の状態(開いている)が記録され、次にデータベースを起動したときに PDB も自動で開きます。
外部のコンピューターから接続する
外部のコンピューターから接続するときは、次の 3 か所を通ります。どこで止まったかによって、出るエラーが変わります。

この記事では、クライアントに Windows Server 2025 を使い、Oracle Instant Client 19.19(Basic と SQL*Plus のパッケージ)を C:\verify12\instantclient_19_19 に解凍して接続しました(画面のプロンプトに出るフォルダ名は、この置き場所です)。
ファイアウォールを開ける前に接続してみる
Windows Server 2022 は、最初は 1521 番ポートへの接続をファイアウォールで止めています。このまま外部から接続すると、しばらく待たされたあと ORA-12170(タイムアウト)になります。
C:\verify12\instantclient_19_19>sqlplus system/admin1234@192.168.1.221/orcl
(略)
ERROR:
ORA-12170: TNS:Connect timeout occurred

メッセージが英語なのは、クライアントで NLS_LANG を設定していないためです(後で設定します)。
ファイアウォールで 1521 番を許可する
データベースのサーバーで、コントロール パネル → Windows Defender ファイアウォールを開き、左のメニューの「詳細設定」をクリックします。

「セキュリティが強化された Windows Defender ファイアウォール」が開きます。左の「受信の規則」を選び、右の「新しい規則…」をクリックします。

「新規の受信の規則ウィザード」が開きます。規則の種類は「ポート」を選んで「次へ」。

「TCP」を選び、「特定のローカル ポート」に 1521 を入力して「次へ」。

「接続を許可する」のまま「次へ」。

ドメイン・プライベート・パブリックの 3 つにチェックが付いたまま「次へ」。

分かりやすい名前(例:Oracle Listener 1521)を付けて「完了」を押します。

受信の規則の一覧に追加されたことを確かめます(有効が「はい」、操作が「許可」)。

もう一度接続する
外部のコンピューターから、もう一度接続します。今度はつながりますが、日本語が「????」で表示されます。

クライアントで NLS_LANG(SQL*Plus が使う言語と文字コード)を設定してから接続すると、日本語で表示されます。アプリケーションのデータは、ふつう CDB(orcl)ではなく PDB(orclpdb)に置くので、ここでは orclpdb に接続します。
C:\verify12\instantclient_19_19>set NLS_LANG=JAPANESE_JAPAN.JA16SJISTILDE
C:\verify12\instantclient_19_19>sqlplus system/admin1234@192.168.1.221/orclpdb
(略)
Oracle Database 21c Standard Edition 2 Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL> show con_name
CON_NAME
------------------------------
ORCLPDB

set で設定した NLS_LANG は、そのコマンドプロンプトの中だけで有効です。毎回設定するのが面倒なときは、クライアントのシステムの環境変数に登録します。
リスナーの HOST が localhost になっている場合
この記事の環境では、リスナーの HOST はインストールしたときからコンピューター名(SADARI221)になっていて、書き換えずに外部から(接続先に IP アドレスを指定して)接続できました。
一方、環境によっては HOST が localhost になっていることがあります。その場合は外部から接続できないので、次の手順で外部から届く名前か IP アドレスに書き換えます(この記事の環境では HOST の書き換えはしていません。リスナーの停止・起動と登録の部分は確かめています)。
まず、リスナーを止めます。
C:\Users\Administrator>lsnrctl stop
次に、C:\app\oracle\homes\OraDB21Home1\network\admin の listener.ora と tnsnames.ora をメモ帳で開き、HOST の値を書き換えます。
C:\Users\Administrator>notepad C:\app\oracle\homes\OraDB21Home1\network\admin\listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.221)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
C:\Users\Administrator>notepad C:\app\oracle\homes\OraDB21Home1\network\admin\tnsnames.ora
LISTENER_ORCL =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.221)(PORT = 1521))
(略)
ORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.1.221)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = orcl)
)
)
tnsnames.ora の LISTENER_ORCL も忘れずに直します。データベースは起動するとき、初期化パラメータ LOCAL_LISTENER に書かれた名前(LISTENER_ORCL)が指すアドレスのリスナーに「orcl・orclpdb がここにある」と登録します。ここが古いままだと、登録先がずれてしまいます。
書き換えたら、リスナーを起動します。起動した直後は、サービスに CLRExtProc しか出ません。
C:\Users\Administrator>lsnrctl start
(略)
サービスのサマリー...
サービス"CLRExtProc"には、1件のインスタンスがあります。
インスタンス"CLRExtProc"、状態UNKNOWNには、このサービスに対する1件のハンドラがあります...
コマンドは正常に終了しました。

しばらく待つとデータベースが自動で登録しますが、管理者として接続して ALTER SYSTEM REGISTER; を実行すると、すぐに登録されます。
C:\Users\Administrator>sqlplus / as sysdba
SQL> alter system register;
システムが変更されました。
SQL> exit
C:\Users\Administrator>lsnrctl status
(略)
サービス"orcl"には、1件のインスタンスがあります。
(略)
サービス"orclpdb"には、1件のインスタンスがあります。

接続できないときは
エラーの番号で、どこで止まっているかが分かります。この記事の環境で実際に出たものです。
| エラー | 出た場面 | 原因 | 対処 |
|---|---|---|---|
| ORA-12170 接続タイムアウト | 外部から接続したとき | ファイアウォールで 1521 番が止められている。 リスナーが止まっているときも、外部からはこのエラーになった | ファイアウォールで 1521 番を許可する。リスナー(OracleOraDB21Home1TNSListener)が動いているか確かめる |
| ORA-12541 リスナーがありません | サーバー上で接続したとき | リスナーが止まっている | lsnrctl start でリスナーを起動する |
| ORA-12514 サービスを認識していません | 外部から接続したとき | 接続先のサービス名が違う(例:orclpdb1)。または、まだリスナーに登録されていない | lsnrctl status で出るサービス名(orcl・orclpdb)を指定する。登録されていなければ ALTER SYSTEM REGISTER; |
| 日本語が ???? になる | 外部から接続したとき | クライアントで NLS_LANG を設定していない | set NLS_LANG=JAPANESE_JAPAN.JA16SJISTILDE を実行してから接続する |
リスナーを止めた状態で、外部とサーバー上から接続したときの画面です。同じ原因でも、出るエラーが違います。


サービス名を間違えたときの画面です。

動作確認した環境
| 項目 | 内容 |
|---|---|
| 確認した日 | 2026 年 11 月 7 日 |
| データベースのサーバー | Windows Server 2022 Standard(Hyper-V の仮想マシン、メモリ 8 GB) |
| Oracle Database | 21c(21.3.0.0.0)Standard Edition 2。V1017685-01.zip(公式の SHA-256 と一致) |
| クライアント | Windows Server 2025(Hyper-V の仮想マシン)+ Oracle Instant Client 19.19(Basic・SQL*Plus) |
| 確かめたこと | この記事の GUI でのインストール、レジストリ・PATH・サービス・sqlnet.ora・リスナーの状態、サーバー上と外部からの接続、ファイアウォールの設定、データベースの停止と起動・PDB を開く操作、リスナーの停止と起動・ALTER SYSTEM REGISTER、表のエラー |
| 確かめていないこと | listener.ora・tnsnames.ora の HOST の書き換え(この環境では不要だったため)、Enterprise Edition、Enterprise Manager Database Express の画面 |

