oracle 表空间tablespace
一、Oracle 表空间的组成
Everoone knows Oracle数据库真正存放数据的是数据文件,Oracle表空间是逻辑上的概念,他在物理上是并不存在的,把多个DataFile合并到一起就是一个表空间。
左图是Oracle中DataBase和tablepspace和DataFile的关系
如果不理解上图,可以看下图:

表空间就好像是背景,而其中的土地就相当于是数据文件,北京就是由一块块土地构成。
大致的关系是:
1、一个DataBase实例包含多个tablespace,一个tablespace只能属于一个DataBase
2、一个tablespace包含多个DataFile,一个DataFile只能术语一个tablespace
注:上面的代码都不是最小的单位,只是大致上的关系,比如tablespace还可以进行划分,它不仅仅包含DataFile,还包含索引等,下图Oracle存储结构会做稍详细的介绍
Oracle数据库的存储结构

如果不理解上图,可以看下图:

一个tablespace由多个数据文件组成
下面通过文字分析上图的结构关系:
1、DataBase和Schema的关系:因为一个数据库可以创建多个用户来进行管理,而每创建一个用户对应的都会创建一个Schema,所以一个数据库可以对应多个Schema,Schema的具体创建过程和作用请参考Oracle Schema
2、DataBase与tablespace的关系,一个DataBase包含多个tablespace(表空间),表空间的作用是:
用于从逻辑上组织数据库的数据,数据库逻辑上是由一个或者多个表空间组成(至少是一个),通过表空间可以达到一下作用:
a、控制数据库占用的磁盘空间(如果没有表空间,数据文件东方一点西方一点,管理起来很麻烦)
b、dba可以将不同的数据类型部署到不同的位置(比如将索引放到一个表空间下,将触发器放到一个表空间下),这样有利于提高i/o的性能,同时有利于备份和恢复等操作。
3、一个tablespace(表空间)包含多个Segment(段).注:一个数据表占一个段,一个索引也要占一个段。如果不理解段,下文会有解释!
4、一个Segment(段)由多个连续的Extent(区间)组成
5、一个Extent(区间)又由连续的Data Block(数据块组成),这些数据块在逻辑上是连续的,但在物理磁盘上可能是分散的;
Segment(段):
段是指占有数据文件空间的通称,或者是数据库对象(Not 数据库)使用空间的集合,段可以分为以下几种:
1、表段
2、索引段
3、回滚段
4、临时段
5、高速缓存段
Extent (区间):分配给对象(如表)的任何连续块叫区间;区间也叫扩展,因为当它用完已经分配的区间后,再有新的记录插入就必须在分配新的区间(即扩展一些块);一旦区间分配给某个对象(表、索引及簇),则该区间就不能再分配给其它的对象.
二、表空间的使用
1、表空间的创建与删除
1.1、表空间的创建
使用sysdba登录,执行以下口令
口令:
create tablespace 表空间名 datafile '表空间所在的磁盘路径' size 表空间的大小 uniform size 按区的大小按多大来分配
或者使用sqlplus创建

然后打开pl/sql developer
表空间创建成功
d盘下存在该记录
ok,证明我们的操作成功
1.2、表空间的删除
删除表空间需要sysdba或者drop tablespace的权限,删除的代码如下:
drop tablespace 表空间名 including contents and datafiles
说明:including contents表示删除表空间的同时,删除表空间的所有数据库对象,and datafiles表示同时也删除数据文件
打开pl/sql developer执行如下语句:

ok,TEST表空间消失,删除成功!!!
2、向新建的表空间中添加表对象
口令:
create table test1(id number(2),name varchar2(10)) tablespace 表空间的名字
在pl/sql developer中执行:
create table test1(id number(2),name varchar2(10)) tablespace TEST
ok,表成功创建到了TEST表空间下
3、改变表空间的访问状态
当建立表空间时,表空间处于连机的状态,此时该表空间是可以访问的,而且该表空间是可以读写的,可以对表空间下的对象进行DML操作,但是,当系统进行维护或者升级的时候,可能不能让外界访问到表空间的对象,所以就需要改变表空间的状态。下面就是几种关于表空间的操作,注:下面的操作必须具有sysdba或者alter tablespace的权限,才能进行
3.1、使表空间脱机
alter tablespace 表空间名 offline;
打开pl/sql developer,执行:
alter tablespace TEST offline;
执行成功,进行如下测试:注:必须重新登录,或新建一个会话进行测试
create table test2(id number(2),name varchar2(10)) tablespace TEST;

3.2、使表空间联机
3.1介绍了如何使表空间脱机,防止在维护时,外部的操作导致数据库发生意外,现在我们对数据库的维护已经完成了,现在需要让表空间重新上线,口令如下:
alter tablespace 表空间名 online;
打开pl/sql developer,执行:
alter tablespace TEST online;
执行成功后,再次进行以下操作:
create table test2(id number(2),name varchar2(10)) tablespace TEST;
ok,成功!!!
3.3、设置表空间为只读表空间
当建立表空间时,表空间可以读写,如果不希望在表空间中进行update、insert、delete等操作,可以通过设置表空间为只读表空间,代码如下:
alter tablespace 表空间名 read only;
打开pl/sql developer 执行如下语句:
alter tablespace TEST read only;
ok,执行成功,重新登录或者新建会话,执行以下语句:
insert into scott.test1 values(1,1)

但是执行查询是可以的:
select * from scott.test1
测试,没填数据
3.4、设置表空间为读写表空间
当希望一个表空间不再是只读表空间的时候,可以通过设置表空间为读写表空间改变其原来的只读状态,代码如下:
alter tablespace 表空间名 read write;
打开pl/sql developer 执行如下语句,设置3.3设置的只读表空间变为可读写的表空间:
alter tablespace TEST read write;
执行成功,在执行如下insert 语句:
insert into scott.test1 values(1,1)
ok,插入成功。
4、查看表空间下的所有表
通过all_tables系统基表和tablespace_name查询表空间下的所有表对象,代码如下,注意大小写:
select * from all_tables where tablespace_name='TESTTABLESPACE'

5、查看当前表属于哪个表空间
通过系统基表user_tables和table_name查询当前表属于哪个表空间,代码如下:注意大小写
select tablespace_name,table_name from all_tables where table_name='EMP';

ok,查出表EMP是USERS表空间下的

6、扩展表空间
表空间是由数据文件组成,表空间的大小实际就是数据文件的大小相加后的大小,那么可以想象,当我们向表空间下面加一张表(初始表的大小就占用了2m),假设我们设置了当前表空间的大小为20M,那么当我们向表中不断的添加数据,那么这张表迟早会被添满,这样就会显示空间不足的消息!这个时候我们就需要扩展表空间,使数据能够正常的添加。

我向表空间名为test的tablespace下新建了一张表,然后向这张表疯狂的添加数据,然后

工具提示Test表空间需要扩展,因为由于表数据的增加,Test空间的大小不够了。现在我们就需要扩展表空间,一共有三种方法:
6.1、增加数据文件
Everyone knows表空间consists of(由什么组成)数据文件,所以可以通过给表空间增加新的数据文件,来达到扩展表空间的作用,口令如下,确保使用sysdba身份登录:

ok,数据文件添加成功,说明表空间扩展成功,说明又可以开始添加数据了

ok,添加成功,说明表空间扩展成功。
6.2、增加数据文件的大小

通过修改数据文件的大小来扩展表空间的大小,代码如下:
alter database datafile '表空间数据文件所在的磁盘路径' resize 100m;

ok,此时表空间下面的TEST.DBF文件大小重置成功,变成100m,下面来进行测试:

ok,数据插入成功,说明表空间扩建成功.
6.3、设置文件的自动增长
通过设置当文件到达我们设定的大小,那么就按照我们指定的增量,进行扩展,直到达到了文件的最大值,就报错!

ok,下面表空间的大小又不够了,那么通过设置文件的自动增长来解决这个问题,代码如下:
alter database datafile '表空间数据文件所在的磁盘路径' AUTOEXTEND ON NEXT 10M maxsize unlimited;


ok,插入成功,说明表空间的扩展又成功了!
7、故障处理
有些时候,如果你的数据文件所在的磁盘损坏时,而你的数据文件没有损坏,但是此时数据文件无法正常使用,为了保证正常的使用,你需要将他的副本移动到其他的盘符进行恢复使用;


8、上面介绍的是常用的表空间介绍,下图中的就是特殊的表空间

oracle 表空间tablespace的更多相关文章
- oracle表空间tablespace
用户:用户是在实例下建立的.不同实例可以建相同名字的用户. 表空间:表空间是一个用来管理数据存储逻辑概念,表空间只是和数据文件(ORA或者DBF文件)发生关系,数据文件是物理的,一个表空间可以包含多个 ...
- 修改Oracle 表空间名称 tablespace name
修改表空间名称步骤如下: 1. 使用oracle用户登录执行 $sqlplus / as sysdba 2. 执行修改表空间命令如下 SQL> alter tablespace TEST re ...
- Oracle表空间,用户,用户授权
一:Oracle表空间 1,Oracle表空间与SQL Server文件组对比 SQL Server的文件组(文件组包括若干MDF,NDF数据文件)对我们来说并不陌生,前段时间我在博客“怎样玩转千万级 ...
- Oracle表空间管理
oracle表空间相关常用命令小结: 1.ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE; //修改表空间数据文件类型 2.ALT ...
- 【转】Oracle 表空间与数据文件
--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...
- 六分钟学会创建Oracle表空间的步骤
经过长时间学习创建Oracle表空间,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西. 1.先查询空闲空间 select tablespace_name,file_id,blo ...
- Oracle表空间、段、区和块
数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异.无论是Windo ...
- interview:about Oracle表空间
Oracle表空间 SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计.Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献.可 ...
- Oracle表空间详解
Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...
随机推荐
- 浅谈对MVC的理解
1.MVC设计模式理解 MVC全名是Model View Controller,是模型(model)-视图(view)-控制器(controller)的缩写,一种软件设计典范,用一种业务逻辑.数据.界 ...
- CodeForces 620E New Year Tree(线段树的骚操作第二弹)
The New Year holidays are over, but Resha doesn't want to throw away the New Year tree. He invited h ...
- VS2010 solution中完美的相对路径引用方法
假设您有一个工程叫solar,路径结构是这样的: 公用头路径: d:\solar\public\include公用库路径:d:\solar\public\libmars项目 : d:\solar\ma ...
- 玄虚出品Delphi教程的前言 good
VCL是基于系统的,根本在于系统API,FMX是基于绘图的,根本在于渲染引擎 VCL的发展受制于系统,(你在VCL的代码里面可以看到Borland对M$的妥协),而FMX的发展仅仅受制于硬件 VCL ...
- centos7 安装dnf包管理器和常用命令
Installing DNF Currently the DNF package comes from the EPEL repository, so if your Linux system is ...
- C# 读Autofac源码笔记(1)
最近在看Autofac的源码. Autofac据说是.net中最快的IOC框架,具体没有实验,于是看看Autofac具体是怎样实例化实体. image.png 如上图所示,Autofac使用的是表 ...
- linux最基本命令
1.cd命令 这是一个非常基本,也是大家经常需要使用的命令,它用于切换当前目录,它的参数是要切换到的目录的路径,可以是绝对路径,也可以是相对路径.如: cd /root/Docements # 切换到 ...
- c# 求两个数中最大的值
1.三元运算符: class Program { static void Main(string[] args) { ,); Console.WriteLine("最大数:{0}" ...
- 项目前端打包工具从 NEJ 切换成 webpack
此文已由作者张磊授权网易云社区发布. 欢迎访问网易云社区,了解更多网易技术产品运营经验. 这里不讨论 NEJ 和 webpack 的优劣,仅从技术角度来探寻一下能否实现,以及实现的代价. 前言 上一篇 ...
- Elasticsearch学习(1) Spring boot整合Elasticsearch
本文的Spring Boot版本为1.5.9,Elasticsearch版本为2.4.4,话不多说,直接上代码. 一.启动Elasticsearch 在官网上下载Elasticsearch后,打开bi ...