表空间是数据库的逻辑存储空间,可以理解为表空间是数据库开辟的一个空间,用于存放数据库的对象。表空间是由一个或者多个数据文件构成的。我们存放的表,数据库对象等,都是存放在表空间中的数据文件里的。
表空间分为永久表空间,临时表空间,UNDO表空间。
- 永久表空间主要存储数据库当中需要永久存储化的一些对象。比如表,视图等。
- 临时表空间主要存储数据库在操作过程中,中间执行的过程,当执行结束后,存放的内容就自动被释放掉。
- UNDO表空间用于数据在被修改之前的数据,当一张表进行修改时,它会保存表之前的数据。用于回滚。
在oracle中,使用不同用户登录,所对应的表空间也有所不同。首先介绍两个数据字典(数据字典是指对数据的数据项、数据结构、数据流、数据存储、处理逻辑等进行定义和描述)
- dba_tablespaces:针对系统管理员用户来查看的数据字典。
- user_tablespaces:普通用户登录后查看的数据字典。
用system用户连接到数据库后,查询dba_tablespaces。
查询结果表示dba_tablespaces这个数据字典有列名有TABLESPACE_NAME,NOT NULL表示不能为空,类型为可变字符类型,长度为30。列名为BOLOCK_SIZE的这一列不能为空,类型为NUMBER。后面的以此类推。
然后在查询一下表空间有哪些。
可以看到,用system登录数据库后,默认的表空间就有5个。
- SYSTEM:主要sys用户存放表,视图,也叫系统表空间。
- SYSAUX:作为辅助表空间。
- UNDOTBS1:用于存放一些撤销信息,属于UNDO类型表空间。
- TEMP:用于存储一些SQL语句处理的表,和索引信息,属于临时表空间。
- USERS:存储数据库用户创建的数据库对象。
普通用户登录数据库只能查看user_tablespaces,不能查看dba_tablespace。user_tablespaces的表空间与dba_tablespace的名字一样。
每一个用户对应着默认的表空间,可以多个用户共用同一个表空间。也可以指定一个用户只用某一个表空间,如果不指定,就默认为users表空间。
现在有两个连接,一个是system系统管理员用户登录了数据库。一个是scott普通用户登录数据库。
我创建scott用户的时候没有指定表空间,所以它指定的是默认表空间。用selcet查询一下
可以看到scott用户指定的表空间是默认的USERS表空间(scott用户的名字是C##scott),scott用户创建的表就默认放在USERS表空间
system用户的指定表空间为SYSTEM。
sys用户指定的表空间为SYSTEM。
sys、system管理员创建的表就放在SYSTEM表空间。
总结:
之前边看视频边查资料,对于表空间的理解还是云里雾里,但是自己动手写了几个例子后,还是有了一个大概的理解。首先表空间是划分数据库的逻辑空间。相当于数据库是一个大仓库。表空间就是地上画的粉笔线。用来区分存放物品的位置。用户就相当于使用仓库的人。sys和system都是管理员用户。相当于仓库管理员。可以划分新的表空间。也可以删除或者改动表空间。
一开始这个仓库(数据库)就划分了5个区域(表空间)。用来存放东西或者使用。仓库管理员(sys,system)就负责管理仓库的事物。除了管理员,还有普通的员工(普通用户)。比如今天新来了个员工小王,仓库管理员就告诉小王。我给你划了块地方(给用户指定表空间)。你以后干什么就用这块地。然后又来了个员工小张,仓库管理员也告诉小张“你和小王用同一块地就行了”(一个表空间可以被多个用户共用)。之后又有一个新员工小李。仓库管理员没有告诉他用哪里。小李就使用了默认的的一块地(默认使用USER表空间)。
、