Oracle Oracle Database10g
http://otndnld.oracle.co.jp/document/products/oracle10g/102/doc_cd/server.102/B19224-02/tspaces.htm#691776
表領域の作成
どのデータベースでも、重要な表領域はSYSTEM 表領域です。この表領域には、データ・ディクショナリやシステム・ロールバック・セグメントなど、データベース・サーバー機能の基本となる情報が格納されます。
SYSTEM 表領域
データベース作成時に最初に作成される表領域です。 他の表領域と同様に管理されますが、より高いレベルの権限が必要で、一部の機能は制限されます。 たとえば、SYSTEM 表領域の名前変更、削除、オフライン化は実行できません。
SYSAUX 表領域
SYSTEM 表領域の補助表領域として機能し、データベース作成時に常に作成されます。 この補助表領域には、様々なOracle 製品および機能で使用される情報とスキーマが格納される。
表領域情報を確認
DBA_TABLESPACE
select * from dba_tablespaces
表領域を作成する手順
オペレーティング・システムによって異なりますが、必ず最初に、オペレーティング・システムを使用して、データ・ファイルが割り当てられるディレクトリ構造を作成する必要があります。
新しい表領域を作成するには、SQL 文CREATE TABLESPACE またはCREATE TEMPORARY TABLESPACE を使用
表領域を作成するには、CREATE TABLESPACE システム権限が必要
後で、ALTER TABLESPACE またはALTER DATABASE 文を使用して、この表領域を変更できます
そのためには、ALTER TABLESPACE またはALTER DATABASE システム権限が必要 表領域の管理
種類
内容
ローカル管理表領域
表領域内のすべてのエクステント情報がビットマップを使用して追跡される。
大型ファイル表領域
単一で非常に大きい(最大40 億ブロック)データ・ファイルを持つ表領域
ディクショナリ管理表領域
ディクショナリ管理表領域では、エクステントが割り当てられるか、再利用できるように解放されるたびに、データベースによってデータ・ディクショナリ内の適切な表が更新
一時表領域
一時表領域には、セッションの間のみ存続する一時データが格納されます
複数の一時表領域: 表領域グループの使用
ユーザーは、一時表領域グループを使用して複数の表領域から一時領域を消費できます
表領域を作成する
CREATE TABLESPACE権限を持っているか確認
SQL> select * from session_privs
2 where privilege = 'CREATE TABLESPACE'
3 /
PRIVILEGE
---------------------------------------------
CREATE TABLESPACE
既存表領域のデータファイルの場所を確認しておく
SQL> select file_name from dba_data_files;
FILE_NAME
--------------------------------------------------
/opt/oracle/app/oradata/oradb1/users01.dbf
/opt/oracle/app/oradata/oradb1/sysaux01.dbf
/opt/oracle/app/oradata/oradb1/undotbs01.dbf
/opt/oracle/app/oradata/oradb1/system01.dbf
/opt/oracle/app/oradata/oradb1/example01.dbf
テーブルスペースの作成
パラメータ
内容
SMALLFILE
表領域がbigfileかsmallfileかを指定
TEMPFILE
永続表領域を構成するデータ・ファイルを指定するか、または一時表領域を構成する一時ファイルを指定
NOLOGGING
ロギング属性を指定します。デフォルトはLOGGINGです。一時表領域またはUNDO表領域では無効
EXTENT MANAGEMENT
LOCAL:ビットマップ用に表領域の一部を確保。永続表領域のデフォルト、DICTIONARY:ディクショナリ表を使用して表領域を管理
SEGMENT SPACE MANAGEMENT
AUTO:ビットマップを使用して表領域のセグメントにある空き領域を管理、MANUAL:空きリストを使用して表領域のセグメントにある空き領域を管理できます。この設定は使用しないことを強くお薦め
SQL> create smallfile tablespace "EXAM_DAT"
2 datafile '/opt/oracle/app/oradata/oradb1/exam01.dbf'
3 size 20m autoextend on
4 logging
5 extent management local
6 segment space management auto
7 /
表領域が作成されました。
ユーザのデフォルトテーブルスペースを変更し、クオータを変更
SQL> alter user exam default tablespace exam_dat;
ユーザーが変更されました。
SQL> alter user exam quota unlimited on exam_dat;
ユーザーが変更されました。
オフライン化
次のような場合にオフライン化
データベースの一部のみを使用できないようにし、残りの部分には正常にアクセスできるようにする
オフライン表領域のバックアップを実行する(ただし、表領域はオンラインで使用中の場合でもバックアップは可能)
アプリケーションの更新時またはメンテナンス時に、アプリケーションとその表のグループを一時的に使用できないようにする
表領域のデータ・ファイルを名前変更または再配置する オフライン化できない表領域
オフライン化
オプション
内容
NORMAL
表領域のデータ・ファイルすべてのチェックポイントを取ってからオフライン化。デフォルト。
TEMPORARY
データ・ファイルについてエラー条件が存在している場合でも、表領域を一時的にオフライン化できる。まだオフライン化されていないデータ・ファイルのチェックポイントを取ってから、オフライン化します。
IMMEDIATE
即時にオフライン化。データ・ファイルのチェックポイントを取りません。表領域をオンライン化する前に表領域のメディア・リカバリが必要。NOARCHIVELOGモードで運用している場合は、表領域を即時にオフライン化することはできない。
SQL> alter tablespace exam_dat offline normal;
表領域が変更されました。
オフラインの表にアクセス
SQL> select * from test;
select * from test
*
行1でエラーが発生しました。:
ORA-00376: file 6 cannot be read at this time
ORA-01110: data file 6: '/opt/oracle/app/oradata/oradb1/exam01.dbf'
オンラインに戻す
SQL> alter tablespace exam_dat online;
表領域が変更されました。
読み取り専用にする
SQL> alter tablespace exam_dat read only;
表領域が変更されました。
更新してみる
SQL> select * from test;
ID NAME
---------- ----------------------------------------
1 abc
SQL> update test set name = 'def' where id = 1;
update test set name = 'def' where id = 1
*
行1でエラーが発生しました。:
ORA-00372: file 6 cannot be modified at this time
ORA-01110: data file 6: '/opt/oracle/app/oradata/oradb1/exam01.dbf'
元戻す
SQL> alter tablespace exam_dat read write;
表領域が変更されました。
テンプレート:Include html banner html, "!Oracle"