一、Oracle表空间概述

表空间是Oracle数据库中最大的逻辑结构。它提供了一套有效组织数据的方法,是组织数据和进行空间分配的逻辑结构,可以将表空间看做是数据库对象的容器。检点第说,表空间就是一个或多个是数据文件(物理文件)的集合(逻辑文件),所有的数据对象都被逻辑地存放在指定的表空间中。

Oracle的表空间属于Oracle中的存储结构,是一种用于存储数据库对象(如:数据文件)的逻辑空间,是Oracle中信息存储的最大逻辑单元,其下还包含有段、区、数据块等逻辑数据类型。表空间是在数据库中开辟的一个空间,用于存放数据库的对象,一个数据库可以由多个表空间组成。可以通过表空间来实现对Oracle的调优。(Oracle数据库独特的高级应用)

一个数据库通常包括SYSTEM、SYSAUX和TEMP三个默认表空间,一个或多个临时表空间,还有一个撤销表空间和几个应用程序专用的表空间。可以通过创建新的表空间来满足需求,创建时需要决定表空间的类型。

二、Oracle表空间类型

1、系统表空间(System tablespace)

系统表空间包括SYSTEM和SYSAUX表空间,系统表空间是所有数据库必须且自动创建的,一般存放Oracle的数据字典及相应数据。

2、永久表空间(Permanent tablespace)

永久表空间用于保存永久性数据,如系统数据、应用系统数据。每个用户都会被分配一个永久表空间,以便保存其相关数据。除了撤销表空间以外,相对于临时表空间而言,其他表空间就是永久表空间,如系统表空间。

3、临时表空间(Temporary tablespace)

由于Oracle工作时经常需要一些临时的磁盘空间,这些空间主要在查询带有排序(如Group by、Order by等)算法时使用,当用完后就立即释放,对记录在磁盘区的信息不再使用,因此称为临时表空间。一般安装之后只有一个TEMP临时表空间。

4、撤销表空间(Undo tablespace)

从Oracle 9i后,提供了一种全新的撤销空间管理方式,从而使得DBA能够很容易地管理撤销空间,即“自动撤销管理”。而与此相对应,通过回滚端进行撤销空间管理的方式呗称为“手工撤销管理”。自动撤销管理方式也称为SMU(System Managed Undo)方式,而回滚段管理方式称为RBU(Rollback Segments Undo)方式。在Oracle 11g数据库中,系统默认为弃用自动撤销表空间管理方式,同时也支持传统的回滚段管理方式。

在一个数据库中,只能采用一种撤销空间管理方式,而不能同时存在两种撤销空间管理方式。数据库采用哪一种撤销空间管理方式,是由参数UNDO_MANAGEMENT来确定的。如果设置该参数为“AUTO”,在启动数据库时使用SMU方式:如果设置为“MANUAL”,则在启动数据库时使用RBU方式,运行在自动撤销数据来隐式或显示的回退事务、提供数据的度已执行、帮助数据库从逻辑错误中恢复、实现闪回 查询(Flashback Query)。

注意:在SMU方式下,必须在数据库中黄建一个撤销表空间看,Oracle将利用撤销表空间来保存撤销记录。可以在创建数据库的同事建立一个默认的撤销表空间,也可以在数据库创建后再创建新的撤销表空间。

5、大文件表空间和小文件表空间

从Oracle 10g开始,Oracle引入了大文件表空间,这是一个新增的表空间类型。该类型的出现时存储能力有了显著的增强。大文件表空间不想传统的表空间那样由多个数据文件组成。

大文件表空间(bigfile tablespace)是为了超大型数据库而设计的,如果一个超大型数据库具有上千个数据文件,则更新数据文件头部信息(如check-point)的操作可能会花费很长时间。如果使用大文件表空间,可以使用哦大数据文件来减少文件的数量,从而减少更新的时间。

提示:一个大文件表空间对应一个单一的数据文件或临时文件,但是文件可以达到4G数据块大小。理论上当数据块代销为2KB时,大文件表空间可以达到8TB;当数据快大小为4KB时,大文件表空间可以达到32TB。在实际环境中,者还会受到操作系统的文件系统的限制。

小文件表空间(smallfile tablespace)是之前Oracle表空间在Oracle 11g中的新名称,是默认创建的表空间的类型。在小文件表空间中可以防止多达1022个数据文件,一个数据库最多可以防止64K个数据文件。SYSTEM和SYSAUX表空间总是被创建为小文件表空间。

三、Oracle表空间状态

出于不同的使用需求,对表空间设置了不同的状态。通过该表表空间的状态,可以控制表空间的可用性和安全性,也可以为相关的备份恢复等工作提供保障。表空间有以下几种状态:

1、读写(Read-Write)状态

这是表空间的默认状态。任何具有表空间配额并拥有相关权限的用户均可读写表空间的数据。

2、只读(Read-Only)状态

如果将表空间设置为只读状态,则任何用户(包括DBA)均无法向表空间写入数据,也无法修改表空间中的现有数据,这种限制和权限无关。

只读状态可以使表空间的数据不被修改,即仅能SELECT,而无法进行INSERT、UPDATE或是DELETE操作。只读状态一方面对数据提供了保护,另一方面对数据库中设置静态数据非常有好处。我们可以将不能被修改的静态数据保存在一个单独的表空间中,并将这个表空间设置为只读状态,这样既能够提高数据的安全性,又能够减轻DBA的管理和维护的负担。

3、脱机(Offline)状态

在有多个应用表空间的数据库中,DBA可以通过将某个应用表空间设置为脱机状态,是表空间暂时不被用户访问。如果需要访问该表空间时,必须将脱机状态设置为联机状态。这样的设置增强了表空间的可用性,并提高了数据库管理的灵活性。

注意:SYSTEM表空间不能被何止为只读状态和脱机状态,因为在数据库运行过程中始终需要SYSTEM表空间数据的支持;另外,零食表空间也不能设置为只读状态。

四、Oracle表空间作用

对Oracle数据库来说,引入表空间概念具有以下作用:

  • 控制用户所暂用的控件配额。
  • 控制数据库所暂用的磁盘空间。
  • 可以将表空间设置成只读状态而保证大量的静态数据不被修改。
  • 能够将一个表的数据和这个表的索引数据分别存储在不同的表空间中,也可以提高数据库的I/O性能。
  • 可通过其将不同表的数据、分区表的不同分区的数据存储在不同的表空间中,可以提高数据库的I/O性能,并有利于进行数据库的部分备份和恢复等管理工作。
  • 表空间提供了一个备份和恢复的单位,Oracle提供了按表空间备份和恢复的功能。

五、Oracle表空间操作

1、查看system用户的默认表空间和临时表空间:

select DEFAULT_TABLESPACE,TEMPORARY_TABLESPACE
from dba_users
where username='SYSTEM';

2、查看system用户的默认永久表空间:

SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES;

3、查看默认的TEMP表空间:

  • 系统管理员:
SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME='DEFAULT_TEMP_TABLESPACE';
  • 所有用户:
SELECT USERNAME, TEMPORARY_TABLESPACE FROM DBA_USERS

4、查看默认的表空间类型:

SELECT PROPERTY_NAME, PROPERTY_VALUE
FROM DATABASE_PROPERTIES
WHERE PROPERTY_NAME='DEFAULT_TBS_TYPE';

5、查看表空间使用情况:

SELECT A.TABLESPACE_NAME                     AS TABLESPACE_NAME, ROUND(A.BYTES/(1024*1024*1024),2)    AS "TOTAL(G)"     , ROUND(B.BYTES/(1024*1024*1024),2)    AS "USED(G)"      , ROUND(C.BYTES/(1024*1024*1024),2)    AS "FREE(G)"      , ROUND((B.BYTES * 100) / A.BYTES,2)   AS "% USED"       , ROUND((C.BYTES * 100) / A.BYTES,2)   AS "% FREE"
FROM SYS.SM$TS_AVAIL A, SYS.SM$TS_USED B, SYS.SM$TS_FREE C
WHERE A.TABLESPACE_NAME = B.TABLESPACE_NAME
AND A.TABLESPACE_NAME = C.TABLESPACE_NAME;

6、计算表空间使用情况(考虑了数据文件自动增长的情况):

SELECT UPPER(F.TABLESPACE_NAME) AS "表空间名称", ROUND(D.AVAILB_BYTES ,2) AS "表空间大小(G)", ROUND(D.MAX_BYTES,2) AS "最终表空间大小(G)", ROUND((D.AVAILB_BYTES - F.USED_BYTES),2) AS "已使用空间(G)", TO_CHAR(ROUND((D.AVAILB_BYTES - F.USED_BYTES) / D.AVAILB_BYTES * 100, 2), '999.99') AS "使用比", ROUND(F.USED_BYTES, 6) AS "空闲空间(G)", F.MAX_BYTES AS "最大块(M)" FROM (SELECT TABLESPACE_NAME, ROUND(SUM(BYTES) / (1024 * 1024 * 1024), 6) USED_BYTES, ROUND(MAX(BYTES) / (1024 * 1024 * 1024), 6) MAX_BYTES FROM SYS.DBA_FREE_SPACE GROUP BY TABLESPACE_NAME) F, (SELECT DD.TABLESPACE_NAME, ROUND(SUM(DD.BYTES) / (1024 * 1024 * 1024), 6) AVAILB_BYTES, ROUND(SUM(DECODE(DD.MAXBYTES, 0, DD.BYTES, DD.MAXBYTES))/(1024*1024*1024),6) MAX_BYTES FROM SYS.DBA_DATA_FILES DD GROUP BY DD.TABLESPACE_NAME) D WHERE D.TABLESPACE_NAME = F.TABLESPACE_NAME
ORDER BY 4 DESC

7、查看数据库拥有的表空间:

  • 包含数据库中所有表空间的描述信息:
SELECT * FROM DBA_TABLESPACES;  
  • 包含当前用户的表空间的描述信息:
SELECT * FROM USER_TABLESPACES; 
  • 包含从控制文件中获取的表空间名称和编号信息:
SELECT * FROM V$TABLESPACE;

8、查看表空间中的数据文件:

  • 包含数据文件以及所属的表空间的描述信息(永久表空间/UNDO表空间)
SELECT * FROM DBA_DATA_FILES;
  • 包含临时数据文件以及所属的表空间的描述信息
SELECT * FROM DBA_TEMP_FILES;
SELECT * FROM V$TEMPFILE;
  • 包含从控制文件中获取的数据文件的基本信息,包括它所属的表空间名称、编号等
SELECT * FROM V$DATAFILE;
  • 包含所有临时数据文件的基本信息
SELECT * FROM V$TEMPFILE;

9、查看用户拥有的表空间:

  • 系统管理员用户使用dba_tablespaces数据字典查看
select tablespace_name from dba_tablespaces;
  • 普通用户使用user_tablespaces数据字典查看
select tablespace_name from user_tablespaces;

六、Oracle创建表空间

1、基本语法:

Create [TEMPORARY] TABLESPACE tablespace_name
TEMPFILE|DATAFILE 'fileName.dbf'
size xx
[autoextend on|off]
[next xx] 

解释:

tablespace_name : 为表空间名称
datafile : 用于设置物理文件名称 
size : 用于设置表空间的初始大小
autoextend on : 用于设置自动增长,如果存储量超过初始大小,则开始自动扩容
next : 用于设置扩容的空间大小

2、实例:

create tablespace test_tablespace
datafile 'c:\test_tablespace.dbf'
size 100m
autoextend on
next 10m

七、Oracle修改表空间的状态

1、设置表空间的联机或脱机状态:

表空间的默认状态是联机状态,如果表空间是脱机状态,那么我们就不能够使用这个表空间了

  • 基本语法:
ALTER TABLESPACE tablespace_name ONLINE|OFFLINE;
  • 实例:
alter tablespace test_tablespace offline;

2、设置表空间的只读|可读写状态:

表空间默认为可读写的状态

注意:如果表空间状态中拥有可read,那么表空间就必须是联机状态。

  • 基本语法:
ALTER TABLESPACE tablespace_name [read only][read write];
  • 实例:
alter tablespace test_tablespace read only;

八、Oracle修改表空间的数据文件

1、增加表空间中的数据文件

  • 基本语法:
ALTER TABLESPACE tablespace_name ADD DATAFILE'xx.dbf' SIZE xx;
  • 实例:
alter tablespace test_tablespace add datafile 'test1_tablespace.dbf' size 10m;

注意:如果发现某个表空间存储空间不足时,可以为表空间添加新的数据文件,扩展表空间大小

2、调整数据文件的大小

ALTER DATABASE DATAFILE 'c:\test_tablespace.dbf' RESIZE 500M;

3、删除数据文件

注意:不能够删除表空间中的第一个数据文件,如果将第一个数据文件删除的话,相当于删除了整个表空间。

  • 基本语法:
ALTER TABLESPACE tablespace_name DROP DATAFILE'filename.dbf';
  • 实例:
alter tablespace test_tablespace drop datafile 'test1_tablespace.dbf';

九、Oracle删除表空间

  • 基本语法:
DROP TABLESPAC tablespace_name [INCLUDING CONTENTS];
  • 实例:
drop tablespace test_tablespace including contents;

注意:如果你希望在删除表空间的同时将表空间中的数据文件一同删除,需要加上[INCLUDING CONTENTS] 

Oracle --- 表空间相关推荐

  1. Oracle 表空间扩容

    2019独角兽企业重金招聘Python工程师标准>>> 1.查询当前表空间使用情况 col FILE_NAME format a50; col SPACE_NAME format a ...

  2. oracle 创建空文件系统,六分钟学会创建Oracle表空间的实现步骤

    经过长时间学习创建Oracle表空间,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西. 1.先查询空闲空间 select tablespace_name,file_id,blo ...

  3. navcat设置oracle表主键自增_初识 Oracle 表空间设置与管理

    本文出自头条号老王谈运维,转载请说明出处. 前言 表空间是 Oracle 特有的一种逻辑结构,是管理和组织 Oracle 数据文件一种方式,一个Oracle 数据库能够有一个或多个表空间,而一个表空间 ...

  4. Oracle 表空间 创建参数 说明

    一. 表空间的说明 官网的几个链接: Logical Storage Structures http://download.oracle.com/docs/cd/E11882_01/server.11 ...

  5. 六分钟学会创建Oracle表空间的步骤

    经过长时间学习创建Oracle表空间,于是和大家分享一下,看完本文你肯定有不少收获,希望本文能教会你更多东西. 1.先查询空闲空间 select tablespace_name,file_id,blo ...

  6. Zabbix 3.2.6 通过Discovery批量监控Oracle表空间

    一.背景 接到任务,要求对所有数据库的所有表空间进行监控,愿意是遇到表空间不足导致业务数据库的不可用,我们知道通过Zabbix监控Oracle的插件有一些,比如Orabbix或者Pyora,前者通过J ...

  7. zabbix自动发现oracle表空间并监控其使用率

    监控需求 Oracle表空间使用率实时监控,当表空间使用率达到95%时触发告警机制.Oracle表空间分为系统默认表空间和用户创建的表空间,而表空间又有自动扩展和非自动扩展两种类型,用户(DBA)在创 ...

  8. oracle导入dmp文件报错12154,oracle表空间的创建及dmp 文件的导入(推荐)

    --用oracle系统权限的账号 登陆 -- 1.创建用户 create user u_name identified by "u_password"; --2.赋予权限 gran ...

  9. oracle表空间于表数据啥意思,初识Oracle表空间与数据文件

    初识Oracle表空间与数据文件,描述oracle数据库的逻辑结构,创建表空间,改变表空间大小,为临时段分配空间,改变表空间状态,改 学习目标 1.描述Oracle数据库的逻辑结构 2.创建表空间 3 ...

  10. oracle查表文件大小,Oracle表空间使用大小查询

    1.查询一个表的物理空间数量:select segment_name,sum(bytes)/1024/1024 from user_extents where segment_type = 'TABL ...

最新文章

  1. java测试不成功_为什么我的Java布尔测试总是失败?
  2. Jquery_异步上传文件多种方式归纳
  3. trados 有道api_各平台免费翻译API
  4. NYOJ243 - 交换输出
  5. 互联网+商业 济宁苏宁生活广场打造智慧城市范本
  6. java入门第二季--封装--java中的this
  7. 小知识--电脑隐藏文件
  8. k3导入账套_金蝶k3凭证导入导出的操作方法金蝶k3操作指南
  9. 粒子群算法 模拟退火算法
  10. 浅析PWM控制电机转速的原理
  11. U盘插入计算机不显示图标,Win7下将U盘插入电脑后不显示图标的解决方法
  12. 关联分析python代码
  13. python触屏模块_触摸屏滚动Tkinter Python
  14. git 主干修改合并到分支_git分支与主干合并操作
  15. IPv6邻居发现协议添加默认路由
  16. web表格CSS 属性
  17. 【软件部署】Linux系统yum方式安装Jenkins
  18. 魅魔php影视系统,魅魔PHP影视系统 v6.1 20120307 中文免费版下载
  19. 软件测试案例实践:银行如何做大规模自动化测试?
  20. Linux性能优化学习

热门文章

  1. 现在买基金的人很多,我用Python写了个快速追踪基金的收益情况!所以说没有它做不了的事!
  2. 基于Python的拉勾网的模拟登录获取cookie
  3. 285. 二叉搜索树中的中序后继
  4. Unity网格编程篇(三) 温度图、热力图
  5. Junit测试运行出现No tests were found
  6. 计算机音乐蜡笔小新,蜡笔小新背景音乐-原创
  7. 如何选择最合适的服务器?服务器配置方案
  8. 如何读懂 MySQL rw-lock 锁的统计信息
  9. 如何编辑微信文章(微信文章导出word)
  10. 网络面试一百问<待整理>