Oracle10g 表領域の改名おさらい の巻

<Oracle10g 表領域の改名おさらい の巻>
ペンネーム:アイスケーキ

今週は「表領域の改名」についておさらいをしていきます。

GW目前ではありますが、頭の中は既に南国へ向かって離陸されている方にも
とってもやさしい内容になっていますので、お付き合いください。
連休中もお仕事の方、え~~申し訳ありません。。。お疲れ様です。

★☆★

10gではALTER TABLESPACE RENAMEコマンドにより表領域の名前を変更できるよ
うになりました。(結構ニーズがあったのに、今まで出来なかったのは不思議)

設定方法:

SQL> ALTER TABLESPACE RENAME TO ;

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

■環境
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

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

SQL> select tablespace_name,STATUS from dba_tablespaces 
  2  where tablespace_name like 'USER%';

TABLESPACE_NAME STATUS
--------------- ------
USERS           ONLINE

SQL> alter tablespace USERS rename to USERS_NEW;
Tablespace altered.

SQL> select tablespace_name,STATUS from dba_tablespaces 
    where tablespace_name like 'USER%';

TABLESPACE_NAME STATUS
--------------- ------
USERS_NEW       ONLINE
^^^^^^^^^

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

SQL> alter tablespace USERS rename to USERS_NEW;
alter tablespace users USERS to USERS_NEW
                                *
ERROR at line 1:
ORA-01904: DATAFILEキーワードが必要です。 

<<その他いろいろ>>

○表領域がデフォルトの永続表領域の場合⇒前週号を見てください。
○表領域がデフォルトの一時表領域の場合

SQL> select PROPERTY_VALUE from DATABASE_PROPERTIES
  2  where  PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';

PROPERTY_VALUE
--------------
TEMP

SQL> alter tablespace TEMP rename to TEMP_NEW;
Tablespace altered.

SQL> select PROPERTY_VALUE from DATABASE_PROPERTIES
  2  where  PROPERTY_NAME = 'DEFAULT_TEMP_TABLESPACE';

PROPERTY_VALUE
--------------
TEMP_NEW
^^^^^^^^

SQL> select USERNAME, TEMPORARY_TABLESPACE from dba_users order by 1;

USERNAME TEMPORARY_TABLESPACE
-------- --------------------
SYS      TEMP_NEW
SYSTEM   TEMP_NEW
NEW_USER TEMP_NEW

▲ユーザに割り当てていたデフォルト一時表領域の設定も全て変更されます。

○表領域がUNDO表領域の場合

SQL> show parameter undo_tablespace 

NAME            TYPE   VALUE
--------------- ------ --------
undo_tablespace string UNDOTBS1

SQL> select distinct TABLESPACE_NAME from DBA_UNDO_EXTENTS;

TABLESPACE_NAME
---------------
UNDOTBS1

SQL> alter tablespace UNDOTBS1 rename to UNDOTBS1_NEW;
Tablespace altered.

SQL> select distinct TABLESPACE_NAME from DBA_UNDO_EXTENTS;

TABLESPACE_NAME
---------------
UNDOTBS1_NEW
^^^^^^^^^^^^

▲メモリ上も変更されていますが、パラメータ情報は瞬時に変更されないよう
です。SPFILE指定になっているからでしょうけど。

SQL> select value from v$parameter where name = 'undo_tablespace';

VALUE
--------
UNDOTBS1

▲SPFILE情報は瞬時に変更されました。

SQL> select value from v$spparameter where name = 'undo_tablespace';

VALUE
------------
UNDOTBS1_NEW
^^^^^^^^^^^^

○表領域がSYSTEM,SYSAUX表領域の場合

SQL> alter tablespace SYSTEM rename to SYSTEM_NEW;
alter tablespace SYSTEM rename to SYSTEM_NEW
*
ERROR at line 1:
ORA-00712: cannot rename system tablespace

SQL> alter tablespace SYSAUX rename to SYSAUX_NEW;
alter tablespace SYSAUX rename to SYSAUX_NEW
*
ERROR at line 1:
ORA-13502: Cannot rename SYSAUX tablespace

▲しっかり怒られました。

○表領域がOFFLINEの場合

SQL> alter tablespace USERS offline;
Tablespace altered.

SQL>  alter tablespace USERS rename to USERS_NEW;
 alter tablespace USERS rename to USERS_NEW
*
ERROR at line 1:
ORA-01135: file 4 accessed for DML/query is offline
ORA-01110: data file 4: 
'C:ORACLEPRODUCT10.1.0ORADATAORCLDATAFILEO1_MF_USERS_0KJW66Z3_.DBF'

▲表領域がOFFLINEの場合、又は1つでもOFFLINEデータファイルがある場合は
エラーとなります。

○READ ONLY表領域の場合

SQL> alter tablespace USERS read only;
Tablespace altered.

SQL> alter tablespace  USERS rename to USERS_NEW;
Tablespace altered.

SQL>  select tablespace_name,STATUS from dba_tablespaces 
  2   where tablespace_name = 'USER_NEW';

TABLESPACE_NAME                STATUS
------------------------------ ---------
USER_NEW                       READ ONLY

▲改名はできましたが、アラートファイル内に
データファイルのヘッダーが更新されない脅しが載っていました。

Tablespace 'USERS' is renamed to 'USERS_NEW'.
Tablespace name change is not propagated to file headersbecause
 the tablespace is read only.

■おさらい

10gではALTER TABLESPACE RENAMEコマンドにより非常に簡単に表領域名を変更
することが可能になりました。

おかげでDBAはデータベース内に同じ名前の表領域が存在する場合の移行作業
などが簡単になりました。

ちょっと薄っぺらな内容でしたか?連休前に悩める内容は辛いので。

今週はここまで。

頭の中は南国へ離陸開始中の茅ヶ崎より