一、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. 弱网测试弱网测试—Network-Emulator-Toolkit

    原文:https://blog.csdn.net/no1mwb/article/details/53638681

  2. 使用 JAVA 中的动态代理实现数据库连接池

    数据库连接池在编写应用服务是经常需要用到的模块,太过频繁的连接数据库对服务性能来讲是一个瓶颈,使用缓冲池技术可以来消除这个瓶颈.我们可以在互联网上找到很多关于数据库连接池的源程序,但是都发现这样一个共 ...

  3. sqlite3使用详解(Qt版本)

    初始化sqlite3 (创建表) QString url = QDir::currentPath() + QString::fromLocal8Bit("/Msg.db"); bo ...

  4. MongoDb安全配置:简单的身份认证

    mongod默认启动不加任何参数时,是没有身份认证的,任何人都可以登录上进行任何操作 启动时添加--auth可以使用身份验证模式 使用mongod -f mongod.conf配置文件启动时,配置文件 ...

  5. MVC4 路由解析 同名Controller的解决方案

    通常我们在MVC中通过Area建立子站的时候会有 controller名称重复的情况,这是后如何区分路由优先级, 我们知道 在Route对象中存在RouteValueDictionary 类型的Dat ...

  6. DATEADD和DATEDIFF

    DateAdd函数 返回 返回包含一个日期的 Variant (Date),这一日期还加上了一段时间间隔. 语法 DateAdd(interval, number, date) DateAdd 函数语 ...

  7. Huawei .V3 Extention audio Play

    相关dll下载 链接 using System;using System.IO;using System.Threading;using Alvas.Audio;using NAudio.Wave; ...

  8. List<object>进行Distinct()去重

    有时我们会对一个list<T>集合里的数据进行去重,C#提供了一个Distinct()方法直接可以点得出来.如果list<T>中的T是个自定义对象时直接对集合Distinct是 ...

  9. C++ STL详解

    C++ STL详解 转载自:http://www.cnblogs.com/shiyangxt/archive/2008/09/11/1289493.html 一.STL简介 STL(Standard ...

  10. Python【filter、map、reduce】

    filter和map和reduce map(function,iterable...) -> list 映射,对列表中的每个值操作 返回操作后的数值组成列表 # 给列表值+1 l = [1,2, ...