Welcome 微信登录

首页 / 数据库 / MySQL / Oracle 11g r2 新建空表不分配semgent

Oracle 11g r2的新特性,延迟段创建 ,就是说从11GR2开始默认创建的表不会立及分配segment,不会占用磁盘空间,这听上去也是很合理的,当第一条数据insert时才会分配空间试验一把
  1. sys@ANBOB> conn anbob/anbob   
  2. Connected.   
  3. anbob@ANBOB> select * from v$version;   
  4.   
  5. BANNER   
  6. --------------------------------------------------------------------------------   
  7. Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - Production   
  8. PL/SQL Release 11.2.0.1.0 - Production   
  9. CORE    11.2.0.1.0      Production   
  10. TNS for Linux: Version 11.2.0.1.0 - Production   
  11. NLSRTL Version 11.2.0.1.0 - Production   
  12.   
  13. anbob@ANBOB> create table testnew(id int primary key,name varchar2(10));   
  14.   
  15. Table created.   
  16. anbob@ANBOB> create table testnew_IME(id int primary key,name varchar2(10)) segment creation immediate;   
  17.   
  18. Table created.   
  19. anbob@ANBOB> create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred;   
  20.   
  21. Table created.   
  22.   
  23. anbob@ANBOB> select segment_name from user_segments where segment_name like "TESTNEW%";   
  24.   
  25. SEGMENT_NAME   
  26. ---------------------------------------------------------------------------------   
  27. TESTNEW_IME   
  28.   
  29. anbob@ANBOB>  select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name="TESTNEW";   
  30.   
  31. INDEX_NAME                     TABLE_OWNER   
  32. ------------------------------ ------------------------------   
  33. SYS_C0010903                   ANBOB   
  34. anbob@ANBOB>  select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name="TESTNEW_IME";   
  35.   
  36. INDEX_NAME                     TABLE_OWNER   
  37. ------------------------------ ------------------------------   
  38. SYS_C0010904                   ANBOB   
  39. anbob@ANBOB>  select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name="TESTNEW_DEF";   
  40.   
  41. INDEX_NAME                     TABLE_OWNER   
  42. ------------------------------ ------------------------------   
  43. SYS_C0010905                   ANBOB   
  44.   
  45. anbob@ANBOB> select segment_name from user_segments where segment_name="SYS_C0010903";   
  46.   
  47. no rows selected   
  48.   
  49. anbob@ANBOB> select segment_name from user_segments where segment_name="SYS_C0010904";   
  50.   
  51. SEGMENT_NAME   
  52. ---------------------------------------------------------------------------------   
  53. SYS_C0010904   
  54. anbob@ANBOB> select segment_name from user_segments where segment_name="SYS_C0010905";   
  55.   
  56. no rows selected   
  57.   
  58. anbob@ANBOB> insert into testnew values(1,"anbob.com");   
  59.   
  60. 1 row created.   
  61.   
  62. anbob@ANBOB> commit;   
  63.   
  64. Commit complete.   
  65.   
  66. anbob@ANBOB> select segment_name from user_segments where segment_name like "TESTNEW%";   
  67.   
  68. SEGMENT_NAME   
  69. ---------------------------------------------------------------------------------   
  70. TESTNEW   
  71. TESTNEW_IME   
  72.   
  73. anbob@ANBOB>  select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name="TESTNEW";   
  74.   
  75. INDEX_NAME                     TABLE_OWNER   
  76. ------------------------------ ------------------------------   
  77. SYS_C0010903                   ANBOB   
  78.   
  79. anbob@ANBOB> select segment_name from user_segments where segment_name="SYS_C0010903";   
  80.   
  81. SEGMENT_NAME   
  82. ---------------------------------------------------------------------------------   
  83. SYS_C0010903   
  84. anbob@ANBOB> truncate table testnew;   
  85.   
  86. Table truncated.   
  87.   
  88. anbob@ANBOB> select segment_name from user_segments where segment_name like "TESTNEW%";   
  89.   
  90. SEGMENT_NAME   
  91. ---------------------------------------------------------------------------------   
  92. TESTNEW   
  93. TESTNEW_IME   
  94. anbob@ANBOB> conn sys/oracle as sysdba   
  95. Connected.   
  96. sys@ANBOB> create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred;   
  97. create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred   
  98. *   
  99. ERROR at line 1:   
  100. ORA-14223: 此表不支持延迟创建段  
sys@ANBOB> conn anbob/anbobConnected.anbob@ANBOB> select * from v$version;BANNER--------------------------------------------------------------------------------Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - ProductionPL/SQL Release 11.2.0.1.0 - ProductionCORE11.2.0.1.0ProductionTNS for Linux: Version 11.2.0.1.0 - ProductionNLSRTL Version 11.2.0.1.0 - Productionanbob@ANBOB> create table testnew(id int primary key,name varchar2(10));Table created.anbob@ANBOB> create table testnew_IME(id int primary key,name varchar2(10)) segment creation immediate;Table created.anbob@ANBOB> create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred;Table created.anbob@ANBOB> select segment_name from user_segments where segment_name like "TESTNEW%";SEGMENT_NAME---------------------------------------------------------------------------------TESTNEW_IMEanbob@ANBOB>select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name="TESTNEW";INDEX_NAME TABLE_OWNER------------------------------ ------------------------------SYS_C0010903 ANBOBanbob@ANBOB>select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name="TESTNEW_IME";INDEX_NAME TABLE_OWNER------------------------------ ------------------------------SYS_C0010904 ANBOBanbob@ANBOB>select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name="TESTNEW_DEF";INDEX_NAME TABLE_OWNER------------------------------ ------------------------------SYS_C0010905 ANBOBanbob@ANBOB> select segment_name from user_segments where segment_name="SYS_C0010903";no rows selectedanbob@ANBOB> select segment_name from user_segments where segment_name="SYS_C0010904";SEGMENT_NAME---------------------------------------------------------------------------------SYS_C0010904anbob@ANBOB> select segment_name from user_segments where segment_name="SYS_C0010905";no rows selectedanbob@ANBOB> insert into testnew values(1,"anbob.com");1 row created.anbob@ANBOB> commit;Commit complete.anbob@ANBOB> select segment_name from user_segments where segment_name like "TESTNEW%";SEGMENT_NAME---------------------------------------------------------------------------------TESTNEWTESTNEW_IMEanbob@ANBOB>select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name="TESTNEW";INDEX_NAME TABLE_OWNER------------------------------ ------------------------------SYS_C0010903 ANBOBanbob@ANBOB> select segment_name from user_segments where segment_name="SYS_C0010903";SEGMENT_NAME---------------------------------------------------------------------------------SYS_C0010903anbob@ANBOB> truncate table testnew;Table truncated.anbob@ANBOB> select segment_name from user_segments where segment_name like "TESTNEW%";SEGMENT_NAME---------------------------------------------------------------------------------TESTNEWTESTNEW_IMEanbob@ANBOB> conn sys/oracle as sysdbaConnected.sys@ANBOB> create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred;create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred*ERROR at line 1:ORA-14223: 此表不支持延迟创建段note:
11g r2默认是使用segment creation deferred建立,新建的无记录表不分配sement,当insert 第一条记录时分配段空间,不会因truncate而回收,并且在sys schema里不支持,听说exp 也不会导出Oracle RDA 4.20 初体验Oracle 估算数据库大小的方法相关资讯      Oracle教程 
  • Oracle中纯数字的varchar2类型和  (07/29/2015 07:20:43)
  • Oracle教程:Oracle中查看DBLink密  (07/29/2015 07:16:55)
  • [Oracle] SQL*Loader 详细使用教程  (08/11/2013 21:30:36)
  • Oracle教程:Oracle中kill死锁进程  (07/29/2015 07:18:28)
  • Oracle教程:ORA-25153 临时表空间  (07/29/2015 07:13:37)
  • Oracle教程之管理安全和资源  (04/08/2013 11:39:32)
本文评论 查看全部评论 (0)
表情: 姓名: 字数