Windows 11 Pro に、無料で使える Oracle Database 21c Express Edition(以下 XE)を GUI のインストーラーで入れ、別のコンピューターから SQL*Plus で接続できるようにするまでの手順です。XE で使える範囲(ライセンス・制限・機能)と、接続できないときのエラーの見分け方も載せています。

Oracle Database XE とは
XE は、Oracle Database の無料版です。インストーラーで作られるデータベースは、入れ物のコンテナ・データベース(CDB)「XE」の中に、アプリのデータを置くプラガブル・データベース(PDB)「XEPDB1」が入った形になります。

ライセンス(無料で使える範囲)
XE は Oracle Free Use Terms and Conditions という条件で配布されています(インストーラーの「使用許諾条項」の画面にも、この名前が出ます)。主な内容は次のとおりです。
- 自社のアプリケーションの開発・テスト・試作・デモに使える
- 自社の業務のために動かせる(本番での利用も含む)
- 改変しないまま再配布できる(利用者に追加の料金を取らないこと)
- パッチと Oracle のサポートは提供されない(質問は Oracle のコミュニティ・フォーラム)
実際に業務で使うかどうかは、条文そのものを確かめてから判断してください。
リソースの制限
XE は、使う資源が自動で次の範囲に抑えられます(Oracle のドキュメント)。
| 項目 | XE の上限 |
|---|---|
| CPU | 2 コアまで(それ以上あっても自動で 2 コア分に制限) |
| メモリ | 2 GB まで(この記事の環境では SGA 約 1.5 GB・PGA 0.5 GB に設定されていた) |
| ユーザーのデータ | 12 GB まで |
| インストール | 1 つの環境(物理マシン・仮想マシン・コンテナ)に 1 つだけ。2 つ目は ORA-00442 で起動しない |
| PDB の数 | ライセンス上は 252 個まで。実際は上のメモリ・データの制限で少なくなる |
PDB は 18c の XE では 3 つまででしたが、21c では増えています。この記事の環境では、XEPDB1 のほかに 3 つの PDB を作って開けることを確かめました(確かめた後に削除)。
使える機能・使えない機能
主なものを抜き出しました。全体は Licensing Information User Manual の表にあります。
| 区分 | 機能 |
|---|---|
| 使える | マルチテナント(PDB)、パーティション、Database In-Memory、Advanced Compression(一部を除く)、Advanced Security(TDE による表領域の暗号化など)、Database Vault、Label Security、Oracle Machine Learning、Spatial and Graph |
| 使える(制限あり) | EM Express(データベースの管理画面)。最初はそのパソコンからだけ https://localhost:5500/em で開ける |
| 使えない | パラレル処理(パラレル・クエリ・パラレル DML など)、RAC・Data Guard・Sharding などの複数ノードの機能、Real Application Testing、Enterprise Manager の管理パック(Diagnostics Pack・Tuning Pack など) |
| 含まれていない(別にダウンロードして使える) | SQL Developer、APEX(Oracle APEX)、ORDS(Oracle REST Data Services)、Oracle Developer Tools for Visual Studio |
データベースの文字セットは AL32UTF8(Unicode)で、インストーラーで選ぶ画面はありません。アプリケーション側で別の文字コードを使うときは、クライアントの NLS_LANG で変換できます。
インストールする環境と準備
| 項目 | この記事の環境 |
|---|---|
| OS | Windows 11 Pro 25H2(ビルド 26200)。Home エディションはインストーラーが対応していない |
| コンピューター名(例) | DBHOST01 |
| IP アドレス(例) | 192.168.1.110 |
| インストールするユーザー | Administrators グループの直接のメンバー(「管理者として実行」だけでは足りない) |
このほか、インストール・ガイドには次の条件があります。
- 環境変数 ORACLE_HOME と TNS_ADMIN を設定していない(システムの環境変数から外す)
- XE(または SID が XE のデータベース)がまだ入っていない
- インストール先のフォルダの名前にスペースを含まない
ダウンロード
Oracle Database 21c Express Edition のダウンロードページから、Oracle Database 21c Express Edition for Windows (64-bit) をダウンロードします。2026 年 11 月時点では、Oracle のアカウントでサインインしなくてもダウンロードできました。
| ファイル名 | 大きさ | SHA-256 |
|---|---|---|
| OracleXE213_Win64.zip | 1,967,615,483 バイト(約 1.9 GB) | 939742c3305c466566a55f607638621b6aa7033a183175f6bcd6cffb48e6bc3f |
ダウンロードしたら、PowerShell で SHA-256 を表示し、上の値と一致するか確かめておくと安心です。
PS C:\> (Get-FileHash .\OracleXE213_Win64.zip).Hash
939742C3305C466566A55F607638621B6AA7033A183175F6BCD6CFFB48E6BC3F
この記事のコマンドやパスでは \(バックスラッシュ)を使っています。日本語のフォントでは ¥ に見えることがありますが、同じ文字です。
インストール
展開して setup を実行する
OracleXE213_Win64.zip を展開し(この記事では C:\temp\OracleXE213_Win64)、中の setup をダブルクリックします。「ユーザー アカウント制御」の確認が出たら「はい」を押します。

「インストールの準備をしています」と表示されたあと、ウィザードが開きます。「次へ」を押します。

使用許諾条項
使用許諾は Oracle Free Use Terms and Conditions です。「使用許諾条項を受け入れます」を選んで「次へ」を押します。

インストール先(宛先フォルダ)
インストール先は、最初は C:\app\(ユーザー名)\product\21c\ になっています。そのままでもかまいませんが、この記事ではユーザー名を含まない C:\app\product\21.0.0\ に変えます。「変更」を押します。

「フォルダ名」を書き換えて「OK」を押します。

インストール先が変わったことを確かめて「次へ」を押します。

データベースのパスワード
SYS・SYSTEM・PDBADMIN の 3 つの管理用ユーザーに共通のパスワードを、2 か所に入力して「次へ」を押します。この記事では練習用に manager にしました。

サマリーとインストール
宛先フォルダ・Oracle ホーム・Oracle ベースを確かめて「インストール」を押します。

インストールの途中で、Windows セキュリティの「パブリック ネットワークとプライベート ネットワークにこのアプリへのアクセスを許可しますか?」(Java(TM) Platform SE binary)が出ることがあります。この記事の環境では「キャンセル」を押しましたが、インストールにも、このあとの外部からの接続にも影響はありませんでした(外部からの接続は、後で 1521 番ポートの規則を作って許可します)。

インストールとデータベースの作成が進みます。この記事の環境では約 10 分かかりました。

「Oracle Database が正常にインストールされました。」と出たら完了です。表示される接続情報は次の意味です。「完了」を押して閉じます。

| 表示 | 接続先 |
|---|---|
| マルチテナント・コンテナ・データベース: localhost:1521 | CDB のルート(CDB$ROOT)。サービス名 XE |
| プラガブル・データベース: localhost:1521/XEPDB1 | PDB「XEPDB1」。アプリのデータはこちらに置く |
| EM Express URL: https://localhost:5500/em | 管理画面。このパソコンのブラウザからだけ開ける |
インストールされたものを確かめる
レジストリに登録された設定
インストーラーは、Oracle を動かすための設定をレジストリに登録します。環境変数と同じ働きをしますが、システムの環境変数には入っていません。
Windows キー+R で「ファイル名を指定して実行」を開き、regedit と入力してレジストリ エディターを開きます。HKEY_LOCAL_MACHINE\SOFTWARE\ORACLE\KEY_OraDB21Home1 を選ぶと、右側に設定が並びます。

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

(2 つ目以降のフォルダは環境によって違います。)
スタートメニュー
インストール直後は、スタートメニューの「おすすめ」に Oracle のツールが「最近追加」として表示されます。ふだんは「すべて」の一覧の Oracle – OraDB21Home1 から開きます。

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

サービスを再起動しても、XEPDB1 は自動で開きます(インストーラーが「起動したら開く」状態を記録済みのため。この記事の環境で確認)。
認証の設定(sqlnet.ora)
接続の設定ファイルは、Oracle ホームではなく C:\app\product\21.0.0\homes\OraDB21Home1\network\admin にあります。この中の sqlnet.ora には、最初から次の設定が入っています。
# sqlnet.ora Network Configuration File: C:\app\product\21.0.0\homes\OraDB21Home1\NETWORK\ADMIN\sqlnet.ora
# Generated by Oracle configuration tools.
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
NTS は、Windows にサインインしているユーザーの情報で Oracle に接続する設定です。サインインしているユーザーが ORA_DBA グループに入っていれば、パスワードなしで sqlplus / as sysdba と入力して管理者として接続できます(/ の前後にスペースが必要です)。インストールしたユーザーは、自動でこのグループに入ります。
リスナーの状態
リスナーは、外部からの接続を受け付けてデータベースへつなぐ窓口です。コマンドプロンプトで lsnrctl status を実行して、状態を確かめます。
C:\Users\admin>lsnrctl status
LSNRCTL for 64-bit Windows: Version 21.0.0.0.0 - Production on 07-11月-2026 22:08:00
Copyright (c) 1991, 2021, Oracle. All rights reserved.
(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=DBHOST01)(PORT=1521)))に接続中
リスナーのステータス
(略)
デフォルト・サービス XE
パラメータ・ファイル C:\app\product\21.0.0\homes\OraDB21Home1\network\admin\listener.ora
(略)
リスニング・エンドポイントのサマリー...
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=DBHOST01)(PORT=1521)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(PIPENAME=\\.\pipe\EXTPROC1521ipc)))
(DESCRIPTION=(ADDRESS=(PROTOCOL=tcps)(HOST=127.0.0.1)(PORT=5500))…)
サービスのサマリー...
(略)
サービス"XE"には、1件のインスタンスがあります。
インスタンス"xe"、状態READYには、このサービスに対する2件のハンドラがあります...
サービス"XEXDB"には、1件のインスタンスがあります。
インスタンス"xe"、状態READYには、このサービスに対する1件のハンドラがあります...
サービス"xepdb1"には、1件のインスタンスがあります。
インスタンス"xe"、状態READYには、このサービスに対する2件のハンドラがあります...
コマンドは正常に終了しました。

確かめるのは次の 2 点です。
- 待ち受けアドレスの HOST が、外部から届く名前(この記事の環境ではコンピューター名の DBHOST01)になっていること
- サービスのサマリーに XE(CDB)と xepdb1(PDB)が出ていること
tcps の 5500 番は EM Express です。127.0.0.1(このパソコン自身)でしか待ち受けていないので、外部からは開けません。
HOST がうまく引けない名前になっている場合
この記事の環境では、listener.ora と tnsnames.ora の HOST はインストールしたときからコンピューター名(DBHOST01)で、書き換えなくても外部から(接続先に IP アドレスを指定して)接続できました。
環境によっては、HOST が「コンピューター名.localdomain」のように DNS サフィックスの付いた名前になることがあります(以前この記事を書いた環境では PC-A.localdomain でした)。その名前がネットワークの変更などで引けなくなると、リスナーが起動しない・データベースが登録されないといった問題が起きます。そのときは、2 つのファイルの HOST をコンピューター名に書き換えます(この記事の環境では書き換えが不要だったため、この手順は試していません)。
どちらのファイルも C:\app\product\21.0.0\homes\OraDB21Home1\network\admin にあります。コード中の赤い太字は、自分の環境に合わせて書き換える部分です。
C:\Users\admin>notepad C:\app\product\21.0.0\homes\OraDB21Home1\network\admin\listener.ora
LISTENER =
(DESCRIPTION_LIST =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBHOST01)(PORT = 1521))
(ADDRESS = (PROTOCOL = IPC)(KEY = EXTPROC1521))
)
)
C:\Users\admin>notepad C:\app\product\21.0.0\homes\OraDB21Home1\network\admin\tnsnames.ora
XE =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBHOST01)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = XE)
)
)
LISTENER_XE =
(ADDRESS = (PROTOCOL = TCP)(HOST = DBHOST01)(PORT = 1521))
tnsnames.ora の LISTENER_XE も忘れずに直します。データベースは起動するとき、初期化パラメータ LOCAL_LISTENER に書かれた名前(LISTENER_XE)が指すアドレスのリスナーに、自分のサービス(XE・xepdb1)を登録するためです。書き換えたら、サービス OracleOraDB21Home1TNSListener と OracleServiceXE を再起動し、lsnrctl status で XE と xepdb1 が出ることを確かめます。
サーバー上で接続を確かめる
コマンドプロンプトで SQL*Plus を実行し、接続できるかを確かめます。
C:\Users\admin>sqlplus system/manager
SQL*Plus: Release 21.0.0.0.0 - Production on 土 11月 7 22:08:48 2026
Version 21.3.0.0.0
Copyright (c) 1982, 2021, Oracle. All rights reserved.
最終正常ログイン時間: 土 11月 07 2026 21:55:30 +09:00
Oracle Database 21c Express Edition Release 21.0.0.0.0 - Production
Version 21.3.0.0.0
に接続されました。
SQL>

ルート(CDB$ROOT)に接続する
sqlplus / as sysdba で接続すると、CDB のルート(CDB$ROOT)に入ります。使えるサービスを v$services で表示し、今いるコンテナと PDB の一覧を確かめます。
C:\Users\admin>sqlplus / as sysdba
(略)
SQL> col name for a15
SQL> col pdb for a10
SQL> select name, pdb from v$services;
NAME PDB
--------------- ----------
xeXDB CDB$ROOT
SYS$BACKGROUND CDB$ROOT
SYS$USERS CDB$ROOT
xe CDB$ROOT
xepdb1 XEPDB1
SQL> show con_name
CON_NAME
------------------------------
CDB$ROOT
SQL> show con_id
CON_ID
------------------------------
1
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
2 PDB$SEED READ ONLY NO
3 XEPDB1 READ WRITE NO

PDB$SEED は、新しい PDB を作るときのひな形(読み取り専用)です。アプリのデータは XEPDB1 に置きます。
XEPDB1 に接続する
接続先に localhost:1521/XEPDB1 を付けると、PDB の XEPDB1 に入ります(:1521 は省略できます)。
C:\Users\admin>sqlplus /@localhost:1521/XEPDB1 as sysdba
(略)
SQL> select name, pdb from v$services;
NAME PDB
--------------- ----------
xepdb1 XEPDB1
SQL> show con_name
CON_NAME
------------------------------
XEPDB1
SQL> show pdbs
CON_ID CON_NAME OPEN MODE RESTRICTED
---------- ------------------------------ ---------- ----------
3 XEPDB1 READ WRITE NO

PDB の中では、v$services にも show pdbs にも、自分(XEPDB1)だけが表示されます。
ルートと XEPDB1 の違い(参考)
同じ確認をルート(CDB$ROOT)と XEPDB1 で行うと、次のような違いがあります(この記事の環境の値)。
SQL> select username, account_status, profile from dba_users;
SQL> select profile, limit from dba_profiles where resource_name='FAILED_LOGIN_ATTEMPTS';
SQL> select name, value from v$parameter;
| 確かめたこと | ルート(CDB$ROOT) | XEPDB1 |
|---|---|---|
| ユーザーの数(dba_users) | 37 | 37 |
| 片方にだけあるユーザー | GSMROOTUSER(LOCKED) | PDBADMIN(OPEN) |
| ログイン失敗の許容回数(FAILED_LOGIN_ATTEMPTS) | DEFAULT 10・ORA_CIS_PROFILE 5・ORA_STIG_PROFILE 3 | 同じ |
| 初期化パラメータの数(v$parameter) | 474 | — |
| sga_target | 1610612736(約 1.5 GB。パソコンのメモリによって変わる) | 0 |
| common_user_prefix | C## | (空) |
外部のコンピューターから接続する
外部のコンピューターから接続するときは、次の 3 か所を通ります。どこで止まったかによって、出るエラーが変わります。

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

-L は、接続に失敗したときにユーザー名を聞き直さずに終わらせるオプションです。メッセージが英語なのは、クライアントで NLS_LANG を設定していないためです(後で設定します)。
ファイアウォールで 1521 番を許可する
データベースのパソコン(Windows 11)で Windows キー+R を押し、firewall.cpl を実行して Windows Defender ファイアウォールを開きます。左のメニューの「詳細設定」をクリックします。

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

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

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

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

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

分かりやすい名前(例:Oracle XE Listener 1521)を付けて「完了」を押します。説明は空でもかまいません。

受信の規則の一覧に追加されます。

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

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

set で設定した NLS_LANG は、そのコマンドプロンプトの中だけで有効です。毎回設定するのが面倒なときは、クライアントのシステムの環境変数に登録します。
接続できないときは
エラーの番号で、どこで止まっているかが分かります。この記事の環境で実際に出たものです。
| エラー | 出た場面 | 原因 | 対処 |
|---|---|---|---|
| ORA-12170 接続タイムアウト | 外部から接続したとき | ファイアウォールで 1521 番が止められている。 リスナーが止まっているときも、外部からはこのエラーになった | ファイアウォールで 1521 番を許可する。リスナー(OracleOraDB21Home1TNSListener)が動いているか確かめる |
| ORA-12541 リスナーがありません | サーバー上で接続したとき | リスナーが止まっている | サービス OracleOraDB21Home1TNSListener を開始する(または lsnrctl start) |
| ORA-12514 サービスを認識していません | 外部から接続したとき | 接続先のサービス名が違う(例:xepdb2) | lsnrctl status で出るサービス名(XE・xepdb1)を指定する |
| 日本語が ???? になる | 外部から接続したとき | クライアントで NLS_LANG を設定していない | set NLS_LANG=JAPANESE_JAPAN.JA16SJISTILDE を実行してから接続する |
リスナーを止めた状態で、外部とサーバー上から接続したときの画面です。同じ原因でも、出るエラーが違います。


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

動作確認した環境
| 項目 | 内容 |
|---|---|
| 確認した日 | 2026 年 11 月 7 日 |
| データベースのパソコン | Windows 11 Pro 25H2(ビルド 26200.9711、Hyper-V の仮想マシン、メモリ 16 GB) |
| Oracle Database | 21c Express Edition(21.3.0.0.0)。OracleXE213_Win64.zip(公式の SHA-256 と一致) |
| クライアント | Windows Server 2025(Hyper-V の仮想マシン)+ Oracle Instant Client 19.19(Basic・SQL*Plus) |
| 確かめたこと | この記事の GUI でのインストール、レジストリ・PATH・サービス・sqlnet.ora・リスナーの状態、サーバー上の接続(CDB$ROOT・XEPDB1)、PDB を追加できる数、ファイアウォールの設定、外部からの接続、表のエラー、サービスの再起動後に XEPDB1 が自動で開くこと |
| 確かめていないこと | listener.ora・tnsnames.ora の HOST の書き換え(この環境では不要だったため)、Windows 11 Home・Windows 10、EM Express の画面 |

