一、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的更多相关文章

  1. oracle表空间tablespace

    用户:用户是在实例下建立的.不同实例可以建相同名字的用户. 表空间:表空间是一个用来管理数据存储逻辑概念,表空间只是和数据文件(ORA或者DBF文件)发生关系,数据文件是物理的,一个表空间可以包含多个 ...

  2. 修改Oracle 表空间名称 tablespace name

    修改表空间名称步骤如下: 1. 使用oracle用户登录执行 $sqlplus / as sysdba 2. 执行修改表空间命令如下 SQL> alter tablespace  TEST re ...

  3. Oracle表空间,用户,用户授权

    一:Oracle表空间 1,Oracle表空间与SQL Server文件组对比 SQL Server的文件组(文件组包括若干MDF,NDF数据文件)对我们来说并不陌生,前段时间我在博客“怎样玩转千万级 ...

  4. Oracle表空间管理

    oracle表空间相关常用命令小结: 1.ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE;              //修改表空间数据文件类型 2.ALT ...

  5. 【转】Oracle 表空间与数据文件

    --============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...

  6. 六分钟学会创建Oracle表空间的步骤

    经过长时间学习创建Oracle表空间,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西. 1.先查询空闲空间 select tablespace_name,file_id,blo ...

  7. Oracle表空间、段、区和块

    数据块(Block) 数据块Block是Oracle存储数据信息的最小单位.注意,这里说的是Oracle环境下的最小单位.Oracle也就是通过数据块来屏蔽不同操作系统存储结构的差异.无论是Windo ...

  8. interview:about Oracle表空间

    Oracle表空间 SQL Server数据库与Oracle数据库之间最大的区别要属表空间设计.Oracle数据库开创性地提出了表空间的设计理念,这为Oracle数据库的高性能做出了不可磨灭的贡献.可 ...

  9. Oracle表空间详解

    Oracle表空间详解 1.表空间的分类 Oracle数据库把表空间分为两类:系统表空间和非系统表空间. 1.1系统表空间指的是数据库系统创建时需要的表空间,这些表空间在数据库创建时自动创建,是每个数 ...

随机推荐

  1. 编写高质量代码改善C#程序的157个建议——建议151:使用事件访问器替换公开的事件成员变量

    建议151:使用事件访问器替换公开的事件成员变量 事件访问器包含两部分内容:添加访问器和删除访问器.如果涉及公开的事件字段,应该始终使用事件访问器.代码如下所示: class SampleClass ...

  2. [Delphi] Webbroker ISAPI 示例说明

    新建Webbroker项目: 选择类型: 开始可以使用:Indy VCL Application 方便调试,完成后,再新建一个DLL 项目,引用业务单元.   示例代码如下: unit uDataMo ...

  3. TSQL--约束基础和Demo

    --============================================================ SQL SERVER 中使用constraint和role来对数据进行限制 ...

  4. c++调用c#写的DLL

    c++调用c#写的DLL: 此文章演示了建立c#的dll: c++建立工程,引入dll: 不能解决的问题: 指定dll的路径,在代码里面直接写 #using "xxx.dll" 必 ...

  5. C#设置图片透明度

    逐个像素进行Alpha值的设置,网上其他的代码不能处理有透明背景的图片,因此要对Alpha.R.G.B均为0的透明色进行特殊处理,不做转换. private Bitmap SetImageOpacit ...

  6. Django FileFieldManage

    default_storage >>> from django.core.files.base import ContentFile >>> from django ...

  7. iOS应用开发权限请求处理

    1.写在前面 APP开发避免不开系统权限的问题,如何在APP以更加友好的方式向用户展示系统权限,似乎也是开发过程中值得深思的一件事: 那如何提高APP获取iOS系统权限的通过率呢?有以下几种方式: 1 ...

  8. drf 三级菜单后台序列化以及数据库的设计

    第一种, model.py结构: class GoodsCategory(models.Model): """ 商品类别 """ CATEG ...

  9. iOS 图片的存储以及读取和删除

    将图片存储到本地 NSArray *dirArray = NSSearchPathForDirectoriesInDomains(NSCachesDirectory, NSUserDomainMask ...

  10. [转] Linux 硬件设备查看命令

    linux查看设备命令 系统 # uname -a # 查看内核/操作系统/CPU信息 # head -n 1 /etc/issue # 查看操作系统版本 # cat /proc/cpuinfo # ...