中文字幕av专区_日韩电影在线播放_精品国产精品久久一区免费式_av在线免费观看网站

溫馨提示×

溫馨提示×

您好,登錄后才能下訂單哦!

密碼登錄×
登錄注冊×
其他方式登錄
點擊 登錄注冊 即表示同意《億速云用戶服務條款》

ORACLE 11g的新特性延遲段創建是怎么樣的

發布時間:2021-11-05 17:29:23 來源:億速云 閱讀:156 作者:柒染 欄目:建站服務器

這期內容當中小編將會給大家帶來有關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 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 星期一 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的新特性延遲段創建是怎么樣的了,如果剛好有類似的疑惑,不妨參照上述分析進行理解。如果想知道更多相關知識,歡迎關注億速云行業資訊頻道。

向AI問一下細節

免責聲明:本站發布的內容(圖片、視頻和文字)以原創、轉載和分享為主,文章觀點不代表本網站立場,如果涉及侵權請聯系站長郵箱:is@yisu.com進行舉報,并提供相關證據,一經查實,將立刻刪除涉嫌侵權內容。

AI

六安市| 海盐县| 怀集县| 和政县| 新昌县| 汉中市| 安康市| 长丰县| 金溪县| 榆林市| 仁化县| 泰安市| 武功县| 潜江市| 安义县| 海原县| 临夏县| 故城县| 望都县| 高阳县| 水富县| 桃源县| 康马县| 新乡县| 白玉县| 临沧市| 黄陵县| 谢通门县| 利辛县| 临武县| 金坛市| 江油市| 措勤县| 凌云县| 平舆县| 丽水市| 扎兰屯市| 芜湖县| 西乌珠穆沁旗| 青冈县| 乌鲁木齐市|