首页 > 技术文章 > oracle入坑日记<四>表空间

MirageFox 2019-01-08 15:10 原文

 

1
 
表空间是什么

1.1、数据表看做的货品,表空间就是存放货品的仓库。SQLserver 用户可以把表空间看做 SQLserver 中的数据库。

1.2、引用【日记二】的总结来解释表空间。

一个数据库由一个或多个表空间组成,一个表空间只能属于一个数据库
一个表空间由一个或多个多个数据文件组成,一个数据文件只能属于一个表空间
一个数据文件由一个或多个操作系统块组成,每一个操作系统块只能数以一个数据文件
一个表空间可以包含一个或多个段,一个段只能属于一个表空间
一个段由一个或多个区组成,每一个区只能属于一个段
一个区由一个或多个Oracle 块组成,每一个Oracle块只能属于一个区
一个区只能属于一个数据文件,数据文件的空间可以分配到一个或多个区
一个Oracle 块由一个或多个操作系统块组成,一个操作系统块是一个Oracle块的一部分

 

 

2
 
表空间分类、作用

2.1、表空间有三种:

  2.1.1、数据表空间:用于存放数据(表)的主要表空间;

  2.1.2、临时表空间:在数据库进行排序运算、管理索引、访问视图等操作时提供临时的运算空间,当运算完成之后系统会自动清理;

  2.1.3、UNDO表空间:主要作用是 事务恢复、事务回滚、读一致性 :

    2.1.3.1、事务恢复:在进行DML操作时,insert、update、delete操作时,undo段记录事务的反向操作并且redo日志也记录undo段的操作,既redo保护undo段的信息。当实例关闭或意外崩溃后,再次open(打开)时实例需要对没有commit(提交)的事务进行回滚,完成事务的恢复。

    2.1.3.2、事务回滚:用户进行DML操作后没有进行commit(提交),需要修改前的数据。只要该操作在undo段保护的时间内,此时执行rollback(回滚)操作可以回滚到最近记录点或上一次commit(提交)操作后的状态,恢复到数据修改前的状态。

    2.1.3.3、读一致性:当进行DML操作时,undo段会记录数据变更前的状态(通过构造原数据的一致性数据块)。如果用户还没有进行commit(提交)操作,其他人查询此条数据会看到数据变更前的状态。因为其他用户读到的数据是undo段中原数据块中的数据,保证没有commit(提交)的数据读取的一致性。

 

 

3
 
创建表空间

  3.1、创建临时表空间

-- 创建临时表空间
create temporary tablespace [tempspace_name] 
tempfile [dbf_path]         --指定表空间dbf文件存放位置
size 50m                    --初始大小50m
autoextend on
next 50m maxsize 20480m     --自动增长50m 最大2g
extent management local;

3.2、创建数据表空间

-- 创建数据表空间
create tablespace [tablespace_name]
logging  
datafile [dbf_path]         --指定表空间dbf文件存放位置
size 50m                    --初始大小50m
autoextend on  
next 50m maxsize 20480m     --自动增长50m 最大2g
extent management local; 

3.3、创建用户并指定表空间(也可以直接给已有用户指定表空间)

--创建用户并指定表空间
create user [user_name] identified by [password]  --创建用户
default tablespace [tablespace_name]              --指定数据表空间
temporary tablespace [tempspace_name];            --指定临时表空间
--已有用户指定表空间
alter user [user_name] default tablespace [tablespace_name];

如果新建用户指定完表空间后需要授权  grant connect,resource,dba to [user_name]; 

4
 
删除表空间

4.1、删除表空间  drop tablespace [tablespace_name] including contents and datafiles; --删除表空间及数据文件 

4.2、 表空间文件无法直接手动删除。若强行删除dbf文件,可能引起数据库异常。

<<============================================================================================================================================>>

此日记系列仅做普通开发使用Oracle,并非专业DBA
 

推荐阅读