• 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、上面介绍的是常用的表空间介绍,下图中的就是特殊的表空间

  • 相关阅读:
    web.xml 中的listener、 filter、servlet 加载顺序及其详解
    AOP概念的理解
    webx学习总结
    如何设计编制软件测试用例(一~三)
    冒烟测试小结(转载)
    在web.xml不认<taglib>解决办法
    document.domain 跨域问题【转】
    判断图片是否加载完成
    指定步长中间值
    关于 contentWindow, contentDocument
  • 原文地址:https://www.cnblogs.com/GreenLeaves/p/6592343.html
Copyright © 2020-2023  润新知