そこが知りたい!?オラクルのお話~その1~
Posted: January 30, 2014
オラクルDBについてのお話。
僕自身がつまづいたというかモヤっとしてた部分を、
今の時点での僕の認識で説明していきます。
オラクルDBの本当に初歩的なお話になります。
オラクルDBを始めた頃、とにかく色々な言葉が僕の頭を悩ませました。
オラクルに接続ってなに?
sqlplusって?
インスタンスって?
ユーザー、スキーマ、それって何?
などなど。
今回はこれらについて少しでも分かりやすく説明できたらと、いや、僕の言葉で伝えることができればと思います(実はスキーマについては今回は説明してませんw)。
ので、認識が違った場合は指摘いただければ幸いです。
では始めましょう。
まず、オラクルDBに接続するまでの流れについて。
オラクルDBには色々な理念のもと、いくつか決まり事があります。
- クライアントプログラムとしてsqlplusを用いて接続すること
- 接続する際にはユーザー名、パスワードが必要なこと
- オラクルDBを起動するには特殊な権限が必要なこと
- オラクルDBとのやりとりはそれぞれのデータベースに対応したインスタンスを通して行われる事
ざっとこんな感じです。
詳細は次回にするとして、今回はローカルマシン上(linux) にあるオラクルDBをローカルマシン(linux)から起動するまでの流れを説明します。
まず初めに、sqlplusを起動してオラクルDBでやりとりをするまでの、かなりおおまかな流れは次のようになってます。
- sqlplusを起動してユーザ名、パスワード、接続したいDBの名前を入力
- 接続したいDBのインスタンスが起動
- インスタンスを通してDBとやりとり
では、もう少し詳しく説明していきます。
1:sqlplusでオラクルに接続
オラクルDBに接続するために、ターミナル上でsqlplusプログラムを起動します。
sqlplusプログラムを起動する際には一般にはユーザ名、パスワードが必要です。
が
特殊な権限(SYSDBA権限)を持つユーザーSYS以外は、
ユーザ名、パスワードを入力してもオラクルデータベースが起動していない場合にはインスタンスが起動できないため、接続できません。
ではどうするか。そうです、DBを起動するためには、
ユーザーSYSで接続
すれば良いのです。
コマンドはこちら。
[OS認証が機能する場合]
$ sqlplus / as sysdba
[OS認証が機能しない場合]
$ sqlplus SYS/SYSのパスワード as sysdba
ここで注意が必要なのですが、DBが起動していない状態で、上記のコマンドで接続すると、オラクルDBに接続はできますが、インスタンスは起動していません。
イメージとしては、オラクルDBに入ったものの、DBとのやりとりをしてくれる担当者が不在という感じでしょうか。SYSユーザーのような特殊な権限を持っていないユーザーは、DBが起動されてないとそもそもオラクルDBに入れないですし、DBが起動していたとして、オラクルDBに入った場合には必ず担当者(インスタンス)が存在します。
2:インスタンスの起動
さて、SYSユーザーでオラクルDBに接続した後は、DBとのやりとりを行ってくれるインスタンスを起動します。コマンドは以下の通り。
SQL> startup nomount
startupはデータベースをマウント、オープンするコマンドですが、後ろにオプションを指定することができます。
nomountオプションはインスタンスは起動するが、DBはマウントもしないし従ってオープンもしないという意味です。
ちょいまち、マウント?オープン?ナニソレと思いますのでここで説明します。オラクルDBは次の順序を踏んで起動されます。
- インスタンスの起動
- DBのマウント(インスタンスにDBを認識させる)
- DBのオープン(インスタンスを通してのやりとりができる状態)
マウントという言葉が理解できる方は割とすんなり理解できるかと思います。
ようするに、DBを起動するには、とあるインスタンスを通してDBをマウントし、オープンさせなければいけないです。ってそのままですねw
まーstartupコマンドだけでDB起動までしてくれて便利なのですが、マウント、オープンという流れを理解してもらうために一つづつ段階を踏んでいきたいと思ってこういう流れにしました。
おいおい、それは良いとしても、インスタンスが起動って、どのDBとやりとりするインスタンスが起動してんの?って思ったと思います。これはsqlplusで接続する際にDBを指定していない場合には、環境変数などであらかじめ設定した、ORACLE_SIDなどに書かれているDBとのやりとりをするインスタンスが起動されます。
3:DBのマウント
はてさて、次はDBをマウントさせましょう。コマンドは以下の通りです。
SQL> alter database mount;
これでマウントされます。
あれ?
startup mount
こんな感じじゃダメなの?と思う方いるかもしれません。
実はstartupコマンドは一度しか実行できないのです(嘘かもw
試しに打ってみれば分かると思いますが、エラーが出るかと思います。
一度きりのコマンドなのですね(本当かはまだ調べてませんw
というわけで、alter database というコマンドを用いてるのです。
3:DBの起動
さて、では最後にDBをオープンしましょう。コマンドは以下の通りです。
SQL> alter database open;
(あれ、alter databaseコマンドは何度も使えるんだ。。。
という心の声が聞こえてきます。分かります。
使えるんですねw
とまあ以上で本当にざっくり、細かい情報は恐ろしいまでに削ぎ落としてオラクルDBの起動までの流れを説明しました。
自分的にはこの部分までがオラクルDBの仕組みの中で不鮮明な部分だったので今回書いてみました。
さて、次回から何を書こうか。。。
あ、そもそもこういうの書くの初めてなので間違ってる可能性もあると思いますし、
その場合はご指摘、アドバイスいただけるとありがたいです。
いやーこういうのを書くのもそうですけど分かりやすく伝えるって本当に難しいな。。。