NEWSニュース&ブログ

RDS for Oracle 表領域あれこれ!!

この記事は最終更新から10年以上経過しています。内容が古くなっている可能性があります。

投稿日:2014/10/22

みなさん、こんにちは、またはこんばんは。今回はRDS(Oracle)での表領域の作成に関する記事です。意外とRDSで表領域の
作成ってどうやるの?データファイルの指定は必要?など、細かい事が気になりますので、この記事でまとめようと思います。

1.表領域の作成方法

まずは簡単な表領域「hogehoge」を作成してみます。RDSへログインして、コマンドを実行。
SQL> create tablespace hogehoge;

表領域が作成されました。
簡単に作成出来ました。この時に作成した各属性を確認してみましょう。先ずはこの表領域は一体どれくらいの大きさなのでしょうか。
SQL> select
  2     tablespace_name,
  3     bytes/1024/1024 MB
  4  from
  5     dba_data_files
  6  where
  7     tablespace_name = 'HOGEHOGE';

TABLESPACE         MB
---------- ----------
HOGEHOGE          100
なるほど、100MBのようです。

表領域の属性に関する調査です。以下のようなSQLで調べました。
select TABLESPACE_NAME,LOGGING,EXTENT_MANAGEMENT,SEGMENT_SPACE_MANAGEMENT,BIGFILE 
from dba_tablespaces where tablespace_name ='HOGEHOGE';

そうすると、以下の事が分かりました。

図1:表領域属性 ちなみに、自動拡張はONになっていた為、最大ファイルサイズを確認すると、32TBとなっていました。では自動拡張の際の増分値を調べてみましょう。
SQL> select
  2     tablespace_name,
  3     bytes/1024/1024 MB,
  4     AUTOEXTENSIBLE,
  5     INCREMENT_BY*8/1024 MB
  6  from
  7     dba_data_files
  8  where
  9     tablespace_name = 'HOGEHOGE';

TABLESPACE         MB AUTOEX         MB
---------- ---------- ------ ----------
HOGEHOGE          100 YES        100
100MBですね。。。、100MBの表領域で、自動で100MBずつ大きくしていく。少し自動拡張の増分値が大きな気がします。

 

2.自動拡張を増分値10MBで作成する

増分値が100MBと言う事で、少し大きすぎる気がしましたので、増分値は10MBと、なだらかに拡張をしてくれる、表領域「hogehoge2」を作成してみます。
SQL> create tablespace hogehoge2 datafile autoextend on next 10M;

表領域が作成されました。
以外とあっさり完成。増分値の確認をします。
SQL> select
  2      tablespace_name,
  3      bytes/1024/1024 MB,
  4      AUTOEXTENSIBLE,
  5      INCREMENT_BY*8/1024 MB
  6  from
  7      dba_data_files
  8  where
  9      tablespace_name = 'HOGEHOGE2';

TABLESPACE         MB AUTOEX         MB
---------- ---------- ------ ----------
HOGEHOGE2         100 YES            10

SQL>
 完璧です。

 

3.hogehoge2のサイズを変更する

さて、次は、表領域のサイズを変更してみます。
自動拡張ONになっているので、あまりサイズ変更をしないかも知れませんが、表領域の自動拡張の増分値が小さい場合、
パフォーマンスに影響を与える事もありますので、手順は押さえておきたいと思います。
SQL> alter tablespace hogehoge2 resize 200M;

表領域が変更されました。
はい。できました。
ちなみに、何もデータが入っていなければ、縮小も自由にできるようです。
SQL> alter tablespace hogehoge2 resize 50M;

表領域が変更されました。
自動拡張の増分値の変更だってこの通り自在に可能です。
SQL> alter tablespace hogehoge2 autoextend on next 20M;

表領域が変更されました。

SQL> select
  2      tablespace_name,
  3      bytes/1024/1024 MB,
  4      AUTOEXTENSIBLE,
  5      INCREMENT_BY*8/1024 MB
  6  from
  7      dba_data_files
  8  where
  9      tablespace_name = 'HOGEHOGE2';

TABLESPACE         MB AUTOEX         MB
---------- ---------- ------ ----------
HOGEHOGE2          50 YES            20

SQL>
 

4.表領域のUNIFORM SIZEを指定する

表領域は断片化します。これはいろいろな原因がありますが、断片化は起こります。
この表領域の断片化を恐れるお客様からたまに、「表領域をUNIFORM SIZE指定して作ってくれ」とお願いをされることがあります。UNIFORM SIZEを指定すれば基本的に表領域の断片化は発生しませんが、その代わりに、オブジェクトの断片化が発生しやすくなります。等と、あまり複雑な事は考えず、表領域hogehoge3をUNIFORM SIZEを1MBに指定して作成したいと思います。
SQL> create tablespace hogehoge3 uniform size 1M datafile autoextend on next 10M;

表領域が作成されました。
出来ました。確認します。
SQL> select
  2     TABLESPACE_NAME,
  3     ALLOCATION_TYPE,
  4     NEXT_EXTENT/1024/1024 MB
  5  from
  6     dba_tablespaces
  7  where
  8     tablespace_name = 'HOGEHOGE3';

TABLESPACE ALLOCATION_TYPE            MB
---------- ------------------ ----------
HOGEHOGE3  UNIFORM                     1

SQL>
UNIFORM SIZE 1MBの表領域が出来ました。

 

最後に

今回はRDSの表領域について色々とやってみました。皆さんの明るいRDSライフの一助になれば幸いです。
それではまた今度!!