oracle tablespace&datafile -- oracle表空间(二)

2014-11-24 11:06:39 · 作者: · 浏览: 1
heckpoint,此时数据只能读不能写,但是可以drop对象,相关命令是alter tablespace read only和alter tablespace read write。

3、表空间的存储设置

修改tablespace和datafiles的存储设置。这项工作是指修改tablespace的大小和datafile的存放位置。

在修改tablespace的大小之前,我们需要先知道tablespac的当前存储情况。可以用下面的SQL语句实现:

SELECT a.tablespace_name,

a.bytes bytes_used,

b.largest,

round(((a.bytes - b.bytes) / a.bytes)*100, 2) percent_used

FROM

(SELECT tablespace_name,

SUM(bytes) bytes

FROM Dba_Data_Files

GROUP BY tablespace_name) a,

(SELECT tablespace_name,

SUM(bytes) bytes,

MAX(bytes) largest

FROM dba_free_space

GROUP BY tablespace_name) b

WHERE a.tablespace_name = b.tablespace_name

ORDER BY ((a.bytes - b.bytes) / a.bytes) DESC;

上面这条SQL语句中,有2条子查询,第一条取得的是表空间的总字节数,第二条取得的是表空间中余下的字节数,最终得到的结果是已经使用的字节数和百分比。

修改tablespace的大小,主要是通过datafile的大小来实现的,修改datafile的大小又有3种方法:

1)、使数据文件自增长;

2)、改变数据文件大小;

3)、添加数据文件。

使数据文件自增长:表DBA_DATA_FILES中有一个字段AUTOEXTENSIBLE与这个方法对应,它指示数据文件是否自增长,也就是数据文件不能满足存储需求时,是否自动增加大小来满足需求。先运行下列命令创建一个datafile大小为5M的表空间—TEST:create tablespace test datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' size 5M;这个时候,AUTOEXTENSIBLE是no,也就是数据文件的大小是固定的,不会自增长(当然,我们也可以在创建命令中加入指令设置自增长)。下面我们手动来修改数据文件为自增长:alter database datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' autoextend on next 5M maxsize 50M;这条命令将TEST.DBF数据文件设置为按5M大小进行自增长,最大为50M。

改变数据文件大小:以前面的数据文件为例,我想将数据文件设置为100M大小,可以执行命令:alter database datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST.DBF' resize 100M;

添加数据文件:这应该是最好的一种方式,便于管理。以TEST表空间为例,添加数据文件的命令如下:alter tablespace test add datafile 'E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF' size 5M autoextend on next 5M maxsize 50M;这条命令就直接指定了数据文件自增长。

除了修改表空间的大小,存储设置中还可以进行的一项工作就是移动数据文件。

移动数据文件有2种方法,一种是使用alter tablespace命令,一种是使用alter database命令。

使用alter tablespace移动数据文件前,需要先将表空间OFFLINE,然后目标数据文件必须存在(也就是将需要移动的数据文件复制到目的地)。以将数据文件TEST01.DBF移动到上一层目录为例。先执行命令:alter tablespace test offline;然后将TEST01.DBF复制到上一级目录,再执行命令:alter tablespace test rename datafile E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF' to 'E:\oracle\product\10.2.0\oradata\TEST01.DBF';然后再将表空间ONLINE就可以了:alter tablespace test online;。

使用alter database移动数据文件时,同样,目标数据文件必须存在(原文件的副本),且数据库需要处于MOUNTED状态。第一种方法,已经将数据文件移动到了父一级目录,下面再将它移回来。先关闭数据库:shutdown immediate;然后启动数据库,启动选项为mount:startup mount;然后执行移动命令:alter database rename file 'E:\oracle\product\10.2.0\oradata\TEST01.DBF' to 'E:\oracle\product\10.2.0\oradata\orcl\TEST01.DBF';再打开数据库:alter database open,报错了:

ORA-01113:文件7需要介质恢复

ORA-01110:数据文件7:’E:ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF’,细节还不明白,只知道数据库认为这个数据文件收到破坏,需要使用备份、日志信息来恢复。这本来是个比较严重的问题,但是在这个实例中,还是很好解决的,执行命令:

recover datafile ’E:ORACLE\PRODUCT\10.2.0\ORADATA\ORCL\TEST01.DBF’。提示完成介质恢复,再打开数据库:alter database open;一切就正常了。

4、删除表空间

删除表空间,使用命令drop tablespace 。但是有3个选项需要注意:

INCLUDING CONTENTS:指示删除表空间中的segments;

INCLUDING CONTENTS AND DATAFILES:指示删除segments和datafiles;

CASCADE CONSTRAINTS:删除所有与该空间相关的完整性约束条件。

Drop tablespace test INCLUDING CONTENTS AND DATAFILES CASCADE CONSTRAINTS;

需要注意的是SYSTEM表空间以及具有active segments的表空间是无法删除的。

摘自:perry的网络心情