Oracle10g デフォルト永続表領域おさらい の巻

投稿日: 2005年4月20日

<Oracle10g デフォルト永続表領域おさらい の巻>
ペンネーム:アイスケーキ

今週は「デフォルト永続表領域」についておさらいをしていきます。

遂にGWへのカウントダウンが始まって、気持ちここに在らず状態の方も、
とってもやさしい内容になっていますのでお付き合いください。

★☆★

9iではデータベースにデフォルト一時表領域を指定することが可能になりまし
たが10gでは更にデフォルトの永続表領域を設定することで一般ユーザに対し
てデフォルトで使用する永続表領域を設定することが可能になりました。

以前はユーザ作成時にデフォルトの永続表領域を設定していない場合、デフォ
ルトで SYSTEM 表領域がデフォルトの永続表領域として設定されていました。

設定方法:

1.create database 時
create database 文実行時に、default tablespace 句にて指定する。

2.alter database コマンド
デフォルトの永続表領域の設定を変更することが可能です。

SQL> alter database default tablespace ;

早速確認をしてみましょう。

■環境
Microsoft Windows XP Pro
Oracle Database 10g Enterprise Edition Release 10.1.0.3.0 – Production
With the Partitioning, OLAP and Data Mining options

■いざ!!

○設定してみましょう。
この機能を使用するには compatible のパラメータが 10.0 以上でなければな
りません。

SQL> show parameter compatible
NAME                                 TYPE        VALUE
------------------------------------ ----------- -----------
compatible                           string      10.1.0.3.0

▲現時のデフォルトの永続表領域参照

SQL> select property_value from database_properties
     where property_name='DEFAULT_PERMANENT_TABLESPACE';

   PROPERTY_VALUE
   --------------
   USERS

▲現在ユーザに割り当てられている永続表領域参照

SQL> select USERNAME,DEFAULT_TABLESPACE from dba_users
     where USERNAME = 'USER1' ;

USERNAME DEFAULT_TABLESPACE
-------- ------------------
USER1    USERS

▲設定変更はコマンド1発

SQL> alter database default tablespace USERS_NEW;

Database altered.

▲変更後のデフォルトの永続表領域

SQL> select property_value from database_properties
     where property_name='DEFAULT_PERMANENT_TABLESPACE';

   PROPERTY_VALUE
   --------------
   USERS_NEW

▲変更後には既存ユーザに割り当てられている表領域も変換されます

SQL> select USERNAME,DEFAULT_TABLESPACE from dba_users
     where USERNAME = 'USER1' ;

USERNAME DEFAULT_TABLESPACE
-------- ------------------
USER1    USERS_NEW

▲因みに9iでは以下のようなエラーになります。

9i > alter database default tablespace USERS_NEW;
alter database default tablespace USERS_NEW
                       *
行1でエラーが発生しました。:
ORA-12909: TEMPORARYキーワードが必要です。

○使ってみましょう。

SQL> create user new_user identified by new_user ;

User created.

SQL> select USERNAME,DEFAULT_TABLESPACE from dba_users;

USERNAME  DEFAULT_TABLESPACE
--------- ------------------
NEW_USER  USERS_NEW

まあ、当たり前ですか。当たり前ついでに、以下も。。。

○その1:対象表領域を改名してみましょう。
これも10gからの新機能ですが、改名ができます。

SQL> alter tablespace USERS_NEW RENAME TO USERS_CHG;

Tablespace altered.

▲既存ユーザのデフォルト表領域も変更されます。

SQL> select USERNAME,DEFAULT_TABLESPACE from dba_users;

USERNAME DEFAULT_TABLESPACE
-------- ------------------
USER1    USERS_CHG
NEW_USER USERS_CHG

▲デフォルトの永続表領域も変更されます。

SQL> select property_value from database_properties
  2  where property_name='DEFAULT_PERMANENT_TABLESPACE';

PROPERTY_VALUE
--------------
USERS_CHG

○その2:対象表領域をOFFLINEにしてみましょう。

SQL> alter tablespace USERS_CHG offline;

Tablespace altered.

SQL> select TABLESPACE_NAME,STATUS from dba_tablespaces
 where TABLESPACE_NAME = 'USERS_CHG';

TABLESPACE_NAME STATUS
--------------- ---------
USERS_CHG       OFFLINE

これは何の問題もなく可能です。

○その3:対象デフォルト表領域をドロップしてみましょう。

SQL> drop tablespace USERS_CHG;
drop tablespace USERS_CHG
*
ERROR at line 1:
ORA-12919: Can not drop the default permanent tablespace

さすがにこれは無理ですね。

■おさらい
デフォルトの永続表領域を設定する利点としては

○各ユーザのデフォルトの永続表領域を一度に設定することが可能です。
○各ユーザのデフォルトの永続表領域を一度に変更することが可能です。
○SYSTEM以外の表領域デフォルトの表領域として使用できる。

但し以下の場合は、デフォルトの永続表領域設定を変更しても反映されません。
それぞれのコマンド実行時に指定された表領域がデフォルトの永続表領域とし
て設定されたままとなります。

1.create user 実行時に defult tablespace句で表領域を設定した時
2.alter user コマンドでデフォルトの永続表領域を設定した時

今週はここまで。

GW準備OK???の茅ヶ崎より