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的官方文档,描写的非常的清晰,地址如下:  

http://download.oracle.com/docs/cd/B19306_01/server.102/b14200/statements_3002.htm#SQLRF01002  


 

具体操作一例:  

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 --