Oracleの検証環境を作る

概要

Windows上にOracleサーバーを立てる方法の解説です。

背景

Oracleのインストールって毎回すんなりいかなくないですか?

やりかた

試用版のOracleをダウンロードする

無償で使えるOracle Database Express Editionをダウンロードします。

Oracle Database Express Edition | Oracle 日本
Oracle Database Express Edition(XE)は、世界をリードするデータベースを無償で開発、デプロイ、および配布できるエディションです。

実際にプロジェクトで使うエディション、バージョンが決まっているのであれば、以下からダウンロードできます。(要アカウント登録)

マニュアル | Oracle 日本
マニュアル

インストールする

その前に今回インストールする環境の説明です。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内の管理者補佐)
      • アプリケーションユーザー

コンテナやプラガブル・データベース(PDB)が出てきて分かりにくいですが、だいたい同じものを指すので同じだと思ってよいです。

それぞれのコンテナの役割は次のようになっています。

  • 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;

READ WRITEでない場合は次のコマンドで起動させます。

ALTER PLUGGABLE DATABASE XEPDB1 OPEN;

今はルートコンテナにいるので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

コメント