七、Oracle管理表空间和数据文件
管理表空间和数据文件
-
表空间是数据库的逻辑组成部分。
从物理上讲,数据库的数据存放在数据文件中的;从逻辑上讲,数据库则是存放在表空间中的,表空间是由一个或多个数据文件组成的。
-
数据库的逻辑结构
Oracle中逻辑结果包括表空间、段、区和块。
说明:数据库是由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由Oracle块构成的这样一种结构。这样做可以提高数据库的效率。
-
表空间
表空间用于从逻辑上组织数据库中的数据。数据库在逻辑上是由一个或多个表空间组成。通过表空间可以达到以下作用:
(1)控制数据库占用的磁盘空间
(2)dba可以将不同的数据类型部署到不同的位置,这样有利于提高I/O性能,同时利于备份和恢复等管理操作。
-
建立表空间
建立表空间使用create tablespace 命令完成,需要注意的是,一般情况下,建立表空间必须是由特权用户或者是dba来执行,如果其他用户来创建表空间,则该用户必须要具有create tablespace 的系统权限。
建立数据表空间
在建立数据库后,为了便于管理表,最好建立自己的表空间,命令如下:
create tablespace [ts_name] datafile 'd:\test\data001.dbf' 20m uniform 12k;
说明:执行上述命令后,会在相应路径下建立名称为ts_name的表空间,并为该表空间建立名称为data001.dbf的数据文件,区的大小为128k
-
使用数据表空间
create table my_table(deptno number(4), dname varchar2(20), loc varchar2(30)) tablespace ts_name;
-
改变表空间的状态
当建立表空间时,表空间处于联机(online)的状态,此时该表空间是可以访问的,并且该表空间是可以读写的,即可以查询该表空间的数据,而且还可以在表空间执行各种sql语句。但是在进行系统或数据维护时,可能需要改变表空间的状态。一般情况下,由特权用户或是dba来操作。
(1)使表空间脱机
alter tablespace 表空间名 offilne;
(2)使表空间联机
alter tablespace 表空间名 online;
(3)只读表空间
当建立表空间时,表空间可以读写,如果不希望在该表空间上执行update,insert,delete操作,那么可以将表空间修改为只读的
alter tablespace 表空间名 read only;
(4)把表空间改成可读可以的
alter tablespace 表空间名 read write;
1)知道表空间名,显示该表空间下的所有表 select * from all_tables where tablespace_name='表空间名'; 2)知道表名,查看属于哪个表空间 select tablespace_name, table_name from user_tables where table_name='EMP'; |
-
删除表空间
一般情况下,由特权用户或是dba来操作,如果其他用户操作,必须具有drop tablespace系统权限。
drop tablespace '表空间名' including contents and datafiles;
说明:including contents表示删除表空间时,也删除该表空间中的所有数据库对象,而datafiles表示数据库磁盘文件也将删除。
-
扩展表空间
表空间是由数据文件组成的,表空间的大小实际上是数据文件相加后的大小,那么我们可以想象,假定表EMP存放到data001表空间,初始大小是2M,当数据满2M后,如果再向EMP表插入数据,就会显示表空间不足的错误。
所以需要扩展表空间,扩展表空间有三种方法:
1)增加数据文件 alter tablespace sp001 add datafile 'd:\test\sp002.dbf' size 20m; 2)增加数据文件的大小 alter tablespace sp001 add datafile 'd:\test\sp001.dbf' resize 20m; 说明:数据文件大小不能超过500M 3)设置文件的自动增长 alter tablespace sp001 add datafile 'd:\test\sp001.dbf' autoextend on next 10m maxsize 500m; |
-
故障处理,移动数据文件
有时,如果数据文件所在的磁盘损坏了,该数据文件将不能使用,为了能够重新使用,需要将这些文件的副本移动到其他的磁盘上,然后恢复。
下面以移动数据文件sp001.dbf为例说明。
1)确定数据文件所在的表空间 select tablespace_name from dba_data_files where file_name='d:\test\sp001.dbf'; 2)使表空间脱机 确保数据文件的一致性,将表空间的状态转化为offline状态 alter tablespace sp001 offline; 3)使用命令移动数据文件到指定的目标位置 host move d:\test\sp001.dbf c:\test\sp001.dbf; 4)执行alter tablespace命令 在物理上移动了数据后,还必须执行alter tablespace 命令对数据库文件进行逻辑修改: alter tablespace sp001 rename datafile 'd:\test\sp001.dbf' to 'c:\test\sp001.dbf'; 5)使新的表空间联机 alter tablespace sp001 online; |
显示表空间信息:
查询数据字典视图dba_tablespace,显示表空间信息
select tablespace_name from dba_tablespace;
显示表空间所包含的数据文件
查询数据字典视图dba_data_files,可显示表空间所包含的数据文件
select filename,bytes from dba_data_files where tablespace_name='表空间名';
作者:樊勇
出处:http://www.cnblogs.com/fanyong/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,否则保留追究法律责任的权利。
我的联系方式:fanyong@gmail.com
个人独立博客:www.fy98.com