设为首页 收藏本站
查看: 808|回复: 0

[经验分享] Oracle的逻辑结构(表空间、段、区间、块)——段

[复制链接]

尚未签到

发表于 2016-8-5 09:24:55 | 显示全部楼层 |阅读模式
  原创于2009年02月14日,2009年10月22日迁移至此。
  

Oracle的逻辑结构(表空间、段、区间、块)——段

数据段是一系列区间,在这个特定逻辑存储结构存储的数据都在一个表空间内.例如对于每一种数据库对象(表、索引),数据库都会分配一个或一段区间构成其对象的数据段。
A segment is a set of extentsthat contains all the datafor a specific logical storage structure within atablespace. For example, for each table, Oracle allocates one or more extentsto form. that table’s data segment, and for each index, Oracle allocates one ormore extents to form. its index segment

数据段

Oracle数据库中,一个独立的数据段保存以下所有情况的数据:

<!-- [if !supportLists]-->l一个非分区表或非簇的表<!-- [endif]-->
<!-- [if !supportLists]-->l分区表的一个分区<!-- [endif]-->
<!-- [if !supportLists]-->l表的一个簇<!-- [endif]-->
当使用Create语句创建表或簇的时候,Oracle会自动创建该数据段。

表或簇的存储参数决定了该数据段的区间如何分配。存储参数也影响了与该对象相关的数据段的存储和数据的查询。

索引段

Oracle数据库中每一个非分区索引都有一个对应的单一的索引段用来保存所有数据。对于分区索引而言,每一个分区都有一个单一的索引短。

当执行Create Index语句,Oracle就会创建相应的索引段。在创建索引的时候同样也可以指定相应的存储参数。设置这些参数将会直接影响到数据查询和存储的效率。

临时段
处理查询的时候,对于SQL语句的解析和执行阶段Oracle经常需要临时工作区。Oracle字段分配的磁盘空间就叫临时段。例如,Oracle需要一个临时段作为排序工作区。如果排序操作可以在内存进行或者Oracle可以直接使用索引的话,Oracle就不会创建这个临时段。
以下语句有时会需要使用临时段:
<!-- [if !supportLists]-->lCREATE INDEX<!-- [endif]-->
<!-- [if !supportLists]-->lSELECT ... ORDER BY<!-- [endif]-->
<!-- [if !supportLists]-->lSELECT DISTINCT ...<!-- [endif]-->
<!-- [if !supportLists]-->lSELECT ... GROUP BY<!-- [endif]-->
<!-- [if !supportLists]-->lSELECT ... UNION<!-- [endif]-->
<!-- [if !supportLists]-->lSELECT ... INTERSECT<!-- [endif]-->
<!-- [if !supportLists]-->lSELECT ... MINUS<!-- [endif]-->
自动回滚(撤销)段
自动回滚(撤销)段管理是基于undo表空间的,取代了原来的人工分配回滚段的方式。
自动撤销段管理允许你显式的控制undoretention(undo保留时间),通过UNDO_RETENTION系统参数,可以指定在数据库中已提交的undo信息所保留的量。通过控制retention,你可以配置你的系统以确保长期运行的查询能够运行成功。
Oracle用V$UNDOSTAT视图来监控和配置你的数据库系统以确保undo空间高效使用。
UNDO Retention控制
长时间运行的查询有时会失败,因为对于所需的一致性读操作的undo信息已不再可用。这通常发生在已提交的undo数据块被活动事务给覆盖了。
自动撤消管理为undo空间何时重用提供了一种显式的控制方法,也就是undo信息能够保留多久。DBA可以用UNDO_RENTENTION参数指定保留时间。例如,如果UNDO_RETENTION设置为30分钟,那么系统中所有已提交的undo信息将至少保留30分钟。这样就可以确保所有运行小于等于30分钟的查询,在通常情况下,不会碰到”snapshot too old”的Oracle错误。
你可以在数据库启动时设置UNDO_RETENTION或者通过ALTER SYSTEM语句改变改变设置。下面的例子为设置retention为20分钟:
ALTER SYSTEM SET UNDO_RETENTION = 1200 ;
如果没有设置UNDO_RETENTION参数的话,Oracle会使用一个基于多数OLTP系统预置的缺省值,通常情况下查询时间不会很长。
Oracle提供如下为新数据库设置撤销保留时间间隔的指导:
1、OLTP系统:15分钟
2、混合:1小时
3、DSS系统:3小时
4、闪回查询:24小时

表与段的关系
DSC0000.jpg


如何查找一个表所对应的所有段
包含4个部分
--普通表段,对于分区表每个区对应一个分区段
--BLOB段,普通表每个BLOB字段一个段;分区表每个分区一个BLOB段
--BLOB索引段,同上
--普通索引段,全局索引每个索引一个段;分区索引每个索引则一个段
测试:创建一个带BLOB字段的分区表
create table TESTPARTITION
(
AVARCHAR2(10),
BVARCHAR2(10),
CBLOB
)
partition by list (A)
(
partition PARTA values ('A'),
partition PARTB values ('B')
);
创建一个全局索引和局部索引
CREATE INDEX INDTESTPARTITIONGLOBAL_B ONTESTPARTITION(b);
CREATE INDEX INDTESTPARTITIONLOCAL_A ONTESTPARTITION(A) local
(
partition part_A tablespace AUTOALLOCATE,
partition part_B tablespace AUTOALLOCATE
);
查询该表所有的段
SELECT A.SEGMENT_NAME TABLE_NAME,'N/A'COLUMN_NAME,A.SEGMENT_NAME,'TABLE'SEGMENT_TYPE,A.HEADER_FILE,A.HEADER_BLOCK,A.BYTES
FROM DBA_SEGMENTS A--LOCAL SEGMENT
WHERE A.segment_name='TBLTESTSEGMENT'
UNION ALL
selectA.TABLE_NAME,A.COLUMN_NAME,B.SEGMENT_NAME,B.SEGMENT_TYPE,B.HEADER_FILE,B.HEADER_BLOCK,B.BYTES
from DBA_LOBS A,DBA_SEGMENTS B--LOB SEGMENT
where A.SEGMENT_NAME=B.SEGMENT_NAME ANDA.TABLE_NAME='TBLTESTSEGMENT'
UNION ALL
select A.TABLE_NAME,A.COLUMN_NAME,B.SEGMENT_NAME,B.SEGMENT_TYPE,B.HEADER_FILE,B.HEADER_BLOCK,B.BYTES
from DBA_LOBS A,DBA_SEGMENTS B--LOB INDEX SEGMENT
where A.INDEX_NAME=B.SEGMENT_NAME ANDA.TABLE_NAME='TBLTESTSEGMENT'
UNION ALL
select A.TABLE_NAME,A.INDEX_NAME,B.PARTITION_NAME,B.SEGMENT_NAME,B.SEGMENT_TYPE,B.HEADER_FILE,B.HEADER_BLOCK,B.BYTES
from DBA_INDEXES A,DBA_SEGMENTS B--INDEX SEGMENT
where A.INDEX_NAME=B.SEGMENT_NAME ANDA.TABLE_NAME='TESTPARTITION'
DSC0001.jpg


深度理解Oracle10g中UNDO_RETENTION参数的使用
http://blog.csdn.net/seagal890/archive/2008/10/09/3044226.aspx
深入学习分区表及分区索引
http://space.itpub.net/7607759/viewspace-260278

运维网声明 1、欢迎大家加入本站运维交流群:群②:261659950 群⑤:202807635 群⑦870801961 群⑧679858003
2、本站所有主题由该帖子作者发表,该帖子作者与运维网享有帖子相关版权
3、所有作品的著作权均归原作者享有,请您和我们一样尊重他人的著作权等合法权益。如果您对作品感到满意,请购买正版
4、禁止制作、复制、发布和传播具有反动、淫秽、色情、暴力、凶杀等内容的信息,一经发现立即删除。若您因此触犯法律,一切后果自负,我们对此不承担任何责任
5、所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其内容的准确性、可靠性、正当性、安全性、合法性等负责,亦不承担任何法律责任
6、所有作品仅供您个人学习、研究或欣赏,不得用于商业或者其他用途,否则,一切后果均由您自己承担,我们对此不承担任何法律责任
7、如涉及侵犯版权等问题,请您及时通知我们,我们将立即采取措施予以解决
8、联系人Email:admin@iyunv.com 网址:www.yunweiku.com

所有资源均系网友上传或者通过网络收集,我们仅提供一个展示、介绍、观摩学习的平台,我们不对其承担任何法律责任,如涉及侵犯版权等问题,请您及时通知我们,我们将立即处理,联系人Email:kefu@iyunv.com,QQ:1061981298 本贴地址:https://www.yunweiku.com/thread-253115-1-1.html 上篇帖子: oracle查询用户所有表记录数 下篇帖子: JDev Deploy Exception: oracle.security.jps.wls.listeners.JpsApplicationLifecycle
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

扫码加入运维网微信交流群X

扫码加入运维网微信交流群

扫描二维码加入运维网微信交流群,最新一手资源尽在官方微信交流群!快快加入我们吧...

扫描微信二维码查看详情

客服E-mail:kefu@iyunv.com 客服QQ:1061981298


QQ群⑦:运维网交流群⑦ QQ群⑧:运维网交流群⑧ k8s群:运维网kubernetes交流群


提醒:禁止发布任何违反国家法律、法规的言论与图片等内容;本站内容均来自个人观点与网络等信息,非本站认同之观点.


本站大部分资源是网友从网上搜集分享而来,其版权均归原作者及其网站所有,我们尊重他人的合法权益,如有内容侵犯您的合法权益,请及时与我们联系进行核实删除!



合作伙伴: 青云cloud

快速回复 返回顶部 返回列表