oracle databaseを用いて学ぶrdbmsの基本 (抜粋版) - jpoug oracle database入学式...
TRANSCRIPT
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 1 Copyright © 2016 CO-Sol Inc. All Rights Reserved. Copyright © 2016 CO-Sol Inc. All Rights Reserved.
抜粋版
Oracle Databaseを用いて学ぶ RDBMSの基本
2016年6月8日 株式会社コーソル 渡部 亮太
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 2
自己紹介+所属会社紹介
• 渡部 亮太(わたべ りょうた)
– JPOUG 共同創設者、ボードメンバー
– Oracle ACE
– 著書「プロとしてのOracleアーキテクチャ入門 [第2版]」 「プロとしてのOracle運用管理入門」
– ブログ「コーソルDatabaseエンジニアのBlog」 http://cosol.jp/techdb/
• 株式会社コーソル
– 「CO-Solutions=共に解決する」の理念のもと、Oracle技術に特化した事業を展開中。心あるサービスの提供とデータベースエンジニアの育成に注力している
– 社員数: 132名 (2016年5月時点)
– ORACLE MASTER Platinum 11g 取得者数 44名 ORACLE MASTER Platinum 12c 取得者数 21名 (現時点でおそらく)取得者数 日本 No.1
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 3
本セミナーについて
• データベース知識ゼロの方に向けた入門者・新人向けセミナーです
• 概要および重要事項の概念を理解することを重視して構成しています。細かい例外事項を省き、説明を簡略化しています
• 要所要所で復習問題を出題します。理解度の確認、記憶の定着にお役立てください
• 原則的に、Oracle DatabaseのバージョンやOSの種類に依存しない内容です
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 4
Agenda
1. なぜOracle Databaseを使ってRDBMSを学ぶのか
2. データモデルでデータの整合性を維持する
3. シンプルでパワフルなデータアクセス専用言語SQL
4. トランザクションと堅牢なデータ保護
5. RDBMSがデータベースを障害直前の状態に復旧できる仕組み
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 5 Copyright © 2016 CO-Sol Inc. All Rights Reserved.
なぜOracle Databaseを使って RDBMSを学ぶのか
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 6
RDBMSとは
• データベースを作る・使うためのソフトウェア
• Relational DataBase Management Systemの略
• 最近のITシステム※では、RDBMSを使ってデータを管理するのが一般的
• データを表(テーブル)形式で保管する
• データ操作用の言語SQLを用いて、データの検索および更新を実行できる
テーブル
id ename ・・・
87 Steven ・・・
204 Hermann ・・・
ABC xxx ・・・
クライアント
アプリケーション
id ename ・・・
87 Steven ・・・
204 Hermann ・・・
205 Shelly ・・・
SELECT …
① SQL発行
②検索結果
RDBMS
※: 企業向けシステムやWeb系システム等
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 7
RDBMSを使ってデータを管理する理由
• データの整合性を維持しやすい → 不正なデータが紛れ込みにくい 長い期間使われるシステムで、データ品質を維持する ことはとても重要なこと
• 簡単にデータを参照・更新できるSQLという専用言語 → 使いやすくパワフル [テーブルtab0の列A=1のデータを参照する例]
SELECT * FROM tab0 WHERE A = 1;
• 信頼性のある更新処理を実現するトランザクション機能 → 障害発生時でも整合性を維持できる
• 障害発生時でも、格納したデータが容易に失われない → サーバダウン、ディスク障害が発生しても大丈夫
• セキュリティ、チューニングなど多くの周辺機能がある
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 8
Oracle Databaseとは
• Oracle Databaseは世界および国内で50%近いシェア を持つ商用RDBMS製品(販売金額ベース)
• WindowsやLinux、商用UNIXなど主要なOSに対応
• RDBMSの基本機能に加えて、パフォーマンス、セキュリティ、高可用性、災害対策構成など、多くの高度な機能をもつ
• 企業向けシステムを中心に非常に多くのシステムで使用されている
• 企業向けシステムにかかわるエンジニアにとっては、 「RDBMS=Oracle Database」と言っても過言ではない
※: Web系システムにかかわるエンジニアにとっては、「RDBMS=MySQL」かもしれない
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 9
Oracle DatabaseでRDBMSを学びましょう
• RDBMSは、ITシステムで必要不可欠といっても過言ではない
• 同様に、ITエンジニアにとってもRDBMSへの理解は 必要不可欠
• 企業向けシステムで、もっとも広く使用されているRDBMSはOracle Database
• → Oracle DatabaseでRDBMSを学びましょう! (企業向けシステムに関わるITエンジニアは特に)
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 10
復習問題 - RDBMSとOracle Database
• 以下の設問のうち、正しいものを選びなさい (複数選択される場合あり)
1. RDBMSには、不正なデータを排除する仕組みがある
2. RDBMSのデータを参照・更新するには、Javaという専用言語を使う
3. Oracle DatabaseはWindowsに対応している
4. Oracle Databaseは無償で使用できるオープンソース製品である
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 11
復習問題 - RDBMSとOracle Database
1. RDBMSには、不正なデータを排除する仕組みがある ⇒ ○:テーブル構造や制約に合致しないデータは登録不可。詳細は次の章にて
2. RDBMSのデータを参照・更新するには、Javaという専用言語を使う ⇒ ×:SQLという専用言語を使う。JavaからSQLを実行することは可能
3. Oracle DatabaseはWindowsに対応している ⇒ ○ Windows、Linux、商用UNIXに対応
4. Oracle Databaseは無償で使用できるオープンソース製品である ⇒ × 有償の商用RDBMS製品で、非オープンソース ただし、個人的な開発用途であれば無償で使用できるライセンス(OTNライセンス)や、機能限定・サポートなしの無償版(Express Edition)もあります
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 12 Copyright © 2016 CO-Sol Inc. All Rights Reserved. Copyright © 2016 CO-Sol Inc. All Rights Reserved.
抜粋版
データモデルで データの整合性を維持する
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 13
リレーショナルDBへデータを格納する前に
• データをリレーショナルデータベースに格納する前に、データの構造を決めておく必要がある
• データ構造は「テーブル形式」で与える
• データ構造に反するデータは格納できない
従業員テーブル
部署ID 部署名 エリアID
1001 経理部 101
1002 開発部 101
1003 営業部 102
従業員番号 氏名 役職ID 所属部署ID
87 山田一郎 4 1001
204 伊藤次郎 4 1002
205 藤原三郎 3 1003
部署テーブル
エリアID エリア名 機密区分
101 本社6F A
102 本社7F東 B
103 本社7F西 B
104 本社5F応接 C
エリア テーブル
役職テーブル
役職ID 役職名
1 社長
2 部長
3 課長
4 社員
従業員番号: 203 氏名: 山本四郎 役職ID: 4 所属部署ID: 1002
従業員番号: 203 氏名: 山本四郎 役職ID: 4 所属部署ID: 1002 身長: 170
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 18
データモデルによるデータ整合性の維持
以下のようなデータは登録できない
• テーブルに存在しない列を含むデータ
• データ型にマッチしない列値を持つデータ
• 列の制約に反する列値を持つデータ
従業員テーブル 従業員番号 氏名 役職ID 所属部署ID
87 山田一郎 4 1001
204 伊藤次郎 4 1002
205 藤原三郎 3 1003
従業員番号: 2001 氏名: 山本四郎 役職ID: 4 所属部署ID: 1002 身長:170
従業員テーブル 従業員番号 氏名 役職ID 所属部署ID
87 山田一郎 4 1001
204 伊藤次郎 4 1002
205 藤原三郎 3 1003
従業員番号: ABC 氏名: 山本四郎 役職ID: 4 所属部署ID: 1002
エリアID: 105 エリア名: BBB町 機密区分: D
エリアID エリア名 機密区分
101 本社6F A
102 本社7F東 B
103 本社7F西 B
104 本社5F応接 C
エリアテーブル
身長という列なし
従業員番号列は 数値型
機密区分列には A or B or C の
チェック制約あり
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 27
復習問題 - テーブル定義とデータの整合性
• 以下の設問のうち、正しいものを選びなさい (複数選択される場合あり)
1. RDBMSのデータ構造は、木構造のツリー形式で与える
2. テーブルの作成時に、列のデータ型を指定する必要はない
3. 列のデータ型の分類には、数値、文字列、日付・時刻などがある
4. 1つだけであれば、制約に反するデータを格納できる
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 28
復習問題 - テーブル定義とデータの整合性
1. RDBMSのデータ構造は、木構造のツリー形式で与える ⇒ ×:テーブル形式で与える
2. テーブルの作成時に、列のデータ型を指定する必要はない ⇒ ×:テーブルの作成時に、列名および列のデータ型を指定する必要がある
3. 列のデータ型の分類には、数値、文字列、日付・時刻などがある ⇒ ○
4. 1つだけであれば、制約に反するデータを格納できる ⇒ ×:1つだけでもダメ
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 29
復習問題 - 制約
• 以下の設問のうち、誤っているものを選びなさい (複数選択される場合あり)
1. あるテーブルのエリアID列が主キーである場合、そのテーブル内にエリアID=103を持つ行は1つまたは0つ存在する
2. NOT NULL制約が設定された列には、"NOT NULL"という文字列しか設定できない
3. 一意制約と主キー制約は同じ機能を持つ
4. 外部キー制約は親子関係にあるテーブル間に設定される制約である
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 30
復習問題 - 制約
1. あるテーブルのエリアID列が主キーである場合、そのテーブル内にエリアID=103を持つ行は1つまたは0つ存在する ⇒ ○:2つあると主キー値で行を特定できないのでNG
2. NOT NULL制約が設定された列には、"NOT NULL"という文字列しか格納できない ⇒ ×:NOT NULL制約は、NULL値の格納を禁じる制約
3. 一意制約と主キー制約は同じ機能を持つ ⇒ ×:一意制約+NOT NULL制約 ≒主キー制約
4. 外部キー制約は親子関係にあるテーブル間に設定される制約である ⇒ ○:親表の列にないデータを子表の列に格納できない制約
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 31 Copyright © 2016 CO-Sol Inc. All Rights Reserved.
シンプルでパワフルな データアクセス専用言語SQL
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 32
RDBMSとSQL
• リレーショナルデータベースに格納されたデータは、SQLを用いてデータの検索および更新できる
• SQLは国際標準化団体で標準化されている
• Oracle DatabaseもSQL標準に準拠している
– SQL標準と「おおむね」一致。完全に同じというわけではない
– 他のRDBMS製品も似たようなスタンス
テーブル
id ename ・・・
87 Steven ・・・
204 Hermann ・・・
ABC xxx ・・・
クライアント
アプリケーション
id ename ・・・
87 Steven ・・・
204 Hermann ・・・
205 Shelly ・・・
SELECT …
① SQL発行
②検索結果
RDBMS
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 33
SQL文の分類
• DML(Data Manipulation Language)
– データの検索と更新を行う
– SELECT文、INSERT文、UPDATE文、DELETE文など
• DDL(Data Definition Language)
– 表、インデックス、ビューなどの作成、変更、削除などを行う
– CREATE TABLE文、ALTER TABLE文、CREATE INDEX文、 CREATE VIEW文など
• DCL(Data Control Language)
– 権限設定・トランザクション制御などを行う
– GRANT文、REVOKE文、BEGIN文など
本章ではDMLの概要を説明します
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 45
復習問題 - SQL
• SQLに関する説明で、誤ったものを選んでください (複数選択される場合あり)
1. 条件を指定してデータを検索するには、IF句を使用する
2. データを挿入(追加)するには、APPEND文を使用する
3. DELETE文でWHERE句の指定を省略すると、 「すべてのデータを削除してよいですか? (Yes/No)」 と確認ダイアログが表示される
4. UPDATE FORCE文を使用すると、既存のデータを制約に違反するデータへ更新できる
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 46
復習問題 - SQL
1. 条件を指定してデータを検索するには、IF句を使用する ⇒ × WHERE句を使用する なお、WHERE句はSELECTだけでなく、UPDATEやDELETEでも指定できる
2. データを挿入(追加)するには、APPEND文を使用する ⇒ ×: INSERT文を使用する
3. DELETE文でWHERE句の指定を省略すると、 「すべてのデータを削除してよいですか? (Yes/No)」 と確認ダイアログが表示される ⇒ ×:確認ダイアログは表示されず、すべてのデータが削除される
4. UPDATE FORCE文を使用すると、既存のデータを制約に違反するデータへ更新できる ⇒ ×: 制約に違反するデータへ更新する方法はない UPDATE FORCE文は存在しない
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 47 Copyright © 2016 CO-Sol Inc. All Rights Reserved.
トランザクションと 堅牢なデータ保護
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 48
トランザクションとは
• RDBMSで実行される更新処理は、「トランザクション」として扱われます
• トランザクションとは、端的に言うと「信頼性のある更新処理」です 信頼性のない更新処理 信頼性のある更新処理
エラー発生時の 振る舞い
更新結果が中途半端になる場合がある
更新処理はすべて取り消され、更新前の状態に戻る
更新処理実行後のデータ整合性
整合性が崩れる場合がある
更新前に整合性が取れているならば、更新後も整合性を維持する
同時に更新処理を実行した場合の振る舞い
更新処理が相互に干渉して、データ整合性が維持できない場合がある
それぞれの更新処理は相互に干渉しない、隔離された状態となる
致命的障害(サーバダウン、ディスク破損)
発生時のデータロス
完了した更新が失われる場合がある
完了した更新は適切に記録され、容易に失われることはない
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 52
NAME COL1
scott 1025
tiger 999
tom 25
:
james 8777
Atomicityが無いとエラー処理がとても大変
• Atomicityがない = 中途半端な状態が発生しうる • エラーが発生したら、何が成功して何が失敗したかを
チェックし、その状態に応じて対処策となる処理を人間が判断・実行しなければならない ⇒データ量やSQLの数が多い場合は現実的に不可能!
UPDATE xxx SET col1 = col1 +1;
処理失敗…
NAME COL1
scott 1024
tiger 999
tom 24
:
james 8777
NAME COL1
scott 1025
tiger 1000
tom 24
:
james 8777
NAME COL1
scott 1025
tiger 999
tom 24
:
james 8777 中途半端、しかも状態はいろいろ…
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 55
復習問題 - トランザクション
• トランザクションに関する説明で、正しいものを選んでください。(複数選択される場合あり)
1. RDBMSで実行される更新SQLの処理には、トランザクションとして扱われる処理と、扱われない処理がある
2. トランザクションが持つ4つの特性を略して、アルカリ特性とよぶ
3. ALL or NOTHINGを実現するトランザクションの特性をConsistencyと呼ぶ
4. COMMIT文でトランザクションを確定した後でROLLBACK文を実行しても、更新処理を取り消すことはできない
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 56
復習問題 - トランザクション
1. RDBMSで実行される更新SQLの処理には、トランザクションとして扱われる処理と、扱われない処理がある ⇒ ×:更新SQLの処理はすべてトランザクションとして扱われる*
2. トランザクションが持つ4つの特性を略して、アルカリ特性とよぶ ⇒ ×:ACID特性
3. ALL or NOTHINGを実現するトランザクションの特性をConsistencyと呼ぶ ⇒ ×: Atomicity(原子性)
4. COMMIT文でトランザクションを確定した後でROLLBACK文を実行しても、更新処理を取り消すことはできない ⇒ ○:トランザクションを確定する前であれば、取り消すことができる
*:厳密には、トランザクションの一部の特性を持たない例外的な処理も存在する( NOLOGGING操作など)
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 57 Copyright © 2016 CO-Sol Inc. All Rights Reserved.
RDBMSがデータベースを 障害直前の状態に復旧できる仕組み
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 58
データベースに格納されたデータの重要性
• データベースに格納されたデータは極めて重要な資産
– データベースにはビジネスに直結するデータが格納されている
– 失われたら二度と取り戻すことができない
• Oracle Databaseは障害発生時でも、データが失われないような仕組みが用意されている
– ACID特性でいうところのDurability
障害 障害発生時の復旧
サーバダウン Oracleのダウン
異常終了により、障害発生直後は内部的なデータの整合性が取れていない状態となる 次回正常起動時に、整合性を自動的に復旧できる (クラッシュリカバリ)
ディスク破損 破損により、データベースを構成するファイルの一部ないし全部が失われた状態となる バックアップファイルを戻し、リカバリ処理を実行して、障害発生直前の状態に復旧できる (メディアリカバリ)
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 61
「バックアップ戻し」だけの復旧作業の限界
• 単にバックアップを戻すだけでは、 バックアップ取得時点の状態にしか復旧できない
• 以下の例では、20:00~23:00に実行された更新は失われる
障害 20:00相当
の状態
23:00 20:00
ファイルを コピー
20:00時点の バックアップ
バックアップ でファイル 上書き
1. バックアップ 2. 障害発生 3. リストア
更 新
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 62
障害発生直前の状態への復旧が可能
• リストア(バックアップの戻し)後に、リカバリを実行することで、障害発生直前の状態に復旧できる
• リカバリの元ネタはアーカイブREDOログファイルとオンラインREDOログファイル
障害 20:00相当
の状態 REDOデータ適用による
データベースの更新 23:00相当
の状態
アーカイブREDO ログファイル
20:00 23:00 23:00
REDOに記録 された更新 を適用
20:00
ファイルを コピー
オンラインREDO ログファイル 20:00時点の
バックアップ
バックアップ で上書き
REDOに記録 された更新 を適用
1. バックアップ 2. 障害発生 3. リストア 4. リカバリ
更 新
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 67
RMANによるバックアップの取得
• RMAN: Oracle Databaseに含まれるバックアップ取得および管理ツール
• バックアップの取得例
• 非常に簡単 – データベースを構成するファイルを自動的に認識
– 手順がシンプル。基本的なバックアップであれば、backup databaseコマンドのみでOK
$ rman TARGET / Recovery Manager: Release 12.1.0.2.0 - Production on 月 4月
20 13:57:43 2015 :
RMAN> backup database; backupが開始されました(開始時間: 15-04-20)
: backupが完了しました(完了時間: 15-04-20)
RMAN>
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 68
復習問題 -バックアップとアーカイブログモード
• バックアップとアーカイブログモードに関する説明で、正しいものを選んでください。(複数選択される場合あり)
1. Oracleはどのような運用モードであっても、障害発生直前までの復旧が可能である
2. Oracleはどのような運用モードであっても、オンラインでのバックアップ取得が可能である
3. バックアップを元の場所に戻すことで、障害発生直前の状態への復旧作業は完了である
4. RMANでデータベース全体のバックアップを取得するとき、データベースを構成するファイルのパスを指定する必要がある
5. 非アーカイブログモードでも、オンラインREDOログに更新処理が記録される
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 69
復習問題 -バックアップとアーカイブログモード
1. Oracleはどのような運用モードであっても、障害発生直前までの復旧が可能である ⇒ × アーカイブログモードでの運用が必要。アーカイブログモードで運用することにより、アーカイブREDOログが出力され、データベースへの全ての更新処理記録が保管されることになる
2. Oracleはどのような運用モードであっても、オンラインでのバックアップ取得が可能である ⇒ × アーカイブログモードでの運用が必要。非アーカイブログモードでの運用では、バックアップを取得するためには、データベースを停止する必要がある
Copyright © 2016 CO-Sol Inc. All Rights Reserved. 70
復習問題 -バックアップとアーカイブログモード
3. バックアップを元の場所に戻すことで、障害発生直前の状態への復旧作業は完了である ⇒ × リストア(バックアップを元の場所に戻す)に加えて、リカバリが必要 リカバリにより、バックアップ取得時点の状態から障害発生直前の状態にすることができる
4. RMANでデータベース全体のバックアップを取得する際には、データベースを構成するファイルのパスを指定する必要がある ⇒ × backup database; コマンドを実行するだけでOK データベースのファイル構成はRMANが自動的に判断する
5. 非アーカイブログモードでも、オンラインREDOログに更新処理が記録される ⇒ ○ 記録される。セミナーでは説明していないが、記録された更新処理は、Oracleが異常終了した場合の復旧処理で使用される