七、Oracle管理表空间和数据文件

管理表空间和数据文件

  1. 表空间是数据库的逻辑组成部分。

从物理上讲,数据库的数据存放在数据文件中的;从逻辑上讲,数据库则是存放在表空间中的,表空间是由一个或多个数据文件组成的。

  1. 数据库的逻辑结构

Oracle中逻辑结果包括表空间、段、区和块。

说明:数据库是由表空间构成,而表空间又是由段构成,而段又是由区构成,而区又是由Oracle块构成的这样一种结构。这样做可以提高数据库的效率。

  1. 表空间

表空间用于从逻辑上组织数据库中的数据。数据库在逻辑上是由一个或多个表空间组成。通过表空间可以达到以下作用:

(1)控制数据库占用的磁盘空间

(2)dba可以将不同的数据类型部署到不同的位置,这样有利于提高I/O性能,同时利于备份和恢复等管理操作。

  1. 建立表空间

建立表空间使用create tablespace 命令完成,需要注意的是,一般情况下,建立表空间必须是由特权用户或者是dba来执行,如果其他用户来创建表空间,则该用户必须要具有create tablespace 的系统权限。

建立数据表空间

在建立数据库后,为了便于管理表,最好建立自己的表空间,命令如下:

create tablespace [ts_name] datafile 'd:\test\data001.dbf' 20m uniform 12k;

说明:执行上述命令后,会在相应路径下建立名称为ts_name的表空间,并为该表空间建立名称为data001.dbf的数据文件,区的大小为128k

  1. 使用数据表空间

create table my_table(deptno number(4), dname varchar2(20), loc varchar2(30)) tablespace ts_name;

  1. 改变表空间的状态

当建立表空间时,表空间处于联机(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';

  1. 删除表空间

一般情况下,由特权用户或是dba来操作,如果其他用户操作,必须具有drop tablespace系统权限。

drop tablespace '表空间名' including contents and datafiles;

说明:including contents表示删除表空间时,也删除该表空间中的所有数据库对象,而datafiles表示数据库磁盘文件也将删除。

  1. 扩展表空间

表空间是由数据文件组成的,表空间的大小实际上是数据文件相加后的大小,那么我们可以想象,假定表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;

  1. 故障处理,移动数据文件

有时,如果数据文件所在的磁盘损坏了,该数据文件将不能使用,为了能够重新使用,需要将这些文件的副本移动到其他的磁盘上,然后恢复。

下面以移动数据文件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='表空间名';

原文地址:https://www.cnblogs.com/fanyong/p/2888241.html