【比較】Oracle不同版本中關於ALTER TABLESPACE的功能演進

lhrbest發表於2016-09-06
1.分別看一下從9i到11gR2版本中關於“ALTER TABLESPACE”的語法。
1).11g(R1和R2相同)的語法:
ALTER TABLESPACE tablespace               
  { DEFAULT [ table_compression ] storage_clause
  | MINIMUM EXTENT size_clause
  | RESIZE size_clause
  | COALESCE
  | SHRINK SPACE [ KEEP size_clause]
  | RENAME TO new_tablespace_name
  | { BEGIN | END } BACKUP
  | datafile_tempfile_clauses
  | tablespace_logging_clauses
  | tablespace_group_clause
  | tablespace_state_clauses
  | autoextend_clause
  | flashback_mode_clause
  | tablespace_retention_clause
  } ;

2).10g的語法:
ALTER TABLESPACE tablespace
  { DEFAULT
      [ table_compression ] storage_clause
  | MINIMUM EXTENT size_clause
  | RESIZE size_clause
  | COALESCE
  | RENAME TO new_tablespace_name
  | { BEGIN | END } BACKUP
  | datafile_tempfile_clauses
  | tablespace_logging_clauses
  | tablespace_group_clause
  | tablespace_state_clauses
  | autoextend_clause
  | flashback_mode_clause
  | tablespace_retention_clause
  } ;

3).9i的語法:
ALTER TABLESPACE tablespace
  { datafile_tempfile_clauses
  | DEFAULT [ data_segment_compression ] storage_clause
  | MINIMUM EXTENT integer [ K | M ]
  | ONLINE
  | OFFLINE [ NORMAL | TEMPORARY | IMMEDIATE ]
  | { BEGIN | END } BACKUP
  | READ { ONLY | WRITE }
  | PERMANENT| TEMPORARY
  | COALESCE
  | logging_clause
  | [ NO ] FORCE LOGGING
  } ;

2.將比較關心的幾個特性演進描述一下
1)10g比9i增加了修改表空間名字的方法(RENAME TO),方便很多,雖然在改名的過程中存在一些限制,不過改進相當的人性,終於不用透過增刪的方式修改表空間的名字了。
關於rename表空間名字的一些限制請閱讀Oracle的官方文件,描寫的非常的清晰,地址如下:

具體操作一例:
sys@ora10g> alter tablespace TBS_SEC_D1 rename to TBS_SEC_D;

Tablespace altered.

2)10g到9i的變化是非常大的,增加了非常多的特性,因為10g是一個跨時代的一個版本。

3)10g到11g的變化不是很大,不過也體現了功能的進一步加強,這裡提到的是對臨時表空間的“SHRINK SPACE”功能,加強了對臨時表空間的管理功能。
(1)“SHRINK SPACE”之前的臨時表空間檢視
sys@ora11g> select tablespace_name,file_id,bytes/1024/1024 Mbytes,blocks,maxbytes/1024/1024 MmaxBytes,maxblocks from dba_temp_files;

TABLESPACE_NAME    FILE_ID     MBYTES     BLOCKS  MMAXBYTES  MAXBLOCKS
--------------- ---------- ---------- ---------- ---------- ----------
TEMP                     1         29       3712 32767.9844    4194302

(2)使用“SHRINK SPACE”功能對臨時表空間進行縮減
sys@ora11g> alter tablespace TEMP shrink space;

Tablespace altered.
                           
(3)“SHRINK SPACE”之後臨時表空間檢視,可以看到臨時表空間大小由原來的29M變成了現在的不到2M的大小。
sys@ora11g> select tablespace_name,file_id,bytes/1024/1024 Mbytes,blocks,maxbytes/1024/1024 MmaxBytes,maxblocks from dba_temp_files;

TABLESPACE_NAME    FILE_ID     MBYTES     BLOCKS  MMAXBYTES  MAXBLOCKS
--------------- ---------- ---------- ---------- ---------- ----------
TEMP                     1  1.9921875        255 32767.9844    4194302

(4)演示一下對於非臨時表空間進行SHRINK時的報錯資訊,提示資訊很清晰
sys@ora11g> alter tablespace USERS shrink space;
alter tablespace USERS shrink space
*
ERROR at line 1:
ORA-12916: cannot shrink permanent or dictionary managed tablespace

3.小結
上面只是提到了幾個我感覺比較實用的變化,拋個磚,細節之處大家再慢慢體會吧。

-- The End --

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

相關文章