Blank?=False

ゆるゆる仕事したいフリーランスエンジニアの記事

Mac OSXにOracleをインストールしてみた(データベース作成?編)

f:id:stonebeach-dakar:20160424222032j:plain

前回に引き続き、Oracleデータベース構築をやっていきます。

色々調べてみた結果、Oracle公式の入門資料が大変参考になりました!

今さら聞けない!? Oracle入門 概要編
http://www.oracle.com/technetwork/jp/ondemand/db-basic/0413-1330-oracle-beginner-overview-366289-ja.pdf

今さら聞けない!? Oracle入門 ~アーキテクチャ編~
http://www.oracle.com/technetwork/jp/ondemand/db-basic/0413-1330-oracle-beginner-overview-366289-ja.pdf

意外と簡単!? Oracle Database 11g Release 2 - データベース構築から運用まで - 「データベース構築編」
http://www.oracle.com/technetwork/jp/articles/selfstudy-win-11-131931-ja.pdf

Oracleアーキテクチャ

Oracleは、内部アーキテクチャとしてサーバーストレージという概念がある。
サーバーSQLの問い合わせに応じてストレージからデータを取り出し、問い合わせ元に返すというイメージ。
f:id:stonebeach-dakar:20160425192406p:plain

サーバーインスタンス(プロセスとメモリ)単位で動作し、同時に動くインスタンスには制限がかけられる。
サーバーデータベースマウントすることで初めてSQLで問い合わせが出来るようになる。
ざっと書いているけど、まだあんまりイメージは沸かない。

ちなみに自分的にMySQLアーキテクチャはこんなイメージ。
f:id:stonebeach-dakar:20160425193143p:plain もしかしたら違うかもしれない。また調べてみよう。

データベース構築

Oracleのデータベース構築方法は、CUISQLを使って作成する方法、DBCAなどのGUIツールを使って作成する方法がある。
今回は、CUIで作ってみる。

ここを参考に、環境変数や初期パラメータなどを作成する。
Oracle Databaseの作成および構成

そしてSTARTUP UNMOUNTでマウント無しでインスタンスを作成してみる、しかし・・・ッ!

SQL> STARTUP NOMOUNT
ORA-44410 XE edition single instance violation error

XEエディションのシングルインスタンスエラー。
どういうことだろうとググッてみると、XEエディションのライセンスに単一のインスタンスのみに制限、とある。
(下記リンクの権利許諾を参照)
Oracle Database Express Editionライセンス情報

えーと、つまり、もう何かインスタンスが起動しているってこと?
すでに起動しているインスタンスを探すコマンドを打つもエラー。八方塞がりでVMを試しに再起動してみて、
再度SQL PLUSを起動してCONNECTして再びSTARTUPしてみると・・・

SQL> STARTUP NOMOUNT
ORA-01081: cannot start already-running ORACLE - shut it down first

現象が変わった。
オラクルが起動できないというエラー。メッセージの通りSHUTDOWN NORMALでシャットダウンしてみると、

SQL> shutdown normal
Database closed.
Database dismounted.
ORACLE instance shut down.

なんかデータベースが閉じた。

とりあえずSTART UP NOMOUNTしてみる。

SQL> startup nomount
ORACLE instance started.

Total System Global Area  204591104 bytes
Fixed Size          2225032 bytes
Variable Size         142609528 bytes
Database Buffers       54525952 bytes
Redo Buffers            5230592 bytes

次はちゃんとインスタンスが作成できました。
そしてデータベースを構築するためにCREATE DATABASEで作成してみる。

SQL> CREATE DATABASE mynewdb
  2  ;
CREATE DATABASE mynewdb
*
ERROR at line 1:
ORA-01501: CREATE DATABASE failed
ORA-01504: database name 'MYNEWDB' does not match parameter db_name 'XE'

db_name XEと名前が違うよ!というエラーが発生。

もしかして・・・すでにXEというデータベースがある?

再度SHUTDOWNしてXEデータベースをマウントしてみると、

SQL> shutdown normal
ORA-01507: database not mounted


ORACLE instance shut down.
SQL> STARTUP mount xe
ORACLE instance started.

Total System Global Area  204591104 bytes
Fixed Size          2225032 bytes
Variable Size         142609528 bytes
Database Buffers       54525952 bytes
Redo Buffers            5230592 bytes
Database mounted.

マウントできました。
XEというデータベース、環境変数にもどこにもなかったような・・・。

とりあえず、データベースをオープンして、当初の目的であるテーブルを作成してみると、無事できました。

SQL> alter database open;

Database altered.

SQL> CREATE TABLE tbl_hello
  2  (id VARCHAR(4) NOT NULL);

Table created.

まとめ

どうやら、XEエディションは基本的にWebUIでデータベースを制御するみたいです。

Oracle® Database Express Editionスタート・ガイド

最初から会ったと思われるXEデータベースの件についても、改めて調査してみたいところです。

とりあえず、ブログだけじゃなくてちゃんと公式ガイド見ような、俺!
お後がよろしいようで。ちゃんちゃん。