Oracle 11g的Deferred Segment Creation
本篇主要介绍Oracle 11g中推出的“延迟段创建”(Deferred Segment Creation)特性,以及当我们使用这种特性时,需要注意的问题。
1)Deferred Segment Creation
在Oracle中,“表空间(Tablespace)、段(Segment)、分区(Extent)和块(Block)”是逻辑存储结构的四个层次。对数据表而言,通常是由一个或者多个段对象(分区表)Segment组成。也就是说,在数据表创建的时刻,Oracle会创建一个数据段Segment对象与之对应。
当Segment创建之后,Oracle空间管理机制会根据需要分配至少一个extent作为初始化。每个extent的大小需要根据不同tablespace进行配置。但是在11g之前,数据表的创建同时,就发生了空间Segment分配的过程。但是在Oracle 11g中,引入了Deferred Segment Creation特性。
首先我们创建一个数据表justForTest,来观察数据库是否为此表分配segment。
SQL> create table justForTest(test1 varchar2(2)); Table created
但是,对应的段segment对象,却没有创建出来,如下:
select segment_name, BYTES, BLOCKS, EXTENTS from user_segments where segment_name='JUSTFORTEST';
SEGMENT_NAME BYTES BLOCKS EXTENTS
------------ ---------- ---------- ----------
这就是在Oracle 11g中引入的延迟段生成。一个数据表,如果刚刚创建出来的时候没有数据加入。Oracle是不会为这个对象创建相应的段结构,也就不会分配对应的空间。
使用dbms_metadata抽取出数据表的DDL语句,可以发现端倪,如下:
CREATE TABLE "test"."JUSTFORTEST"
( "TEST1" VARCHAR2(2)
) SEGMENT CREATION DEFERRED
PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 NOCOMPRESS LOGGING
TABLESPACE "testNS";
使用DDL语句可以获取到创建数据表的所有语句参数,包括默认参数。其中,我们发现了一个在过去版本中没有参数“SEGMENT CREATION DEFERRED”,该参数就表示在数据表创建中使用延迟段生成。
2)Segment Creation
那么,在什么时点上Oracle才会创建对象呢?只要插入一条数据到数据表中,无论是否commit,都会伴随着Oracle对数据表段的创建操作。
SQL> insert into justForTest values(''); 1 row inserted SQL> select segment_name, BYTES, BLOCKS, EXTENTS from user_segments where segment_name='JUSTFORTEST'; SEGMENT_NAME BYTES BLOCKS EXTENTS
------------ ---------- ---------- ----------
JUSTFORTEST 65536 8 1
Oracle推出Deferred Segment Creation的出发点很单纯,就是出于对象空间节省的目的。如果一个空表从来就没有使用过,创建segment对象,分配空间是“不合算”的,所以提出推迟段创建的时间点。
该功能的启用在Oracle中是存在控制参数的。
SQL> show parameter deferred_segment_creation; NAME TYPE VALUE
------------------------------- ----------- ------------------------------
deferred_segment_creation boolean TRUE
当然,我们可以将deferred_segment_creation参数调为false,这样调整后建的表都会立即分配空间,但是调整前的表都不会改变,调整方法如下:
alter system set deferred_segment_creation=false;
3)Oracle 11g导出空表、少表的解决办法
如果deferred_segment_creation为true,那么数据库中空表就不会立即分配extent,即不占数据空间,当我们使用exp导出数据库的时候,这些空表也会无法导出。如果想把空表也一起导出,我们可以参考Oracle 11g导出空表、少表的解决办法这篇文章。
参考资料:
http://blog.itpub.net/17203031/viewspace-711008
http://blog.itpub.net/751371/viewspace-702058
Oracle 11g的Deferred Segment Creation的更多相关文章
- Oracle 11g Articles
发现一个比较有意思的网站,http://www.oracle-base.com/articles/11g/articles-11g.php Oracle 11g Articles Oracle Dat ...
- Oracle 11g新特性 -- 延迟段
11gR2之前的版本中,当创建一张表时,会自动分配段空间,这样做有几个弊端: 1. 初始创建表时就需要分配空间,自然会占用一些时间,如果初始化多张表,这种影响就被放大. 2. 如果很多表开始的一段时间 ...
- ORACLE 11G EXP导出空表方法
EXP在导出11G的库的时候,与过去10G,9I的版本有很大的差别. 就是没有数据的表是不会分配空间的. 从Oracle 11.2.0.1版本开始,Oracle又提供了一种新的空间分配方法: Crea ...
- Oracle 11g R2 Backup Data Pump(数据泵)之expdp/impdp工具
Oracle Data Pump(以下简称数据泵)是Oracle 10g开始提供的一种数据迁移工具,同时也被广大DBA用来作为数据库的逻辑备份工具和体量较小的数据迁移工具.与传统的数据导出/导入工具, ...
- Oracle 11g trace events
oracle的events,是我们在做自己的软件系统时可以借鉴的 Oracle 11g trace eventsORA-10001: control file crash event1ORA-1000 ...
- Oracle 11g静默安装简明版
环境:RHEL 6.5 + Oracle 11.2.0.4 1. 初步处理应答文件 2. 静默安装软件 3. 静默安装监听 4. 静默dbca建库 说明: 本文默认安装软件前的步骤已经设置完毕 如果没 ...
- Oracle 11g导出空表、少表的解决办法
ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间. 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产 ...
- Oracle 11G在用EXP 导出时,空表不能导出解决
Oracle 11G在用EXP 导出时,空表不能导出解决 (转)(.http://wanwentao.blog.51cto.com/2406488/545154 11G中有个新特性,当表无数据时,不分 ...
- Centos 下oracle 11g 安装部署及手动建库过程
Oracle 11g 手动建库,在虚拟环境中,不使用DBCA工具进行创建数据库 1.Linux环境的基本配置 2.ip 10.11.30.60 3.Oracle 11g安装过程 ---------- ...
随机推荐
- MySQL中的模糊查询和通配符转义
MySQL中实现模糊查询有2种方式:一是用LIKE/NOT LIKE,二是用REGEXP/NOT REGEXP(或RLIKE/NOT RLIKE,它们是同义词). 第一种是标准的SQL模式匹配.它有2 ...
- 反射 Reflect Modifier 修饰符工具类
在查看反射相关的Class.Field .Constructor 等类时,看到他们都有这样一个方法:getModifiers():返回此类或接口以整数编码的 Java 语言修饰符.如需要知道返回的值所 ...
- 手机WiFi万能钥匙查看破解的password和手机查询命令收集
手机须要网络利用WiFi万能钥匙破解了WIFI的password.手机就能够上网了,但假设想在电脑上使用手机破解的Wifi热点上网就须要password,此时须要知道手机破解的password,WiF ...
- Cognos Report Studio 链接查询需要注意的地方2
在Report Studio里面用SQL设计报表,查询2,查询3 要链接一般按条件 a1=b1 在选择链接方式需要注意的地方: 默认链接 外部链接 需要设置打开FM,打开报表设计引用的数据包(FM- ...
- Andrew Ng Machine Learning 专题【Linear Regression】
此文是斯坦福大学,机器学习界 superstar - Andrew Ng 所开设的 Coursera 课程:Machine Learning 的课程笔记. 力求简洁,仅代表本人观点,不足之处希望大家探 ...
- 防止excel数字变成科学计数法
在网上查了很多资料知道解决办法大概有两个:一是在身份证字段前加个英文单引号,二是设置Excel的格式为文本格式. 我试用过第一种确实可以显示,但是有个“'”号在那里感觉确实不是很好,虽然听说不影响,但 ...
- Jquery 获取table当前行内容
$("a[name='checkOriginal']").click(function () { var parent = $(this).parent().parent().fi ...
- [NPM] Execute npx commands with $npm_ Environment Variables
We will incorporate npm specific environment variables when executing various npx commands. In our e ...
- [Node.js]32. Level 7: Working with Lists -- Redis
As we saw in the video, redis can do more than just simple key-value pairs. We are going to be using ...
- 推荐20个很有帮助的web前端开发教程
1. CSS Vocabulary 一个伟大的指向和点击的小应用程序,让你加快速度掌握 CSS 语法的各个不同部分,学习各个属性的正确的名称. 2. Liquidapsive 一个简单的信息化布局,通 ...