在 Oracle 10g 以前的版本,更改表空間名字是幾乎不可能的事情,除非刪除,重新創建,大費周章。
Oracle 10g 新添加了一項更改表空間名字的功能,使得更改表空間名字瞬間即可完成。是個較為人性化的功能。
SQL> SELECT file_name, tablespace_name FROM dba_data_files;
FILE_NAME????????????????????????????????????????????????????????????? TABLESPACE
---------------------------------------------------------------------- ----------
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/users01.dbf?????????? USERS
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/sysaux01.dbf????????? SYSAUX
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/undotbs01.dbf???????? UNDOTBS1
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/system01.dbf????????? SYSTEM
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/example01.dbf???????? EXAMPLE
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/foo1.dbf????????????? FOO
1.該命令的語法很簡單:
ALTER TABLESPACE tablespacename RENAME TO newtablespacename;
tablespacename 和newtablespacename 分別對應原來的表空間名字和更改后的表空間名字:
2.實戰演練
注意:在操作前后都請做好控制文件的備份工作
SQL>ALTER TABLESPACE foo RENAME TO test;
Tablespace altered.
SQL> SELECT file_name, tablespace_name FROM dba_data_files;
FILE_NAME????????????????????????????????????????????????????????????? TABLESPACE
---------------------------------------------------------------------- ----------
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/users01.dbf?????????? USERS
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/sysaux01.dbf????????? SYSAUX
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/undotbs01.dbf???????? UNDOTBS1
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/system01.dbf????????? SYSTEM
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/example01.dbf???????? EXAMPLE
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/foo1.dbf????????????? TEST
3.因為 system 和 sysaux 這兩個表空間的特殊性,是不可以更名的:
SQL> ALTER TABLESPACE system RENAME TO mysystem;
ORA-00712: cannot rename system tablespace
SQL> ALTER TABLESPACE sysaux RENAME TO mysysaux;
ORA-13502: Cannot rename SYSAUX tablespace
4.可以對 undo tablespace 重新命名,如果使用的是 spfile ,而不是 pfile, Oracle 會自動對 spfile 中的 undo_tablespace 進行更改(不過要在數據庫重新啟動之后才可以觀察到), 如果使用的是 pfile ,要對其進行手工更改。我們看看 spfile 的變化情況:
SQL> ALTER tablespace undotbs1 RENAME TO undotbs;
Tablespace altered.
SQL>
SQL> show parameter pfile
NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ------------------------------
spfile?????????????????????????????? string????? /u01/app/oracle/product/10.1.0
???????????????????????????????????????????????? /db_1/dbs/spfileTEST.ora
SQL> show parameters undo
NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ------------------------------
undo_management????????????????????? string????? AUTO
undo_retention?????????????????????? integer???? 900
undo_tablespace????????????????????? string????? UNDOTBS1
SQL> shutdown immediate;
SQL> startup
SQL> show parameters undo
NAME???????????????????????????????? TYPE??????? VALUE
------------------------------------ ----------- ------------------------------
undo_management????????????????????? string????? AUTO
undo_retention?????????????????????? integer???? 900
undo_tablespace????????????????????? string????? UNDOTBS
5.對脫機表空間的更名是不允許的:
SQL> ALTER TABLESPACE TEST OFFLINE;
Tablespace altered.
SQL> ALTER TABLESPACE test RENAME TO testoffline;?????????????
ORA-01135: file 6 accessed for DML/query is offline
ORA-01110: data file 6:'/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/foo1.dbf'
給出的提示信息很有參考價值:更名操作是要對表空間進行 DML/query 操作的,表空間offline的話,則不可以。
6.那么如果表空間是只讀的會怎么樣呢?
SQL> ALTER TABLESPACE TEST ONLINE;
Tablespace altered.
SQL> ALTER TABLESPACE TEST READ ONLY;
Tablespace altered.
SQL> ALTER TABLESPACE test RENAME TO testreadonly;
Tablespace altered.
SQL> list
? 1* SELECT file_name, tablespace_name FROM dba_data_files
SQL> /
FILE_NAME????????????????????????????????????????????????????????????? TABLESPACE
---------------------------------------------------------------------- ----------
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/users01.dbf?????????? USERS
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/sysaux01.dbf????????? SYSAUX
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/undotbs01.dbf???????? UNDOTBS
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/system01.dbf????????? SYSTEM
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/example01.dbf???????? EXAMPLE
/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/foo1.dbf????????????? TESTREADONLY
7.看來數據字典已經更新,不過Oracle會向alert_SID.log 中寫入類似如下的日志:
ALTER TABLESPACE test RENAME TO testreadonly????????????????????????????????????????????????
Sat Nov 13 16:15:21 2004????????????????????????????????????????????????????????????????????
Tablespace 'TEST' is renamed to 'TESTREADONLY'.?????????????????????????????????????????????
Tablespace name change is not propagated to file headersbecause the tablespace is read only.
Completed: ALTER TABLESPACE test RENAME TO testreadonly
注意Log里有個細微的小Bug:headersbecause。這是兩個詞,應該空開的 :-)
8.更名對 Bigfile 表空間一樣有效。
9.限制條件
應用這個特性有個主要的限制條件:COMPATIBLE 初始化參數要求為 10.0 或者更高才可以
10.參考信息
Oracle Database Administrator's Guide 10g Release 1 (10.1) Part Number B10739-01 ( Note 62294.1 )
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
