今天继续啃oracle concept中的Data blocks extent and segments。其中的临时段 临时表和排序段看了好迷惑。
临时段:
当oracle处理一个查询时,可能需要为sql解析与执行的中间结果分配临时表空间,oracle会自动分配临时段的临时空间。例如当sql执行中需要排序,很有可能需要在临时表空间中分配临时段(排序不在pga的sort area,也没有利用索引来执行)
有点需要说明的是:临时表空间的只有一个临时段,当排序等使用临时段的操作结束后,这个临时段不会被删除,将此临时段的区间标记为free供以后排序等使用。临时表空间的临时段是循环使用的,在实例启动时分配,关闭时回收。
一些涉及到排序的sql:
order by,distinct,group by,create index(索引创建过程中的排序具体是什么),union,
Minus,intersect
临时表及其索引使用的段:
创建临时表及其索引时会分配临时段,查看具体的v$tempseg_usage。
临时表空间的意义:
临时段的分配与回收经常发生,所以最好创建专用的临时表空间,可以分流磁盘设备的I/O,也可以减少system等表空间的频繁创建段造成的碎片。
临时段和redo log:
排序等操作引起的临时段内的数据变化不记录到redo log中,只有对临时段进行空间管理的操作才被记录。例如切换临时表空间,增加数据文件。
临时表:
创建的临时表的段存储在用户默认的临时表空间中。
创建一个临时事务表:
Create global temporary table temp_test01
As select * from test02
Insert into temp_test01 select * from test02
(创建临时表会在v$tempseg_usage增加数据信息,但是根据临时表空间只有一个临时段,临时表存储在临时表空间中,临时表空间不是出现两个临时段了吗?)
撤销管理:
Oracle中对撤销信息完成:
1 回滚
2 恢复提交的数据 利用flashback或者闪回查询
3 实现读的完整性
可以使用v$undostat查看具体的撤销信息。
手工管理:在手工撤销管理模式下,撤销空间通过回滚段管理
自动管理:通过撤销表空间进行管理。
自动管理模式下需要设置初始化参数undo_management=auot undo_tablespace=undotbs1
如果sga和pga管理一样,推荐使用自动管理模式。(但是其中的细节还需要以后继续查看分析)
几个数据字典视图:
V$TRANSACTION 及 V$ROLLSTAT 视图监控事务(transaction )及撤销空间(undo)的信息,V$UNDOSTAT 可以显示撤销空间运行的历史统计信息。用户可以查询撤销空间使用率(undo consumption rate),事务并发性(transaction concurrency)。
[@more@]来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/25362835/viewspace-1055189/ ,如需转载,请注明出处,否则将追究法律责任。