Windows7 で Oracle 12c を使う (環境構築)
前回の記事で Windows7 に Oracle12c をインストールした。
今回はプラガブル・データベースにユーザを作り、テーブルを1つ作るところまでやってみる。
目次
- プラガブル・データベースって何?
- でわでわさっそく。
- 1. Oracle 起動状態の確認
- 2.
tnsnames.ora
の修正 - 3. PDB のオープン
- 4. ユーザーの作成
- 5. PDBORCL に接続
- 6. テーブル作成、データの登録、データの取得
プラガブル・データベースって何?
インストール時に「グローバル・データベース名」に「orcl
」、「プラガブル・データベース名」に「pdborcl
」というデフォルト名をそのまま設定していたもの。この「プラガブル・データベース」って何?というところから分かっていないと、次の作業が進められない。
プラガブルデータベースの概念は以下のサイトが分かりやすかったので引用する。
Oracle 12cでは、まず「マルチテナントコンテナデータベース」(CDB)と呼ばれる親DBが存在し、その下に「プラガブルデータベース」(PDB)と呼ばれる子DBが存在します。
PDBは仮想DBのようなもので、1つのインスタンス上で複数作成・起動することができます。そしてCDBとPDBには以下のルールがあります。
- 通常のローカル接続(11gR2までと同じように接続)した場合、CDBに接続される。
- CDBにはユーザスキーマを作成することはできない。(ORA-65096となる)
- ユーザスキーマはPDBに接続して作成する必要がある。
- CDBからはユーザスキーマが見えない。
Oracle 11g までは、データベースごとにプロセスが分かれており、制御ファイルやログファイルもデータベースごとにそれぞれ作成するつくりになっていた。
これが Oracle 12c では、コンテナデータベース (CDB) 1つがプロセスとして起動しており、その下に仮想的な DB といえるプラガブルデータベース (PDB) が複数接続できる、ということ。「プラガブル」というだけあって、それぞれのプラガブルデータベースは、他のコンテナデータベースに繋ぎ直したりもできるみたい。
で、上述の引用の中にもあるとおり、ユーザスキーマを作る先はプラガブルデータベースであって、コンテナデータベースには作れないようだ。
ということで、冒頭に「プラガブル・データベースにユーザを作り」と書いた次第。
詳細な動作は以下のページも参考になる。
でわでわさっそく。
では、さっそく環境構築を進めていく。
大部分は以下のサイトに沿って作業を進めた。
そのため、手順も引用。
- Oracle起動状態の確認
- tnsnames.oraの修正
- PDBのオープン
- ユーザーの作成
- PDBORCLに接続
- テーブル作成、データの登録、データの取得
1. Oracle 起動状態の確認
「管理ツール」→「サービス」より、以下を「起動」しておく。名称はデフォルト設定でインストールしたときの名称なので、各自読み替える。
- OracleServiceORCL (OracleService)
- OracleOraDB12Home1TNSListener (TNSListener)
2. tnsnames.ora
の修正
自分はインストール先フォルダを変更したので多少ルート部分が違うが、C:\Oracle\product\12.1.0\dbhome_1\NETWORK\ADMIN\
にある tnsnames.ora
を開いて以下を追記する。これもデフォルト設定でインストールした前提なので、変更している場合は適宜変更する。
PDBORCL =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = PDBORCL)
)
)
3. PDB のオープン
コマンドプロンプトより以下のとおり入力し、SQL*Plus に接続する。
Sqlplus system/password as sysdba
よく分かってないんだけど、system ユーザの後ろの password
部分は、何に変えても接続できた。デフォルトのパスワードが「password」ってワケではない様子?あとで調べる。
この時点では、CDB (コンテナ) に接続している。Show con_name;
で確認すると CDB$ROOT
と返ってくるので、コンテナに接続していると分かる。
SQL*Plus に接続したら、以下の SELECT 文で PDB のオープン状態を確認する。
SELECT NAME, OPEN_MODE FROM V$PDBS;
「PDBORCL」は「MOUNTED」になっているはず。この状態ではオープンしていないので、以下の SQL でオープンする。
ALTER PLUGGABLE DATABASE PDBORCL OPEN;
(この部分だけ、上述の参考サイトでは記載の SQL が誤っていたので、「Oracle12cでプラガブル・データベース(PDB)に接続しなおす方法 - 大人になったら肺呼吸」を参考にした)
もう一度さきほどの SELECT NAME, OPEN_MODE FROM V$PDBS;
を入力すると、今度は「PDBORCL」が「READ WRITE」になっているはず。これで PDB がオープンされ接続できるようになる。
なお、PDB がオープンしていない状態で PDB へ接続しようとすると、ORA-01033 というエラーが出る。このエラー内容では分かりづらいので、まずは PDB がオープンされているかを確認する習慣を付けたい。
4. ユーザーの作成
次に、CDB から接続先を PDB の方に変えて、ユーザを作る。
ALTER SESSION SET CONTAINER = PDBORCL;
この状態で Show con_name;
を確認すると PDBORCL
が返ってくるので、プラガブルデータベースに接続していることが分かる。
以下のようにユーザを作る。
-- testUserの作成
CREATE USER testUser
IDENTIFIED BY "password"
DEFAULT TABLESPACE users
TEMPORARY TABLESPACE temp;
-- testUserに権限を付与
GRANT CONNECT TO testUser;
GRANT CREATE TABLE TO testUser;
-- testUserの表領域usersに対する使用用容量の制限値 (QUOTA) を変更
ALTER USER testUser QUOTA UNLIMITED ON users;
これでユーザの作成と設定は完了。
5. PDBORCL に接続
一旦 quit
(exit
) で接続を切り、作成したユーザを使って PDB の方に直接接続してみる。ココで書いたネットサービス名 @PDBORCL
が、tnsnames.ora
に追記した接続記述子に変換されるワケである。
Sqlplus testUser/password@PDBORCL
無事接続できたら OK。
6. テーブル作成、データの登録、データの取得
以降はこれまでの Oracle と同様、テーブルを作ってデータを入れたり取得したり、ができるはずだ。
-- テーブルの作成
CREATE TABLE test_tbl (
id NUMBER,
name VARCHAR2(10)
);
-- データの登録
INSERT INTO test_tbl VALUES (1, 'abc');
-- データの取得
SELECT * FROM test_tbl;
ということで、Oracle 12c からは DB の概念が少し変わっているが、一度理解すればなんてことないし、より合理的で使いやすくなっていると感じる。