[Oracle 10g] 表空间更名

oracle

[Oracle 10g] 表空间更名作者:Fenng
日期:24-Oct-2004 
出处:http://www.dbanotes.net
版本:0.1

简单介绍
在 Oracle 10g 以前的版本,更改表空间名字是几乎不可能的事情,除非删除,重新创建,大费周章。Oracle 10g 新添加了一项更改表空间名字的功能,使得更改表空间名字瞬间即可完成。是个较为人性化的功能。

SQL> COL FILE_NAME format a70SQL> SET linesize 120SQL> SET pagesize 99SQL> COL TABLESPACE_NAME format a10SQL>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 FOO6 rows selected.

该命令的语法很简单:

ALTER TABLESPACE tablespacename RENAME TO newtablespacename;

tablespacename 和newtablespacename 分别对应原来的表空间名字和更改后的表空间名字:
实战演练
注意:在操作前后都请做好控制文件的备份工作

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

因为 system 和 sysaux 这两个表空间的特殊性,是不可以更名的:

SQL> ALTER TABLESPACE system RENAME TO mysystem;ALTER TABLESPACE system RENAME TO mysystem*ERROR at line 1:ORA-00712: cannot rename system tablespaceSQL> ALTER TABLESPACE sysaux RENAME TO mysysaux;ALTER TABLESPACE sysaux RENAME TO mysysaux*ERROR at line 1:ORA-13502: Cannot rename SYSAUX tablespace

可以对 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.oraSQL> show parameters undoNAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string AUTOundo_retention integer 900undo_tablespace string UNDOTBS1SQL> shutdown immediate;Database closed.Database dismounted.ORACLE instance shut down.SQL> startupORACLE instance started.Total System Global Area 180355072 bytesFixed Size 777996 bytesVariable Size 128983284 bytesDatabase Buffers 50331648 bytesRedo Buffers 262144 bytesDatabase mounted.Database opened.SQL> show parameters undoNAME TYPE VALUE------------------------------------ ----------- ------------------------------undo_management string AUTOundo_retention integer 900undo_tablespace string UNDOTBSSQL>

对脱机表空间的更名是不允许的:

SQL> ALTER TABLESPACE TEST OFFLINE;Tablespace altered.SQL> ALTER TABLESPACE test RENAME TO testoffline; ALTER TABLESPACE test RENAME TO testoffline*ERROR at line 1:ORA-01135: file 6 accessed for DML/query is offlineORA-01110: data file 6:'/u01/app/oracle/product/10.1.0/db_1/oradata/TEST/foo1.dbf'

给出的提示信息很有参考价值:更名操作是要对表空间进行 DML/query 操作的,表空间offline的话,则不可以。

那么如果表空间是只读的会怎么样呢?

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_filesSQL> /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 TESTREADONLY6 rows selected.SQL>

看来数据字典已经更新,不过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。这是两个词,应该空开的 :-)
限制条件
应用这个特性有个主要的限制条件:COMPATIBLE 初始化参数要求为 10.0 或者更高才可以
参考信息

Oracle Database Administrator's Guide 10g Release 1 (10.1) Part Number B10739-01 ( Note 62294.1 )
本文作者Fenng,某美资公司DBA,业余时间混迹于各数据库相关的技术论坛且乐此不疲。目前关注如何利用ORACLE数据库有效地构建企业应用。对Oracle tuning、troubleshooting有一点研究。
个人技术站点:http://www.dbanotes.net/ 。可以通过电子邮件 dbanotes@gmail.com 联系到他。 原文出处http://www.dbanotes.net/Oracle/10g_Rename_Tablespace.htm

回上页<-|->回首页

时间: 2024-09-30 09:34:51

[Oracle 10g] 表空间更名的相关文章

oracle 10G表空间迁移时如何重建索引

昨天进行了表空间迁移的维护,维护后出现一个问题:MYTEST用户下的表表空间迁移后索引存在失效. 针对该问题和其他DBA进行了一些沟通,大家理解并不统一.后通过实际测试发现,表空间迁移后没有数据的表索引正常,但有数据的表的相关索引确实会失效, 解决的方法是REBUILD索引(今早rubuild MYTEST下的所有索引,通过select INDEX_NAME,status from user_indexes确认status均为VALID的正常状态). 进一步查找资料发现: Moving a ta

Oracle修改表空间大小的方法_oracle

本文讲述了Oracle修改表空间大小的方法.分享给大家供大家参考,具体如下: 1)查看各表空间分配情况 SQL> select tablespace_name, sum(bytes) / 1024 / 1024 from dba_data_files group by tablespace_name; TABLESPACE_NAME SUM(BYTES)/1024/1024 ------------------------------ -------------------- UNDOTBS1

oracle数据库表空间最近2小时的io统计信息

select e.tsname tsname, sum(e.phyrds - nvl(b.phyrds, 0)) reads, sum(e.phyrds - nvl(b.phyrds, 0)) / (SELECT EXTRACT(DAY FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 86400 + EXTRACT(HOUR FROM E.END_INTERVAL_TIME - B.END_INTERVAL_TIME) * 3600 + EXT

表空间 数据文件-oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展

问题描述 oracle数据库表空间中的数据文件自动扩展到32G后不再自动扩展 CSDN移动问答oracle表空间中的数据文件自动扩展到32G后不再自动扩展,报ora-01653错误,我之后手动加了个数据文件,但是不久之后这个数据文件自动扩展到了32G又报错,请问这是什么原因,难道以后只能手动添加数据文件么????

在Linux系统上同时监控多个Oracle数据库表空间的方法_oracle

一,设计背景  由于所在公司ORACLE数据库较多,传统人工监控表空间的方式较耗时,且无法记录历史表空间数据,无法判断每日表空间增长量,在没有gridcontrol/cloudcontrol软件的情况下,笔者设计如下表空间监控方案,大家也可以根据自己的实际情况对下面的方案进行修改.二,设计思路 通过dblink将来查询到的表空间数据集中汇总到一张表里通过crontab跑定时任务从各台服务器获取表空间使用情况信息.三,具体实施步骤  1.所在oracle数据库ip地址信息(下面为举例说明具体情况要

oracle删除表空间后重新创建相同名字的表空间出现错误ORA-01537

问题描述 oracle删除表空间后重新创建相同名字的表空间出现错误ORA-01537 如题所示,我在一开始删除表空间时没有使用drop tablespace ××× including contents and datafiles语句,导致dbf文件没有删除掉.导致现在dbf文件删不掉了,手动删除后,只要oracle服务已启动就会自动再创建一个同名的dbf文件.求解决方法. 解决方案 Oracle菜鸟之如何创建和删除表空间oracle 表空间,用户的创建及删除 解决方案二: 看一下你保存表空间的

求大神,oracle创建表空间出错。

问题描述 求大神,oracle创建表空间出错. create tablespace dshabc datafile 'F:orcldshabc.dbf' size 100M autoextend on next 1M maxsize 1000M extent management local 解决方案 检查F:orcl 目录是否存在,如不存在,需要先创建. 解决方案二: Oracle创建表空间并赋权在oracle中创建perfstat表空间oracle创建表空间 解决方案三: 检查F:orcl

java将oracle一个表空间的数据同步到另一个表空间的数据,来看看有没有问题

问题描述 代码如下:import java.sql.Connection;import java.sql.DriverManager;import java.sql.ResultSet;import java.sql.SQLException;import java.sql.Statement;import java.util.ArrayList;import java.util.Date;import java.util.List;public class Bak {public static

shell脚本操作oracle删除表空间、创建表空间、删除用户_linux shell

oracle下表空间的导出,用户的删除,表空间删除,用户新建,表空间新建,数据导入的shell使用非oracle用户执行该脚本参数说名$1:base表空间的用户名$2:同步表空间的用户名使用场景测试用,base表空间用于升级建立一些固化数据.同步表空间用于测试用,每次去和base表空间拉平数据 复制代码 代码如下: #!/bin/shoraclehome=$ORACLE_HOMEecho $oraclehomelocaldir="/oracle/data"echo $localdir#