はじめに
はじめまして!ナナシマと申します。
現在SES企業にて、Oracle Database案件をメインに従事しています。
Oracle経験は約3年となりますが、まだまだ新米ゆえ、目下勉強中の身です。
私がOracle Databaseの勉強をするにあたり、最初にぶつかったのは、全体像のイメージのしにくさでした。
加えて、参考書や公式ドキュメントの説明もお堅くてチンプンカンプン状態。
インスタンス?スキーマ?ユーザ?
で頭がパンクしました。
しかし、勉強を重ねるうち、ふと思ったんです。
「これ、お城にたとえたら、ちょっとわかりやすくね……?」
というわけで今回は、Oracle Database を「お城」に見立てて、その中でどんな人がいて、どんな部屋があって、どんなルールがあるのか、そして各要素がどのように動いてOracle Database上でデータ操作が行われるかを、
ざっくりと、ゆる〜く、ファンタジーに解説していきます。
⚠️ 注意
Oracle Database未経験~ある程度知識がある方が面白く読めるように書いています。
本記事だけでOracle Databaseおよび他DBを網羅しているわけではありません。
お城=Oracle Database?
この記事では、Oracle Databaseを前提に書いています。
MySQLやPostgreSQLとは一部構造が異なるのでご注意を⚠️
例えば「インスタンス」と「データベース」が別だったり、
「ユーザを作成すると同名のスキーマが自動で作られる」などは、Oracle特有の仕様です。
登場人物と役割(ざっくり編)
まずは、城の中に誰がいるかを整理してみましょう。
立場 | 例え | 実際のOracle用語 |
---|---|---|
🙏 神様 | 城そのものを創造した存在 |
SYS ユーザ |
👑 王様 | 絶対的な支配者 |
SYSTEM ユーザ |
🧓 執政官 | 実務を仕切る人 | DB管理者 |
🧍♂️ 使用人 | 各部屋の管理者 | 一般ユーザ |
🛡 騎士団 | 働く人たち | インスタンス |
🗣 王様(SYSTEMユーザ)「この城で全てを掌握しているぞ!」
🗣 執政官(DB管理者)「実際に動かしてるのはこっちですけどね」
⚠️ 補足
SYS ユーザはデータディクショナリ(城の設計図そのもの)を管理する神のような存在。普段は触ることはなく、実務では SYSTEM ユーザが「王様」として登場する。
アイテムと役割
次に、城内のアイテムとその役割を確認しましょう。
立場 | 例え | 実際のOracle用語 |
---|---|---|
📜 命令書 | 王様が出す指令書 | SQL文 |
🔑 鍵 | 部屋に入れるかどうかを決める | 権限(GRANT / REVOKE) |
🏠 部屋 | 巻物(データ)を置く空間 | テーブル |
🏯 建物 | 城内の使用人(ユーザ)が所有する館 | スキーマ |
各構成要素をお城に例えると…
🏯 データベース=お城の敷地
Oracle Database全体が、一国一城の主が治める巨大な城です。
高い城壁に守られた敷地内には、いくつもの部屋や建物があります。
登場人物と役割をもっと詳しく見てみよう
ここからは、Oracle Databaseを舞台にした「お城の世界」の中で、
それぞれのキャラ(=構成要素)がどんな働きをしているのか、深掘りしていきます。
🙏 神様(SYSユーザ):城を創った存在
-
お城そのものを作り上げた、創造主。
-
すべての権限を持つが、普段は滅多に姿を現さない。
-
実務で手を動かすことはほぼなく、日常は王様(SYSTEMユーザ)や執政官(DBA)が取り仕切る。
神様(SYSユーザ)
「我は設計図を司る者。めったに呼ぶでないぞ……」
👑 王様(SYSTEMユーザ):全権を持つ絶対的存在
- 城の最高権力者。すべての扉の鍵を持っている。
- 普段は表に出てこないけど、何かあったときに最後に動くのがこの人。
- 王様が怒るとヤバい(=操作ミスると破滅級)
王様(SYSTEMユーザ)
「この城はわしのものじゃ。扉も部屋も命令も、すべてワシが管理しておる。」
🧓 執政官(DB管理者):実務を仕切る管理者
- 王様に任命された「城の執政官(しっせいかん)」。
- 城の運営やメンテナンスを一手に引き受けてるのがこの人。
- テーブルの設置・削除、鍵(権限)配布、バックアップ、災害対策…なんでもやる。
執政官(DB管理者)
「城がうまく回ってるのは、私の裏方仕事のおかげですよ…」
🛡 騎士団(インスタンス):実働部隊
- 王様の命令を受けて動くのがこの騎士団。
- データの出し入れ、命令書(SQL)の実行、棚卸しなど、実際に手を動かしてる部隊。
- Oracleではこの騎士団(インスタンス)がいないとお城(DB)は動かない。
騎士団(インスタンス)
「命令書、受け取りました!SELECT文、実行します!!」
🧍♂️ 使用人(執事、料理人etc):一般ユーザ
- 城の中にある“建物”や“部屋”の持ち主。
- 自分の建物(スキーマ)に棚(テーブル)を置いて、巻物(データ)を管理する。
- 鍵を渡された範囲でしか動けない。大抵、特定の職務に特化してる。
使用人スミス
「私は巻物の保管係です。SELECTはできますが、INSERTはできません!」
アイテムと役割をもっと詳しく見てみよう
🔐 権限(GRANT/REVOKE):通行証と部屋の鍵
- 鍵をもらえないと、部屋に入ることも、物を動かすこともできない。
- 執政官(DB管理者)が「この人には鍵を渡してOK」と判断したら GRANT。
- 鍵を回収したら REVOKE。
執政官(DB管理者)
「彼には武器庫の出入りを許可します(GRANT)。ただし書庫はダメです。」
📜 SQL:王様の命令書・指令
- 「巻物の一覧を出せ!」(SELECT)
- 「新しい巻物を棚に置け!」(INSERT)
- 「この巻物はもういらぬ、捨てよ!」(DELETE)
すべてはこの命令書で騎士団(インスタンス)が動く。
騎士団(インスタンス)
「命令は一つ、ROLLBACKかCOMMITか…それが問題だ。」
🏠 部屋(テーブル)
- 部屋は データをしまう空間
- 中に棚(列)が並び、その棚に巻物や道具(行のデータ)が置かれる
- 部屋ごとに用途が違う(「従業員テーブル=名簿」「財産テーブル=台帳」など)
騎士団(インスタンス)
「ここは“従業員テーブル”の部屋!棚ごとに“名前”“誕生日”“職業”の巻物が並んでるぞ!」
🏡 建物(スキーマ)
- 建物はユーザが所有する館
- その中にいくつもの部屋(テーブル)がある
- Oracleでは「ユーザ作成時に同名のスキーマが自動で作られる」仕様(※ユーザとスキーマは概念としては別)
🧍♂️ 城の使用人
「ようこそ、私の館へ。この中には“給料テーブル”も“勤務記録テーブル”もあるんだ!」
ここまでのまとめ
Oracle Databaseを「お城」にたとえると…
👥 登場人物
🙏 神様(SYSユーザ):お城そのものを創造した存在。すべての根源であり、普段は表に出ないが、究極の権限を持つ。
👑 王様(SYSTEMユーザ):絶対的支配者。命令を出す存在。
🧓 執政官(DB管理者):王様の命令を受け、指令書(SQL)を作り、騎士団を動かす。鍵(権限)を管理する。
🛡 騎士団(インスタンス):命令書を受け取り、部屋を回ってデータを処理する。
🧍♂️ 使用人(一般ユーザ):自分の館を所有し、部屋を持ってデータを管理する。
🗝 アイテム
📜 命令書(SQL):王様や執政官が書く指令文。「SELECT=名簿を見よ」「INSERT=巻物を置け」
🔑 鍵(権限:GRANT / REVOKE):部屋や宝物庫への通行証。GRANT=許可、REVOKE=剥奪。
🏠 部屋(テーブル):棚(列)が並び、巻物(行)が置かれる空間。名簿や台帳など。
🏯 建物(スキーマ):使用人が所有する館。館ごとに複数の部屋を持つ。
ここまでで、登場人物とアイテム、役割をざっくりと解説しました。
キャラ設定とアイテムを整理したら、次は実戦です。
ミッション編
お城の仕組みと登場人物の役割がわかったところで、
いよいよ物語が動き出します。
ここからはOracle Database上での作業の際にお城の登場人物やアイテムがどのように動くか、ストーリー仕立てで解説します。
👨🍳ミッション1:料理長の給与を確認せよ!(SELECT)
城の玉座の間にて、王様が声を上げました。
👑 王様(SYSTEMユーザ)
「宴の準備を進めるには、料理長の給与を確認せねばならぬ。
執政官よ、この件を調べて参れ!」
その言葉を受け、執政官(DB管理者)は巻物を手に取り、
命令をSQLとして書き記します。
🧓 執政官(DB管理者)
「承知しました。では“従業員テーブル”から料理長の給与を確認いたしましょう。」
📜 命令書(SQL)
SELECT 名前, 給与
FROM 従業員テーブル
WHERE 職業 = '料理長';
🛡 騎士団(インスタンス)
「命令書、受け取りました!ただちに従業員テーブルを捜索し、
職業が『料理長』の者を探します!」
(テーブル=部屋の中から結果を発見)
🛡 騎士団の報告(実行結果)
名前 | 給与
-------+------
ジョン | 2500
🛡 騎士団(インスタンス)
「執政官殿!料理長ジョンの給与は 2500ゴールド でした!」
🧓 執政官(DB管理者)
「ほう、なかなかの額だな。宴を任せるに相応しい。」
👑 王様(SYSTEMユーザ)
「よしよし。これで宴も万全だ! …ところで、もう少し上げてもよいのではないか?」
💡 学習ポイント(SELECT)
🔍
SELECT
= 欲しい項目を指定
🗂FROM
= どのテーブルを探すか
🎯WHERE
= 条件を絞る
🗝 ここで覚える! SELECT = 条件を指定してデータを取り出す命令
👨🍳 ミッション2:料理長の給与を改訂せよ!(UPDATE)
👑 王様(SYSTEMユーザ)
「料理長ジョンの給与は2500か…。
宴の準備で大忙しだ、功績に報いるため、給料を上げてやれ!」
🧓 執政官(DB管理者)
「承知しました。では“従業員テーブル”の料理長の給与を更新しましょう。」
📜 命令書(SQL)
UPDATE 従業員テーブル
SET 給与 = 3000
WHERE 職業 = '料理長';
🛡 騎士団(インスタンス)
「命令書、受け取りました!
従業員テーブルにて料理長ジョンの給与を3000に更新いたします!」
🛡 騎士団の報告(実行結果)
1行が更新されました。
🛡 騎士団(インスタンス)
「執政官殿!料理長ジョンの給与を 3000ゴールド に変更しました!」
🧓 執政官(DB管理者)
「これで宴もさらに力が入ることでしょう。」
👑 王様(SYSTEMユーザ)
「ふむ、よきかな!…ところで他の者たちの給与も気になるのう?」
🧍♂️ 城の使用人(料理人仲間)
「えっ!? 私の分も確認してほしいです!」
🧓 執政官(DB管理者)
(心の声)「……次の命令もSQLで書かされそうだな。」
💡 学習ポイント(UPDATE)
📝
UPDATE
= 既存データを修正
✏️SET
= 新しい値を指定
🚨WHERE
= どの行を更新するか(忘れると全件更新!)
🗝 ここで覚える! UPDATE = 既存データを書き換える命令
🍷 ミッション3:新しい使用人を追加せよ!(INSERT)
王様のひと言
👑 王様(SYSTEMユーザ)
「宴の準備が進んでおるが、人手が足りぬ!
新たに料理人を雇ったゆえ、名簿に加えておけ!」
🧓 執政官(DB管理者)
「承知しました。では“従業員テーブル”に新しい料理人の情報を追加しましょう。」
📜 命令書(SQL)
INSERT INTO 従業員テーブル (名前, 職業, 給与)
VALUES ('マリア', '料理人', 1800);
🛡 騎士団(インスタンス)
「命令書、受け取りました!
従業員テーブルに新たな行を追加します!」
🛡 実行結果
1行が作成されました。
🛡 騎士団(インスタンス)
「執政官殿!新しい料理人マリアが名簿に加わりました!」
🧓 執政官(DB管理者)
「よし、これで宴の人手も増えて安心ですね。」
👑 王様(SYSTEMユーザ)
「はっはっは!宴はますます盛大になるぞ!」
🧍♀️ 新人料理人マリア
「これから頑張りますので、よろしくお願いします!」
💡 学習ポイント(INSERT)
✅
INSERT INTO
= 新しい行を追加
🏷️(列名, …)
= どの列に値を入れるか指定
📦VALUES
= 実際に追加するデータ
🗝 ここで覚える! INSERT = 新しい行を追加する命令
📖 最後の仕上げ:変更を確定せよ!(COMMIT)
🧓 執政官(DB管理者)
「さて、ここまでの変更をすべて正式に記録しよう。」
📜 命令書(SQL)
COMMIT;
🛡 騎士団(インスタンス)
「承知!城の記録書にすべての変更を刻みました。もう取り消せません!」
👑 王様(SYSTEMユーザ)
「よしよし、これで宴の準備は万全じゃ!」
💡 学習ポイント(COMMIT / ROLLBACK)
📖
COMMIT
= ここまでの変更を確定
🔄ROLLBACK
= 変更を取り消す(コミット前のみ有効)
⚠️UPDATE
/INSERT
の後は、忘れずに COMMIT!
🗝 ここで覚える! COMMIT = データ変更を正式に反映する命令
🏰 お城の物語の終わりに
こうして王様の命令のもと、
執政官(DB管理者)がSQLを命令書に書き、
騎士団(インスタンス)が実行し、
使用人(ユーザ)が暮らす館(スキーマ)や部屋(テーブル)でデータが動いていく――
あとがき
この記事をここまで読んでくださった方、本当にありがとうございます!
Oracle Databaseの仕組みは抽象的で最初はとっつきにくいですが、
こうして「お城」にたとえると少しイメージしやすくなるのではないでしょうか。
本記事が、Oracle学習の最初の一歩を楽しく踏み出す助けになれば幸いです。
本記事ではOracle DatabaseとSQLのさわりだけをザックリと解説しました。
Oracle Database城、まだまだ奥深いです!
ここまでお付き合いいただき、ありがとうございました!