千家信息网

ORACLE 11g的新特性延迟段创建是怎么样的

发表于:2024-09-22 作者:千家信息网编辑
千家信息网最后更新 2024年09月22日,这期内容当中小编将会给大家带来有关ORACLE 11g的新特性延迟段创建是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。很多数据库都有存在空表的情况,较多的
千家信息网最后更新 2024年09月22日ORACLE 11g的新特性延迟段创建是怎么样的

这期内容当中小编将会给大家带来有关ORACLE 11g的新特性延迟段创建是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。

很多数据库都有存在空表的情况,较多的空表会占用大量的磁盘空间,ORACLE11gR2版本推出延迟段创建新特性,所谓延迟段创建,顾名思义就是在创建一张新空表的时候,ORACLE默认不会为这张空表分配段(SEGMENTS),也就是不会为这张空表分配空间,这样就避免了空表占用空间的情况,如下实验:

SQL> SELECT * FROM V$VERSION;

BANNER

----------------------------------------------------------------------

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

PL/SQL Release 11.2.0.1.0 - Production

CORE 11.2.0.1.0 Production

TNS for 32-bit Windows: Version 11.2.0.1.0 - Production

NLSRTL Version 11.2.0.1.0 - Production

SQL> CREATE TABLE T_TEST_1(ID NUMBER,NAME VARCHAR2(10));

表已创建。

SQL> SELECT SEGMENT_NAME FROM USER_SEGMENTS WHERE SEGMENT_NAME='T_TEST_1';

未选定行

默认情况下ORACLE没有为空表(T_TEST_1)分配空间,如果查看过ORACLE11gR2官方文档关于CREATE TABLE语法的人可能会看到SEGEMENT CREATION信息,如下:

SEGEMENT CREATIONIMMEDIATE的情况下,ORACLE在建表的时候,会为表建立段(SEGMENTS),当SEGEMENT CREATIONDEFERRED的情况下,ORACLE不会为空表建立段,下面分别演示下这两种情况的效果。

SQL> CREATE TABLE T_TEST_2(ID NUMBER,NAME VARCHAR2(10))

2 SEGMENT CREATION IMMEDIATE;

表已创建。

SQL> CREATE TABLE T_TEST_3(ID NUMBER,NAME VARCHAR2(10))

2 SEGMENT CREATION DEFERRED;

表已创建。

SQL> SELECT SEGMENT_NAME FROM USER_SEGMENTS WHERE SEGMENT_NAME LIKE'T_TEST%';

SEGMENT_NAME

-------------

T_TEST_2

可以看到,在SEGEMENT CREATIONIMMEDIATE的情况下,ORACLET_TEST_2建立了段,在SEGEMENT CREATIONDEFERRED的情况下,ORACLE没有为表T_TEST_3建立段,当向没有分配段的空表中插入信息时,ORACLE会自动为空表建立段。

SQL> INSERT INTO T_TEST_1 VALUES(1,'STREAM');

已创建 1 行。

SQL> SELECT SEGMENT_NAME FROM USER_SEGMENTS WHERE SEGMENT_NAME LIKE'T_TEST%';

SEGMENT_NAME

------------

T_TEST_1

T_TEST_2

也可以用ALLOCATE EXTENT的方式来为空表建立段信息。

SQL> ALTER TABLE T_TEST_3 ALLOCATE EXTENT;

表已更改。

SQL> SELECT SEGMENT_NAME FROM USER_SEGMENTS WHERE SEGMENT_NAME LIKE'T_TEST%';

SEGMENT_NAME

------------

T_TEST_1

T_TEST_2

T_TEST_3

虽然延迟段创建避免了空表占用空间的问题,但是也为DBA带点小麻烦,这就是在EXP导出数据的时候,虽然空表的信息也存在数据库字典内,但是ORACLE不会导出未分配段的空表,这样在使用EXP做数据迁移的时候,就会遇到点小问题。

SQL> CREATE USER dbdream IDENTIFIED BY dbdream DEFAULT TABLESPACE USERS;

用户已创建。

SQL> GRANT CONNECT,RESOURCE TO DBDREAM;

授权成功。

SQL> CREATE TABLE T_TEST_1(ID NUMBER,NAME VARCHAR2(10));

表已创建。

SQL> CREATE TABLE T_TEST_2(ID NUMBER,NAME VARCHAR2(10))

2 SEGMENT CREATION IMMEDIATE;

表已创建。

D:\ >exp dbdream/dbdream file=d:\dbdream.dmp

Export: Release 11.2.0.1.0 - Production on 星期一 213 11:35:22 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的用户...

...

. . 正在导出表 T_TEST_2导出了 0

...

成功终止导出, 没有出现警告。

EXP只能导出已经分配段的表,要导出未分配段的空表EXP就无能为力了,要导出未分配段的空表就需要使用数据泵(EXPDP),使用EXPDP可以导出未分配段的空表。

SQL> CREATE DIRECTORY D_TEST AS 'D:\T_TEST';

目录已创建。

SQL> GRANT READ,WRITE ON DIRECTORY D_TEST TO DBDREAM;

授权成功。

D:\ >expdp dbdream/dbdream directory=D_TEST dumpfile=dbdream.dmp

Export: Release 11.2.0.1.0 - Production on 星期一 213 11:50:00 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

正在使用 BLOCKS 方法进行估计...

...

. . 导出了 "DES"."T_TEST_1" 0 KB 0

. . 导出了 "DES"."T_TEST_2" 0 KB 0

...

作业 "DES"."SYS_EXPORT_SCHEMA_01" 已于 11:50:47 成功完成

如果非要用EXP做迁移,而且所有空表也都需要迁移,那么就需要使用上文提到的利于ALLOCATE EXTENT创建段的方法。在做EXP操作之前,先使用ALLOCATE EXTENT的方法为空表分配段信息。

SQL> DECLARE

2 V_COUNT NUMBER;

3 BEGIN

4 FOR I IN (SELECT TABLE_NAME FROM USER_TABLES) LOOP

5 EXECUTE IMMEDIATE 'SELECT COUNT(*) FROM ' || I.TABLE_NAME INTO V_COUNT;

6 IF V_COUNT = 0 THEN

7 EXECUTE IMMEDIATE 'ALTER TABLE ' || I.TABLE_NAME || ' ALLOCATE EXTENT';

8 END IF;

9 END LOOP;

10 END;

11 /

PL/SQL 过程已成功完成。

SQL> SELECT SEGMENT_NAME FROM USER_SEGMENTS WHERE SEGMENT_NAME LIKE'T_TEST%';

SEGMENT_NAME

------------

T_TEST_1

T_TEST_2

然后在用EXP导出数据,这样空表就可以被导出了。

D:\ >exp dbdream/dbdream file=d:\dbdream.dmp

Export: Release 11.2.0.1.0 - Production on 星期一 213 11:58:03 2012

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

连接到: Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

已导出 ZHS16GBK 字符集和 AL16UTF16 NCHAR 字符集

即将导出指定的用户...

...

. . 正在导出表 T_TEST导出了 0

. . 正在导出表 T_TEST_2导出了 0

...

成功终止导出, 没有出现警告。

上述就是小编为大家分享的ORACLE 11g的新特性延迟段创建是怎么样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注行业资讯频道。

分配 情况 成功 数据 延迟 信息 空间 字符 字符集 时候 正在 特性 就是 方法 星期 用户 内容 数据库 问题 分析 数据库的安全要保护哪些东西 数据库安全各自的含义是什么 生产安全数据库录入 数据库的安全性及管理 数据库安全策略包含哪些 海淀数据库安全审计系统 建立农村房屋安全信息数据库 易用的数据库客户端支持安全管理 连接数据库失败ssl安全错误 数据库的锁怎样保障安全 sql 创建数据库文件 好口碑的软件开发公司 服务器台式机 y与结构设计相关的软件开发单位 中小学生网络安全小摘抄 知网如何使用博士论文数据库 黑龙江省利末记互联网科技有限 大数据技术有没有软件开发 奉贤区管理软件开发报价行情 access数据库二级题目 软件开发涉及哪些费用 广元跑腿app软件开发 数据库只有ldf文件恢复 武警部队网络安全讨论交流 胡建利青岛未来软件开发 华为网络技术大赛决赛集训 服务器出现故障需要多久才能修好 青岛手机软件开发学校 四大基础数据库建设 万方数据库的论文怎么看不 杭州荣耀网络技术有限公司 网络安全保护的主要内容 莫艳飞软件开发 网络安全 领导致辞 餐饮软件开发需要多长时间 奉贤区管理软件开发报价行情 萝岗软件开发哪家有实力 广元跑腿app软件开发 数据库分布式系统实例 用户信息安全管理软件开发
0