之前学习Oracle数据库之后,对于表空间、用户、schema
等概念一直有些模糊,也没有理清楚他们之间的关系,最近回过头重新看了这部分的知识后,将自己对这方面的知识点做一下小结,本篇文章并不是常规的技术文章,只作为个人的小结分享。
先说说什么是Oracle数据库
Oracle数据库是能满足我们存取数据需要的数据管理系统。完整的Oracle数据库通常由两部分组成:物理数据库和数据库实例。也就是说,Oracle数据库是物理存储和内存进程的集合。
- 数据库是一系列物理文件的集合(数据文件,控制文件,联机日志,参数文件等);
- Oracle数据库实例则是一组Oracle后台进程/线程以及在服务器分配的共享内存区。
什么是数据库实例
当我们启动数据库服务时,就会在内存中创建一个数据库实例出来,由这个Oracle数据库实例来访问和控制磁盘中的数据文件,常见的数据库实例有ORCL
。这个过程可以想象成是JAVA中根据class
类new
出了一个对象出来,我们可以根据这个对象调用具体的数据库方法。一个数据库可以有多个实例,在作数据库服务集群的时候可以用到。
正如上面介绍的一样,数据库实例是Oracle数据库的组成部分,是在内存中运行,为用户提供访问和操作数据库的后台进程。
什么是表空间(Table Space)?
Oracle数据库是通过表空间来存储物理表的,一个数据库可以划分为多个表空间,每个表空间可以存储多张表。表空间是数据库的逻辑划分,每个数据库至少有一个表空间(称作SYSTEM
表空间)。把数据库当做一个大仓库,为了管理方便,我们可以人工将这一片大的空间分为A、B、C等区间,这样的A/B/C区间就相当于是表空间。(也可以理解为是去餐厅吃饭,每张桌子上面都有一个桌号,方便服务员上菜)。
关于用户
有了表空间,下一步自然是建表。但是在建表之前还有一步,就是要先创建用户,只有用户才能建表。用户是独立于表空间的存在,我们可以从上面的介绍中知道表空间其实也是数据存储的容器,但用户可以理解为是数据的归属者。还是举仓库的例子,仓库提供的只是存放物料的空间,但物料的管理人还是具体的一个个的仓管,也就是用户。当然了,仓管应该有属于自己的管辖范围和权限,所以需要为仓管定义好货物具体存放的位置。所以对于用户来说,我们也需要为其指定好对应的表空间。
什么是Schema(方案)?
方案(schema
)又叫模式,是比表空间小一级的逻辑概念,它也是一个逻辑容器。Schema
为数据库对象的集合,为了区分各个集合,我们需要给这个集合起个名字。schema里面包含了各种对象如tables
, views
, sequences
, stored procedures
, synonyms
, indexes
, clusters
, 和 database links
。
我们知道一共表空间可以被多个用户共用,那如何区分开每一个用户?那么在表空间中对每个用户都有一个对应的方案,用于保存单个用户的信息。举仓库的例子来说,我们现在把仓库的A区进一步分为N个房间,每个房间是属于特定的仓管的,这一个个的能够存储货物的房间就相当于是schema
,一个房间由一个仓管负责。
关于数据文件(dbf、ora):
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真 正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
关于表数据和用户的关系
表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。由于oracle的数据库不是普通的概念,oracle是有用户和表空间对数据进行管理和存放的。但是表不是有表空间去查询的,而是由用户去查的。因为不同用户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!

参考资料:
Oracle数据库、实例、用户、表空间、表之间的关系 https://blog.csdn.net/NRlovestudy/article/details/49684571
表空间与用户的关系 表空间和数据文件的关系 https://www.cnblogs.com/lion88/p/4343890.html
网友评论