概要
Windows上にOracleサーバーを立てる方法の解説です。
背景
Oracleのインストールって毎回すんなりいかなくないですか?
やりかた
試用版のOracleをダウンロードする
無償で使えるOracle Database Express Editionをダウンロードします。
実際にプロジェクトで使うエディション、バージョンが決まっているのであれば、以下からダウンロードできます。(要アカウント登録)
インストールする
その前に今回インストールする環境の説明です。Hyper-V上にWindows Serverを立てて、そこにOracle DBをインストールします。Oracleは綺麗にアンインストールするのが大変なので検証する時は直接インストールすることは避けたほうがよいです。

ダウンロードしたzipファイルを解凍し、[setup.exe]を管理者権限で実行します。

インストーラが起動するので適当に、はいはい、と進めます。

[インストール]をクリックします。

インストール完了です。

接続する
接続する前にOracleをインストールすると何が作られるのかの解説です。
最上位の概念となる[インスタンス]が作成され、その下に[コンテナ]が3つできます。
- Oracle インスタンス (Express EditionなのでXE)
- CDB$ROOT (ルートコンテナ)
- SYS (全体管理者)
- SYSTEM (全体管理者補佐)
- 共通ユーザー (C##で始まるユーザー)
- PDB$SEED (PDBテンプレート)
- XEPDB1 (PDB)
- SYS (XEPDB1内の管理者)
- SYSTEM (XEPDB1内の管理者補佐)
- アプリケーションユーザー
- CDB$ROOT (ルートコンテナ)
それぞれのコンテナの役割は次のようになっています。
- CDB$ROOT (= /)
- Oracleインスタンス全体の管理
- すべてのPDBのメタデータ管理
- 共有ユーザー(全PDBで使えるユーザー)の作成
- PDBの作成、削除、起動/停止
- “sqlplus / as sysdba”で、パスワード不要でSYSユーザーとしてログインできる
- 通常のシステム運用では使わないようにしたほうがよい。特に、ここにアプリケーションテーブルを作るなどはもってのほか。
- PDB$SEED
- Oracleが提供する標準PDBテンプレート
- 新しくPDBを作るときはこいつがコピーされる
- READ ONLYで操作できない
- XEPDB1
- インストール時に勝手に作ってくれる、ユーザーがアプリケーション開発などで使うデータベース
- 好きにテーブルやビューを作れる
- この記事ではこのPDBの中で検証を行なう
まずはシステム管理者でログインしてみます。
sqlplus / as sysdba
XEPDB1が起動しているか確認します。
SELECT name, open_mode FROM v$pdbs;
今はルートコンテナにいるのでXEPDB1に移動します。
ALTER SESSION SET CONTAINER = XEPDB1;
ユーザーを作る
ユーザーを作ります。接続する時にも使いますし、このユーザー名がスキーマ名にもなります。
CREATE USER testuser1 IDENTIFIED BY "Password123"
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp
QUOTA UNLIMITED ON users;
作ったユーザーに権限を付与します。
-- 基本的な権限付与
GRANT CONNECT, RESOURCE TO testuser1;
-- テーブルを作ったりするための権限
GRANT CREATE TABLE TO testuser1;
GRANT CREATE VIEW TO testuser1;
GRANT CREATE PROCEDURE TO testuser1;
GRANT CREATE SEQUENCE TO testuser1;
GRANT CREATE TRIGGER TO testuser1;
GRANT CREATE SESSION TO testuser1;作ったユーザーでログインする。
sqlplusから”exit”で抜けてもらって、作ったユーザーでログインしなおします。
sqlplus testuser1/Password123@localhost:1521/XEPDB1さっそく繋がりませんでした。

[ORA-12541: TNS: リスナーがありません]とあるのでリスナーが止まっているんでしょう。リスナーを開始させます。
lsnrctl start
接続できるようになりました。

テーブルを作る
テーブルを作ってみます。test_tableは id, name , created_date の3カラムを持つテーブルです。
-- テーブルを作る
CREATE TABLE test_table (
id NUMBER PRIMARY KEY,
name VARCHAR2(100),
created_date DATE DEFAULT SYSDATE
);
-- 適当に値を入れる
INSERT INTO test_table (id, name) VALUES (1, 'テスト');
COMMIT;
-- 中身を確認する。
SELECT * FROM test_table;中身が確認できれば成功です。
おまけ
set mark csv on
Oracleに慣れている人がどう感じているか知りませんがデフォルトの表示形式見にくいので次のコマンドを叩いておくとよいと思います。
set mark csv on

コメント