梯はしこです。
サボりまくりな日々ですが、またOracle Bronzeの勉強を再開します
9月中には取ってしまいたい…!
さっそく黒本6章の復習からスタートです
表領域とは?
表領域とは、データファイルを論理的にグループ化した概念です。
表や索引などを保存するとき、その実態はデータファイルというところに保管されます。
データファイルはなかなかに複雑な構造をしているため、人間が管理するときにそのままだとわかりにくい
というわけで、表や索引などのオブジェクトを保存するとき、格納先として指定するのが表領域です。
↓詳しくはこちらの記事で解説しています!
表領域の種類
表領域には、表や索引などのオブジェクトの格納先として指定されるもののほかに、特殊な役割を持つものもあります。
こうした表領域はOracleデータベースを作成する際に自動で作成されます。
特別な表領域は次の4つがあります。
- SYSTEM表領域
- SYSAUX表領域
- UNDO表領域
- 一時表領域
SYSTEM表領域
データディクショナリという、データベース内部の管理情報表が格納されている表領域がSYSTEM表領域です。
データファイルの破損などが原因でSYSTEM表領域が使用不要になったとき、インスタンスは異常終了します。
SYSAUX表領域
SYSTEM表領域の補助的な役割を果たすのがSYSAUX表領域です。
SYSTEM表領域と同様、SYSAUX表領域も、Oracleデータベースには必須の表利器です。
ちなみにSYSAUXとはなんと読むのか…調べたのですがよくわからず。chatGPTに聞いてみました
「SYSAUX表領域の読み方を教えてください。」
と聞いてみたところ、いただいた回答がこちら。
"SYSAUX" 表領域は、オラクルデータベースに関連する用語であり、通常「シスオークス」と読みます。この表領域は、オラクルデータベースの管理とパフォーマンスに関連するさまざまな補助的なデータやオブジェクトを格納するために使用されます。SYSAUX表領域は、オラクルデータベースが正常に機能するために必要な情報を保存し、データベースの性能を最適化するために使用されるため、非常に重要です。
引用:chatGPT
![びっくり](https://stat100.ameba.jp/blog/ucs/img/char/char3/014.png)
![ニヤリ](https://stat100.ameba.jp/blog/ucs/img/char/char3/003.png)
![汗うさぎ](https://stat100.ameba.jp/blog/ucs/img/char/char4/671.png)
UNDO表領域
更新される前の過去データを保管するための表領域がUNDO表領域です。
具体的にどのようなことに使われるかと言うと…
- トランザクションのロールバック
- 読み取り一貫性の保証
- 一部のフラッシュバック機能
![ニコニコ](https://stat100.ameba.jp/blog/ucs/img/char/char3/002.png)
![爆 笑](https://stat100.ameba.jp/blog/ucs/img/char/char3/001.png)
![ガーン](https://stat100.ameba.jp/blog/ucs/img/char/char3/020.png)
一時表領域
メモリー領域で処理しきれない大量データを処理する場合に使用される表領域が一時表領域です。
たとえばSQLでSELECT文を実行した際に、表のデータ量や結合条件などによっては、大量のデータを処理しなければならないことがあります。
SELECT文実行時などに一時的に保管しておきたいだけのデータは、本来であればメモリー領域だけでなんとかできればいいのですが…あまりにもデータ量が大きすぎると、ストレージの力に頼らざるを得なくなるわけです
そういうときに、メモリー領域に協力してくれるストレージ領域が、一時表領域というわけです
ただし、わざわざストレージまで行き来することになるので、SELECT結果が返ってくるまでには結構時間がかかることも…
一時表領域は、1つ以上の一時ファイルから構成されます。
表領域に関するコマンド
表領域はSQL*Plusなどを使ってSQLコマンドを入力することで作成・削除・拡張などができます。
CREATE TABLESPACEコマンド
CREATE TABLESPACEコマンドで表領域を作成することができます。
CREATE TABLESPACE tbs
DATAFILE '.../.../.../...tbs01.def'
SIZE 100M
AUTOEXTEND ON;
上記のコマンドを実行すると
tbsという名前の表領域が作成されます。
tbs表領域の実態はtbs01.defとなり、tbs表領域を指定して表や索引などを格納した場合、それらはtbs01.defに保存されます。
さらに、上記では初期のサイズを100Mに設定し、自動拡張機能をONにしています。
表領域の空き領域が不足した場合は、表領域をリサイズすることができます。
このとき、自動拡張機能をONにすることで、空き領域が不足したときに自動的にサイズが拡張されます。
DROP TABLESPACEコマンド
表領域を削除する場合は、DROP TABLESPACEコマンドを実行します。
DROP TABLESPACEコマンドを実行する場合、表領域の状態によって指定するオプションが異なります。
- 表領域が空の場合:オプションなし
- 表領域とオブジェクトを削除:INCLUDING CONTENTS
- 表領域とオブジェクト、データファイルを削除:INCLUING CONTENTS AND DATAFILES
表領域にオブジェクトが格納されていない場合は、特にオプションを指定する必要はありません。
DROP TABLESPACE tbs;
オブジェクトが格納されている表領域を削除する場合、データファイルを削除するか否かによって、オプションが変わってきます。
まずは、データファイルを削除しない場合。
DROP TABLESPACE tbs INCLUDING CONTENTS;
表領域、オブジェクト、データファイル、そのすべてを削除する場合は、INCLUDING CONTENTS AND DATAFIlESオプションを指定します。
DROP TABLESPACE tbs INCLUDING CONTENTS AND DATAFILES;
ALTER DATABASE DATAFILE RESIZEコマンド
表領域の空き領域が少なくなってきた場合、データファイルのサイズを拡張するか、データファイルを追加するかなどして空き領域を増やすことができます。
ALTER DATABASE DATAFILE RESIZEコマンドは、データファイルのサイズを変更するコマンドです。
サイズを大きくするだけではなく、
「やっぱりこんなに大きくなくても良かったな」
というときにも使えます。
ALTER DATABASE
DATAFILE '.../.../.../tbs01.dbf'
RESIZE 200M;
上記のコマンドを実行すると、tbs01.dbfデータファイルのサイズが200MBになります。
データファイルをリサイズするコマンドは、「ALTER TABLESPACE~」ではなく、「ALTER DATABASE~」というところがひっかけポイントですね
ALTER TABLESPACE ADD DATAFILEコマンド
表領域は、2つ以上のデータファイルで構成することも可能です。
空き領域を増やす場合は、既存のデータファイルのサイズを拡張する以外に、新規のデータファイルを追加してあげる方法もあります。
ALTER TABLESPACE tbs
ADD DATAFILE '.../.../.../tbs02.dbf'
SIZE 100M;
上記を実行することで、100MBのデータファイルtbs02.dbfがtbs表領域に追加されます。
すでに200MBのtbs01.dbfがtbs表領域に紐づいている場合、300MBの領域を使えるようになります
間違えた問題
章末問題で間違えた問題は3問ありました
そのうち2問はここまでの振り返りで触れているので、1問だけ復習します。
問題は表領域の削除について。
表が格納された表領域を削除されたときの挙動として正しいものを選べ、という内容です。
正解は…
「表領域に格納されている表と、その表のディクショナリ情報がデータディクショナリから削除される」
です。
ディクショナリ情報というのは、表や索引の定義のこと。
表や索引が削除されるときには、ディクショナリ情報も一緒に削除されます。
私が選んだ選択肢はこちら。
「表領域に格納されている表と、その表に定義されている索引のうち同じ表領域に格納されているものが削除され、異なる表領域に格納されている索引は削除されない」
これは誤り。
索引は表の検索速度を上げるためのオブジェクト。表に対して定義されているものになります。
つまり表が削除されれば、その表に紐づいている索引も一緒に削除されます。
たとえその索引が異なる表領域に格納されていたとしても、表が削除される限り、その表に関連している索引は削除されるということでした。
所感
ダラダラと時間をかけてしまいましたが、これにていったん6章のおさらいが完了です。
一応7章までは勉強したので、次は7章の振り返りを続けておこなっていきます!