1. Oracle表空间
Oracle数据库真正存放数据的是数据文件(data files),Oarcle表空间(tablespaces)实际上是一个逻辑的概念,他在物理上是并不存在的,那么把一组data files 捻在一起就成为一个表空间。一个数据库可以包含多个表空间,一个表空间只能属于一个数据库,一个表空间包含多个数据文件,一个数据文件只能属于一个表空间。
- 从逻辑的角度来看,一个数据库(database)下面可以分多个表空间(tablespace);一个表空间下面又可以分多个段(segment);一个数据表要占一个段(segment),一个索引也要占一个段(segment )。 一个段(segment)由多个 区间(extent)组成,那么一个区间又由一组连续的数据块(data block)组成。这连续的数据块是在逻辑上是连续的,有可能在物理磁盘上是分散。
-
- Segment(段) :段是指占用数据文件空间的通称,或数据库对象使用的空间的集合;段可以有表段、索引段、回滚段、临时段和高速缓存段等。
- Extent (区间):分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象
- 从物理的角度上看,一个表空间由多个数据文件组成,数据文件是实实在在存在的磁盘上的文件。这些文件是由oracle数据库操作系统的block 组成的。
- Oracle安装完数据库的一般流程:先建表空间(分区)-->再建用户(分配相应的表空间和用户权限)-->登陆用户-->建表
--查看表空间
select * from v$tablespace
2. 表空间创建
create tablespace linkmes_eq --表空间名称
datafile 'C:\app\Administrator\oradata\linkmes\linkmes_eq.dbf' size 500M --存储地址 初始大小500M
autoextend on next 10M maxsize 200M; --每次扩展10M,如果不扩展用off,无限制扩展 unlimited
CREATE TABLESPACE linkmes_eq DATAFILE 'C:\app\Administrator\oradata\linkmes\linkmes_eq.dbf' SIZE 1024M AUTOEXTEND OFF;--不扩展表空间
CREATE TEMPORARY TABLESPACE linkmes_tmp TEMPFILE --创建临时表空间
'C:\app\Administrator\oradata\linkmes\linkmes_tmp.dbf' SIZE 512M AUTOEXTEND OFF;
3. 表空间属性
4. 删除表空间
DROP TABLESPACE linkmes_eq INCLUDING CONTENTS AND DATAFILES;
5. 改变表空间状态
5.1 使表空间脱机
ALTER TABLESPACE linkmes_eq OFFLINE;
-- 如果是意外删除了数据文件,则必须带有RECOVER选项
ALTER TABLESPACE linkmes_eq OFFLINE FOR RECOVER;
5.2 使表空间联机(在线)
-- 使表空间联机
ALTER TABLESPACE linkmes_eq ONLINE;
5.3 使表空间只读
--使表空间只读
ALTER TABLESPACE linkmes_eq READ ONLY;
--使表空间可读写
ALTER TABLESPACE linkmes_eq READ WRITE;
6. 扩展表空间
- 首先查看表空间的名字和所属文件
select tablespace_name, file_id, file_name, round(bytes/(1024*1024),0) total_space from dba_data_files order by tablespace_name;
- 增加数据文件
ALTER TABLESPACE linkmes_eq ADD DATAFILE '/oracle/oradata/db/linkmes_eq02.dbf' SIZE 1000M;
- 手动增加数据文件尺寸
ALTER DATABASE DATAFILE '/oracle/oradata/db/linkmes_eq.dbf' RESIZE 4000M;
- 设定数据文件自动扩展
ALTER DATABASE DATAFILE '/oracle/oradata/db/linkmes_eq.dbf AUTOEXTEND ON NEXT 100M MAXSIZE 10000M;
- 设定后查看表空间信息
SELECT A.TABLESPACE_NAME,A.BYTES TOTAL,B.BYTES USED, C.BYTES FREE, (B.BYTES*100)/A.BYTES "% USED",(C.BYTES*100)/A.BYTES "% FREE"
FROM SYS.SM$TS_AVAIL A,SYS.SM$TS_USED B,SYS.SM$TS_FREE C WHERE A.TABLESPACE_NAME=B.TABLESPACE_NAME AND A.TABLESPACE_NAME=C.TABLESPACE