数据文件和日志文件是数据库中最关键的文件。它们是数据存储的地方。每一个数据库至少有一个与之相关的数据文件,通常情况下不仅仅一个,有非常多。数据在数据文件里是怎样组织的?要了解这些内容我们首先必须理解什么是表空间(tablespace)、段(segment)、区(extent)、块(block),这些都是oracle数据库在数据文件里组织数据的基本单元。如今我们来理解这些概念。

     块是数据存储的物理单位,也是数据文件里最基础的单位,数据直接存储在块上。是oracle空间分配的最小单位。oracle中的块大小常见的有三种,2KB、4KB、8KB。块的大小在数据库创建时就已经固定下来,数据库中每一个块的大小都是同样的,并且全部的块都有同样的格式,由“块头+表文件夹+行文件夹+空暇空间+数据空间”组成。块头包括着块类型(比方是表块、还是索引块)的信息、磁盘上块的位置等信息。表文件夹(table directory),假设有的话,包括着此块中存储各行的表的信息(假设一个块中存有多个表中的数据)。行文件夹(row
directory)包括着数据行的描写叙述信息,它是一个指针数组,指示了每一行在数据块中的物理位置。块头、表文件夹、行文件夹统称为块开销(block overhead),是oracle原来统计、管理块本身的。剩下的两部分非常easy,已经存有数据的就是数据空间,临时没存的就是空暇空间。

     区又叫盘区,是数据文件里一个连续的分配空间,它比块要大,由块组成。有些对象分配空间时可能至少须要两个盘区,比方回滚段,而这两个盘区不一定要求相连。区的大小从一个块到2GB不等

     段是oracle数据库中的分配单位,对象如表、索引等都是以段为单位进行分配。当创建一个表时将创建一个表段,创建一个索引时就创建一个索引段。每个消耗存储空间的对象终于被存储到一个单一的段中。有回滚段、暂时段、聚簇段、索引段等。

    表空间是一个逻辑容器,它和数据文件关联起来,一个表空间至少有一个数据文件与之关联。一个表空间能够有多个段,一个段仅仅能属于一个表空间。

    方案(schema)又叫模式,是比表空间小一级的逻辑概念,它也是一个逻辑容器。多个用户可能共用一个表空间,那怎样区分开每个用户?那么在表空间中对每个用户都有一个相应的方案,用于保存单个用户的信息。

    oracle中存储的层次结构总结例如以下:

一、数据库由一个或多个表空间组成

二、表空间由一个或多个数据文件组成,一个表空间包括多个段

三、段由一个或多个区组成

四、区是数据文件里一个连续的分配空间,由一个或多个块组成

五、块是数据库中最小、最主要的单位,是数据库使用的最小的I/O单元

六、每一个用户都有一个相应的方案







1. service name 服务名(事实上就是:数据库名),装 ORACLE 时肯定要指定的一个名字

2. tablespace 表空间,数据库对象的磁盘存储位置

3. schema 方案,数据库对象的逻辑分类

4. user 用户,等同于 schema

5. service name > tablespace > schema(user)





具体说明:

schema 为数据库对象的集合,为了区分各个集合,我们须要给这个集合起个名字,这些名字就是我们在企业管理器的 schema 下看到的很多类似username的节点,这些类似username的节点事实上就是一个schema,schema 里面包括了各种对象如:tables,views,sequences,stored procedures,synonyms,indexes,clusters,and database links。



一个用户(user)一般相应一个 schema,该用户的 schema 名等于username,并作为该用户缺省的 schema。这也就是我们在企业管理器的 schema 下看到 schema 名都为数据库username的原因。Oracle 数据库中不能新创建一个 schema,要想创建一个 schema,仅仅能通过创建一个 user 的方法解决(Oracle 中尽管有 create schema 语句,可是它并非用来创建一个 schema 的),在创建一个 user 的同一时候为这个 user 创建一个与username同名的 schem
并作为该用户的缺省 shcema。即 schema 的个数同 user 的个数同样,并且 schema 名字同 user 名字一一相应并且同样,全部我们能够称 schema 为 user 的别名,尽管这样说并不准确,可是更easy理解一些。



一个 user 有一个缺省的 schema,其 schema 名就等于username,当然一个 user 还能够使用其它的 schema。假设我们訪问一个表时,没有指明该表属于哪一个 schema 中的,系统就会自己主动给我们在表上加上缺省的 sheman 名。比方我们在訪问数据库时,訪问 scott 用户下的 emp 表,通过select * from emp; 事实上,这 sql 语句的完整写法为 select * from scott.emp。在数据库中一个对象的完整名称为 schema.object,而不属 user.object。类似假设我们在创建对象时不指定该对象的
schema,在该对象的 schema 为 user 的缺省 schema。这就像一个 user 有一个缺省的 tablespace,可是该 user 还能够使用其它的 tablespace,假设我们在创建对象时不指定 tablespace,则对象存储在缺省 tablespace 中,要想让对象存储在其它 tablespace 中,我们须要在创建对象时指定该对象的 tablespace。



举比例如以下:

SQL> Gruant dba to scott

SQL> create table test(name char(10));

Table created.



SQL> create table system.test(name char(10));

Table created.



SQL> insert into test values('scott');

1 row created.



SQL> insert into system.test values('system');

1 row created.



SQL> commit;

Commit complete.



SQL> conn system/manager

Connected.



SQL> select * from test;

NAME

----------

system



SQL> ALTER SESSION SET CURRENT_SCHEMA = scott; --改变用户缺省schema名

Session altered.



SQL> select * from test;

NAME

----------

scott



SQL> select owner ,table_name from dba_tables where table_name=upper('test');

OWNER TABLE_NAME

------------------------------ ------------------------------

SCOTT TEST

SYSTEM TEST



--上面这个查询就是将 schema 作为 user 的别名的根据。实际上在使用上,shcema 与 user 全然一样,没有什么差别,在出现 schema 名的地方也能够出现 user 名。



schema 和 user 通常是一致的,建立一个 user 后就可以得到一个 schema,如:HR 用户建立后便有 HR 方案,接下来建立表、索引等数据库对象时,要指定其属于哪个 schema,也要指定其存放在哪个 tablespace 里。

也能够这样理解,schema 是数据库对象的逻辑归属和分类,而 tablespace 是数据库对象的物理和实际存放位置。





  Schema 就是用户所属对象的一个集合,对象包含表,索引,视图,JAVA,PL/SQL块等。

     Schema 的名字与username一样,当创建一个用户时,这个用户所相应的shema也同一时候创建,username与schema交互使用。

     Schema 与tablespace之间没有什么联系,同一个schema的对象能够存储在不同的表空间中,同一个表空间中能够存储不同schema的对象。

    不要在SYS和SYSTEM SCHEMA下创建其他数据对象。

    Schema is the collection of database objects owned by a database user.

    Schema has the same name as the user owns it.

    Schema objects include structures such as tables,views,indexes,Java,PL/SQL etc..

    Schema is no relationship with tablespace.

    Object in the same schema can be in different tablespaces.

    When a database user is created,acorresponding schema with the same name is created for that user.

    Username and Schema are offen used interchangeably.

oracle之表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)的更多相关文章

  1. oracle撤销表空间和回滚段

    /* 撤销表空间 */ 通过使用撤销技术,能够为Oracle数据库提供以下功能: * 使用ROLLBACK语句撤销事务 * 进行数据库恢复 * 提供数据的读一致性 Oracle强烈建议DBA在Orac ...

  2. oracle 创建表空间TABLESPACE

    题外话: 在oracle中,我们的数据库用户都有一个默认表空间归属,当在该用户下创建表或其他对象时默认会将其归属在默认表空间: 不排除后期修改了用户默认表空间的情况存在,此后新加入的对象默认会放置在新 ...

  3. oracle 删除表空间TABLESPACE步骤及注意项

    告诉大家,我喜欢通过toad for oralce来实现对oracle数据库的操作. 1.首先通过数据库管理员用户以SYSDBA身份登录.比如使用sys用户去登录 2.查看和记录待删除表空间所在的物理 ...

  4. 【Oracle】表空间管理

    --表空间管理为主.附带 权限管理.数据字典 /* 表空间是逻辑结构,数据文件是物理结构 一个表空间对应多个段segment 段可以对应多个数据文件.跨磁盘 一个段对应多个盘区 extent 一个盘区 ...

  5. oracle中的表空间(tablespace)、方案(schema)、段(segment)、区(extent)、块(block)

    数据文件和日志文件是数据库中最重要的文件.它们是数据存储的地方.每个数据库至少有一个与之相关的数据文件,通常情况下不只一个,有很多.数据在数据文件中是如何组织的?要了解这些内容我们首先必须理解什么是表 ...

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

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

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

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

  8. oracle 表空间tablespace

    一.Oracle 表空间的组成 Everoone knows Oracle数据库真正存放数据的是数据文件,Oracle表空间是逻辑上的概念,他在物理上是并不存在的,把多个DataFile合并到一起就是 ...

  9. Oracle表空间、段、区和块简述

    本文转载自:http://blog.itpub.net/17203031/viewspace-682003/ 在Oracle学习过程中,存储结构,表段区块可能是每个初学者都要涉及到的概念.表空间.段. ...

随机推荐

  1. 洛谷P1525关押罪犯

    传送门啦 想让最大值最小,所以,这题可以用二分法,排序之后发现可以并查集,因为要使最大值最小,排序后这个最大值是存在的. 对于会冲突的两个罪犯,我们连一条无向边,然后按权值从大到小排序,从大到小枚举每 ...

  2. TObjectList

    AOwnsObjects = true 就是  objectlist释放的时候,里面的对象一并释放. TObjectList对象的创建方法有一个参数:constructor TObjectList.C ...

  3. HDU 1054 Strategic Game(最小路径覆盖)

    题目链接:http://acm.hdu.edu.cn/showproblem.php?pid=1054 题目大意:给你一棵树,选取树上最少的节点使得可以覆盖整棵树. 解题思路: 首先树肯定是二分图,因 ...

  4. Java容器---迭代器

    任何容器类,都必须有某种方式可以插入元素并将它们再次取回.毕竟,持有事物是容器最基本的工作. 对于List, add0是插入元素的方法之一,而get()是取出元素的方法之一. 如果从更高层的角度思考, ...

  5. Hadoop案例(十一)MapReduce的API使用

    一学生成绩---增强版 数据信息 computer,huangxiaoming,,,,,,, computer,xuzheng,,,,, computer,huangbo,,,, english,zh ...

  6. 丑数(UVa136)

    题目具体描述见:https://uva.onlinejudge.org/index.php?option=com_onlinejudge&Itemid=8&category=835&a ...

  7. day6 subprocess模块、logging模块

        logging模块 很多程序都有记录日志的需求,并且日志中包含的信息即有正常的程序访问日志,还可能有错误.警告等信息输出,python的logging模块提供了标准的日志接口,你可以通过它存储 ...

  8. MFC+WinPcap编写一个嗅探器之五(过滤模块)

    这一节主要介绍如何获设置捕获过滤,这里的过滤是指在捕获前过滤 设置捕获过滤主要是在CFilterDlg中完成,也就是对应之前创建的设置过滤规则对话框,如图: 首先要根据用户的选择来生成一个合法的过滤规 ...

  9. 【LOJ】#2062. 「HAOI2016」地图

    题解 我对莫队真是一无所知 这个东西显然可以用圆方树转成一个dfs序列 然后呢,用莫队计算每个询问区间的每个数出现的次数,从而顺带计算每个数字的奇偶性 但是我们要查的数字也用一个范围,可以直接用分块维 ...

  10. bzoj 1879 容斥

    暴力求容斥系数或者直接组合数求容斥系数都可以. #include<bits/stdc++.h> #define LL long long #define fi first #define ...