手工段管理表空間遷移後的調整

snowdba發表於2015-06-13
如果有幸遇到了很老的資料庫,而表空間的段管理方式採用的是手動,那麼在遷移到到高版本資料庫比如12c中需要注意將其調整為自動模式。 這是個容易遺忘的知識點,因為年輕的DBA幾乎遇不到使用手工段管理表空間。如果遇上骨灰級表空間,不但是手工端管理模式而且是字典管理模式,那麼這會大大影響表空間的效能。

字典管理的表空間可以透過包來轉換:
execute dbms_space_admin.tablespace_migrate_to_local('tablespacename');

手工段管理想要轉為自動段管理就沒有包支援了,可以採用如下步驟來實現:

(1) 模擬建立一個9i時期的手動段管理表空間

SYS@cdb > create tablespace manualsegs9i datafile '/home/oracle/dbfile/manualsegs_9i.dbf' size 10m segment space management manual;

Tablespace created.

(2) 確認表空間是手工段管理模式

SYS@cdb > select segment_space_management from dba_tablespaces where tablespace_name='MANUALSEGS9I';

SEGMEN
------
MANUAL

(3) 在表空間中建立表和索引

SYS@cdb > create table mantab1 (id int) tablespace manualsegs9i;

Table created.

SYS@cdb > create index idx_mantab1 on mantab1(id) tablespace manualsegs9i;

Index created.

(4) 新建自動段管理表空間,該模式為預設

SYS@cdb > create tablespace autosegs12c datafile '/home/oracle/dbfile/autosegs12c.dbf' size 10m;

Tablespace created.

(5) 確認表空間是自動段管理模式

SYS@cdb > select segment_space_management from dba_tablespaces where tablespace_name='AUTOSEGS12C';

SEGMEN
------
AUTO

(6) 將物件移動到新表空間

SYS@cdb > alter table mantab1 move tablespace autosegs12c;

Table altered.

SYS@cdb > alter index idx_mantab1 rebuild online tablespace autosegs12c;

Index altered.

(7) 確認物件位於正確的表空間中

SYS@cdb > select segment_name,tablespace_name from dba_segments where tablespace_name='AUTOSEGS12C';

SEGMENT_NAME         TABLESPACE_NAME
-------------------- --------------------
MANTAB1              AUTOSEGS12C
IDX_MANTAB1          AUTOSEGS12C


(8) 刪除原始的表空間

SYS@cdb > drop tablespace manualsegs9i including contents and datafiles;

Tablespace dropped.

(9) 重新命名為原始的表空間。

SYS@cdb > alter tablespace autosegs12c rename to manualsegs9i;

Tablespace altered.


到此為止演示完畢。

全文完

來自 “ ITPUB部落格 ” ,連結:http://blog.itpub.net/29047826/viewspace-1697562/,如需轉載,請註明出處,否則將追究法律責任。

相關文章