我的编程空间,编程开发者的网络收藏夹
学习永远不晚

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

短信预约 -IT技能 免费直播动态提醒
省份

北京

  • 北京
  • 上海
  • 天津
  • 重庆
  • 河北
  • 山东
  • 辽宁
  • 黑龙江
  • 吉林
  • 甘肃
  • 青海
  • 河南
  • 江苏
  • 湖北
  • 湖南
  • 江西
  • 浙江
  • 广东
  • 云南
  • 福建
  • 海南
  • 山西
  • 四川
  • 陕西
  • 贵州
  • 安徽
  • 广西
  • 内蒙
  • 西藏
  • 新疆
  • 宁夏
  • 兵团
手机号立即预约

请填写图片验证码后获取短信验证码

看不清楚,换张图片

免费获取短信验证码

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

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

很多数据库都有存在空表的情况,较多的空表会占用大量的磁盘空间,ORACLE 在11gR2版本推出延迟段创建新特性,所谓延迟段创建,顾名思义就是在创建一张新空表的时候,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信息,如下:
ORACLE 11g的新特性延迟段创建是怎么样的

当SEGEMENT CREATION为IMMEDIATE的情况下,ORACLE在建表的时候,会为表建立段(SEGMENTS),当SEGEMENT CREATION为DEFERRED的情况下,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 CREATION为IMMEDIATE的情况下,ORACLE为T_TEST_2建立了段,在SEGEMENT CREATION为DEFERRED的情况下,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 星期一 2月 13 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 星期一 2月 13 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 星期一 2月 13 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的新特性延迟段创建是怎么样的了,如果刚好有类似的疑惑,不妨参照上述分析进行理解。如果想知道更多相关知识,欢迎关注编程网行业资讯频道。

免责声明:

① 本站未注明“稿件来源”的信息均来自网络整理。其文字、图片和音视频稿件的所属权归原作者所有。本站收集整理出于非商业性的教育和科研之目的,并不意味着本站赞同其观点或证实其内容的真实性。仅作为临时的测试数据,供内部测试之用。本站并未授权任何人以任何方式主动获取本站任何信息。

② 本站未注明“稿件来源”的临时测试数据将在测试完成后最终做删除处理。有问题或投稿请发送至: 邮箱/279061341@qq.com QQ/279061341

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

下载Word文档到电脑,方便收藏和打印~

下载Word文档

猜你喜欢

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

这期内容当中小编将会给大家带来有关ORACLE 11g的新特性延迟段创建是怎么样的,文章内容丰富且以专业的角度为大家分析和叙述,阅读完这篇文章希望大家可以有所收获。很多数据库都有存在空表的情况,较多的空表会占用大量的磁盘空间,ORACLE
2023-06-06

Java 7异常新特性mutilcatch是怎么样的

这篇文章将为大家详细讲解有关Java 7异常新特性mutilcatch是怎么样的,文章内容质量较高,因此小编分享给大家做个参考,希望大家阅读完这篇文章后对相关知识有一定的了解。Java7增强了Java的异常处理机制,主要表现为三个方面:捕捉
2023-06-17

编程热搜

  • Python 学习之路 - Python
    一、安装Python34Windows在Python官网(https://www.python.org/downloads/)下载安装包并安装。Python的默认安装路径是:C:\Python34配置环境变量:【右键计算机】--》【属性】-
    Python 学习之路 - Python
  • chatgpt的中文全称是什么
    chatgpt的中文全称是生成型预训练变换模型。ChatGPT是什么ChatGPT是美国人工智能研究实验室OpenAI开发的一种全新聊天机器人模型,它能够通过学习和理解人类的语言来进行对话,还能根据聊天的上下文进行互动,并协助人类完成一系列
    chatgpt的中文全称是什么
  • C/C++中extern函数使用详解
  • C/C++可变参数的使用
    可变参数的使用方法远远不止以下几种,不过在C,C++中使用可变参数时要小心,在使用printf()等函数时传入的参数个数一定不能比前面的格式化字符串中的’%’符号个数少,否则会产生访问越界,运气不好的话还会导致程序崩溃
    C/C++可变参数的使用
  • css样式文件该放在哪里
  • php中数组下标必须是连续的吗
  • Python 3 教程
    Python 3 教程 Python 的 3.0 版本,常被称为 Python 3000,或简称 Py3k。相对于 Python 的早期版本,这是一个较大的升级。为了不带入过多的累赘,Python 3.0 在设计的时候没有考虑向下兼容。 Python
    Python 3 教程
  • Python pip包管理
    一、前言    在Python中, 安装第三方模块是通过 setuptools 这个工具完成的。 Python有两个封装了 setuptools的包管理工具: easy_install  和  pip , 目前官方推荐使用 pip。    
    Python pip包管理
  • ubuntu如何重新编译内核
  • 改善Java代码之慎用java动态编译

目录