oracle表空间相关
数据库被划分为若干个表空间,每个表空间内保存一组相关的逻辑对象。每个表空间由一个或者多个数据文件组成。oracle中的数据逻辑上存储在表空间里,物理上存储在属于该表空间的数据文件里。表空间是用户和物理存储结构之间的纽带。
下面介绍和表空间相关的一些概念。
大文件或小文件
大文件表空间由一个单一的大文件构成,即表空间和数据文件是一一对应的。当大文件表空间配合OMF(oracle managed files)和ASM技术一起使用会大大减小DBA的管理工作,因为此时数据文件对用户完全透明,无需关心底层的数据文件管理。
小文件表空间是oracle默认的表空间形式,一个表空间可以由一个或者多个数据文件组成。
本地管理或字典管理
本地管理和字典管理指的是表空间的区(extent)的管理模式(分配和回收)。
字典管理
字典管理是通过sys方案里的数据字典表里的一些表来记录表空间的区的分配情况,所以无论是分配或者回收区,都产生很多的SQL语句,这些SQL语句称为递归SQL,并且这些递归SQL很多需要顺序执行。因此在字典管理表空间里执行DML操作可能会产生递归SQL,在有大量DML操作的情况下,这会产生严重的性能问题。
如果system表空间为本地管理表空间,则该数据库不能创建字典管理表空间,但是该数据库可以存在字典管理表空间,因为可以进行表空间迁移。
本地管理
本地管理表空间(默认方式,且oracle强烈推荐)管理区的方式和字典管理有很大的不同,每个数据文件用一个位图来管理区,获取一个区只需将位图对应的位由0改为1,回收该区只需将该位由1改为0。这就消除了递归SQL,使得空间的分配和回收被大大加速了。
当一个对象需要更多空间时,数据库是以区的形式分配给该对象的。该分配多大空间的区给一个对象由区大小分配模式决定,区大小分配模式分为两种,autoallocate模式和uniform模式。
autoallocate模式,这是oracle的默认分配模式,指的是oracle控制分配区应该是多大。
uniform模式,指的是所有的区都是统一的大小,默认是1M,可以通过size指定区的大小。
如果可以预先知道所有该表空间里的段的大小较接近,且以相似的增长速度增长,则可以使用uniform模式,否则应该使用autoallocate模式。
总的来说,一般情况下使用autoallocate模式就可以了。如果区段的数量太多,以至于影响了sql的执行效率,可以考虑使用uniform模式,设置大的size,以使区的数量降到合理范围内。
自动或手动段空间管理
段空间管理指的是oracle怎么管理段里的数据块的空闲空间。
手动管理是遗留方式,不推荐使用。使用freelists,pctfree和pctused来管理段内的空闲空间,由于该模式自身的原因,很容易引起竞争而引起性能问题。
自动管理(默认,且oracle强烈推荐),oracle利用位图块里的位图来跟踪段内的空闲空间。在该模式下只需要设置PCTFREE参数即可。
logging或nologging
logging是默认值,绝大多数情况我们也确实应该使用logging模式,使用nologging模式的机会非常少。
两种模式对于普通的DML是一样的,差别在于直接路径加载。如CTAS语句,如create table test as select * from emp,相较于logging而言,nologging产生的重做日志要少得多。
online或offline
表空间有在线和离线两种状态。
--使tbs表空间在线
alter tablespace tbs online;
--使表空间tbs正常离线,不需要介质恢复
alter tablespace tbs offline normal;
--使表空间tbs暂时离线,需要介质恢复
alter tablespace tbs offline temporary;
--使表空间tbs立即离线,需要介质恢复
alter tablespace tbs offline immediate;
read only或read write
默认为read write表示可读可写。read only表示表空间只能读取,不能写入,对于某些特定目的,可能会很有用,可以有效防止用户误操作导致数据损坏。
--使tbs表空间只读
alter tablespace tbs read only;
--使表空间tbs可读写
alter tablespace tbs read write;
表空间,还原表空间和临时表空间
表空间
这是平时使用的最多的一种,用于保存表和索引等持久数据的表空间。
--创建tbs表空间,本地管理,自动区大小模式,自动段空间管理,---数据文件tbs_o1.dbf初始大小为10M,自动增长,每次10M,最大可--以到1000M
--一般以该模板来创建表空间就可以了,根据自己的需要修改一下。
CREATE TABLESPACE tbs DATAFILE '/u01/oradata/orcl/tbs_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M
EXTENT MANAGEMENT LOCAL
SEGMENT SPACE MANAGEMENT AUTO;
--创建tbs1表空间,本地管理,统一区大小16M,自动段空间管理
CREATE TABLESPACE tbs1 DATAFILE '/u01/oradata/orcl/tbs1_01.dbf' SIZE 100M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 16M
--创建tbs2表空间,大文件表空间,本地管理,自动区大小模式,自动段空间管理。
CREATE BIGFILE TABLESPACE tbs2 DATAFILE '/u01/oradata/orcl/tbs2_01.dbf' SIZE 100G
--创建tbs3表空间,字典管理
CREATE TABLESPACE tbs3 DATAFILE '/u01/oradata/orcl/tbs3_01.dbf' SIZE 100M
EXTENT MANAGEMENT DICTIONARY;
--增加数据文件
ALTER TABLESPACE tbs ADD DATAFILE '/u01/oradata/orcl/tbs_02.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;
还原表空间(undo tablespace)
还原表空间是一种特殊的表空间,只用于存储还原信息。
oracle的还原管理分为自动还原管理(默认、推荐)和手动还原管理(基本不会使用了)。
自动还原管理的配置也非常简单,只需要要将undo_management参数设置为auto,将undo_tablespace参数设置为已经创建好的还原表空间。
在自动还原管理下,虽然可以创建多个还原表空间,但是只有一个还原表空间其作用。当事务内的第一条DML语句运行时,系统为该事务在当前还原表空间分配一个还原段(undo segment),同时分配一个事务表。
注意,如果没有指定还原表空间,oracle会使用系统的撤销段(在system表空间里),一旦发现这种情况,应该马上创建一个还原表空间,并且指定表空间。
还原表空间的创建和普通表空间是一样的,只是需要增加undo关键字。
--创建还原表空间tbs
CREATE UNDO TABLESPACE tbs DATAFILE '/u01/oradata/orcl/tbs_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M
EXTENT MANAGEMENT LOCAL
临时表空间
主要用于存储临时表数据,对于排序和哈希密集型查询,需要在临时表空间里暂时存储排序和哈希数据。
临时表空间和普通表空间的区别在于,临时表空间必须是以uniform模式进行区大小管理
--创建临时表空间temp1,区大小为1M(默认情况)
CREATE TEMPORARY TABLESPACE temp1 TEMPFILE '/u01/oradata/orcl/temp1_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;
--创建临时表空间temp2,区大小为4M
CREATE TEMPORARY TABLESPACE temp2 TEMPFILE '/u01/oradata/orcl/temp2_01.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M
EXTENT MANAGEMENT LOCAL UNIFORM SIZE 4M
--增加临时文件
ALTER TABLESPACE temp ADD TEMPFILE '/u01/oradata/orcl/temp1_02.dbf' SIZE 10M AUTOEXTEND ON NEXT 10M MAXSIZE 1000M;
--删除表空间里的某个临时文件
ALTER DATABASE TEMPFILE '/u01/oradata/orcl/temp1_02.dbf' DROP INCLUDING DATAFILES;
--缩减临时表空间的大小
ALTER TABLESPACE temp1 SHRINK SPACE;
ALTER TABLESPACE temp1 SHRINK SPACE KEEP 100M;
--设置数据库的默认临时表空间
ALTER DATABASE DEFAULT TEMPORARY TABLESPACE temp1;
--设置用户的临时表空间
ALTER USER scott TEMPORARY TABLESPACE temp1;
OMF
OMF主要是为了简化数据文件的管理工作,创建表空间时不需要指定datafile或者tempfile子句。OMF由三个参数控制,
DB_CREATE_FILE_DEST
数据文件,在线重做日志文件,控制文件和临时文件放在该目录下。
DB_CREATE_ONLINE_LOG_DEST_n
在线重做日志文件和控制文件的多路备份放在该目录下
DB_RECOVERY_FILE_DEST
如果没有设置DB_CREATE_ONLINE_LOG_DEST_n,则在线重做日志文件和控制文件的多路备份放在该目录下。
管理表空间的一些字典
dba_tablespaces
dba_free_space
dba_segments
dba_data_files
dba_temp_files
database_properties
v$datafile
v$tempfile
v$filestat
oracle表空间相关的更多相关文章
- oracle表空间相关SQL语句
Oracle 数据库查看表空间的使用情况 SELECT d.tablespace_name, space "SUM_SPACE(MB)", ) "USED_SPACE(M ...
- oracle表空间相关统计查询
部分转自 https://www.cnblogs.com/xwdreamer/p/3511047.html--查询表空间使用情况SELECT UPPER(F.TABLESPACE_NAME) &quo ...
- Oracle表空间管理
oracle表空间相关常用命令小结: 1.ALTER DATABASE SET DEFAULT BIGFILE TABLESPACE; //修改表空间数据文件类型 2.ALT ...
- oracle表空间不足相关问题解决办法
欢迎和大家交流技术相关问题: 邮箱: jiangxinnju@163.com 博客园地址: http://www.cnblogs.com/jiangxinnju GitHub地址: https://g ...
- oracle 表空间管理相关(原创)
通过以下几步基本可以查看表空间情况以及处理表空间不足问题. ASM相关 查看asm空间 select group_number,name,total_mb,free_mb from v$asm_dis ...
- ORACLE表空间管理维护
1:表空间概念 在ORACLE数据库中,所有数据从逻辑结构上看都是存放在表空间当中,当然表空间下还有段.区.块等逻辑结构.从物理结构上看是放在数据文件中.一个表空间可由多个数据文件组成. 如下图所示, ...
- Oracle 表空间联机(online)与脱机(offline)
数据库管理员可以在数据库处于开启(open)状态时令除 SYSTEM 表空间(tablespace)之外的任何表空间联机(online)(可访问)或脱机(offline)(不可访问).SYSTEM 表 ...
- 【转】Oracle 表空间与数据文件
--============================== --Oracle 表空间与数据文件 --============================== /* 一.概念 表空间:是一个或 ...
- 【基础】Oracle 表空间和数据文件
多个表空间的优势:1.能够将数据字典与用户数据分离出来,避免由于字典对象和用户对象保存在同一个数据文件中而产生的I/O冲突2.能够将回退数据与用户数据分离出来,避免由于硬盘损坏而导致永久性的数据丢失3 ...
随机推荐
- 什么是https?
很久之前注意到了https这个新出来的协议,当时感觉到只是一个加密的协议,然后没有什么关注,只知道他和http的区别就在于加密,最近突然很多人问起了这个https到底是什么?于是上网查了查资料,总结之 ...
- Spring基础—— 在 Spring Config 中使用外部属性文件
一.在 Spring Config 文件中配置 Bean 时,有时候需要在 Bean 的配置里添加 系统部署的细节信息, 如文件路径,数据源配置信息.而这些部署细节实际上需要在配置文件外部来定义. 二 ...
- DFS --- HNU 13307 Galaxy collision
Galaxy collision Problem's Link Mean: 给定二维坐标平面内的n个整数点,让你把这n个点划分为两个集合,同一集合内的所有点必须两两距离大于5,求这两个集合的元素个数之 ...
- 实用笔记-EF中直接运行SQL命令
在EF4.1,API的名字 有了些许改变,DbContext.Database就是对应于数据库端信息的封装.执行SQL命令也自然从Database类型开始.对应于ExecuteStoreCommand ...
- 关于C#读取MySql数据时,返回DataTable中某字段数据是System.Array[]形式
我在使用C#(VS2008)读取MySql数据库(5.1版本)时,返回的DataTable数据中arrivalDate字段数据显示为System.Array[]形式(程序中没有对返回的数据进行任何加工 ...
- Linux 安装 PHP 环境
使用虚拟机玩linux时,发现CentOS中的php版本是5.1.6.如果要安装新版的php,需要把旧的版本删除. 先查看下php版本:# php -v 如果执行该命令提示该命令不存在,那么可以通过以 ...
- 设计模式之桥接模式(Bridge)
注:本文不属于原创,而是根据原文重新整理,原文是:我给媳妇解释设计模式:第一部分 设计模式不是基于理论发明的.相反,总是先有问题场景,再基于需求和情景不断演化设计方案,最后把一些方案标准化成“模式”. ...
- jquery重置html form
很多时候在ajax提交或者对话框隐藏之后,我们希望重置默认值以便下次打开对话框时保持干净. 因为jquery选择器返回的是list,并且没有对此提供reset方法,所以需要针对单个元素进行reset. ...
- 使用 Canvas 和 JavaScript 创建逼真的下雨效果
HTML5 规范引进了很多新特性,其中最令人期待的之一就是 Canvas 元素,HTML5 Canvas 提供了通过 JavaScript 绘制图形的方法,非常强大.这里向大家展示一个使用 Canva ...
- [JS]东方财富网财经数据汇总代码示例
把握全球金融状况 一个页面看全球金融,感觉不错 再加上以前做的,读取显示 新浪7*24财经直播数据页面 那看得就更舒服了 下面是 新浪7*24财经直播数据 代码地址: http://www.cnblo ...