一、引言:
在看《收获,不止Oracle》的神奇,走进逻辑体系世界一章时,需要新建一张表查看Extents的情况,由于该书的环境是ORACLE10G的,因此新建空表以后立刻就分配Segment,而我使用的是Oracle11gR2,新建空表后没有立即分配Segment。这就是11GR2的新特性,延迟段创建,就是说从11GR2开始默认创建的表不会立即分配segment,不会占用磁盘空间,当第一条数据insert时才会分配空间。
二、实验模拟:
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 Linux: Version 11.2.0.1.0 - Production NLSRTL Version 11.2.0.1.0 - Production SQL> create table testnew(id int primary key,name varchar2(10)); Table created SQL> create table testnew_IME(id int primary key,name varchar2(10)) segment creation immediate; Table created SQL> create table testnew_def(id int primary key,name varchar2(10)) segment creation deferred; Table created SQL> select segment_name from user_segments where segment_name like 'TESTNEW%'; SEGMENT_NAME -------------------------------------------------------------------------------- TESTNEW_IME SQL> select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name='TESTNEW'; INDEX_NAME TABLE_OWNER ------------------------------ ------------------------------ SYS_C0011192 JACK SQL> select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name='TESTNEW_IME'; INDEX_NAME TABLE_OWNER ------------------------------ ------------------------------ SYS_C0011193 JACK SQL> select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name='TESTNEW_DEF'; INDEX_NAME TABLE_OWNER ------------------------------ ------------------------------ SYS_C0011194 JACK SQL> select segment_name from user_segments where segment_name='SYS_C0011192'; SEGMENT_NAME -------------------------------------------------------------------------------- SQL> select segment_name from user_segments where segment_name='SYS_C0011193'; SEGMENT_NAME -------------------------------------------------------------------------------- SYS_C0011193 SQL> select segment_name from user_segments where segment_name='SYS_C0011194'; SEGMENT_NAME -------------------------------------------------------------------------------- SQL> insert into testnew values(1,'anbob.com'); 1 row inserted SQL> commit; Commit complete SQL> select segment_name from user_segments where segment_name like 'TESTNEW%'; SEGMENT_NAME -------------------------------------------------------------------------------- TESTNEW TESTNEW_IME SQL> select INDEX_NAME,TABLE_OWNER from USER_indexes where table_name='TESTNEW'; INDEX_NAME TABLE_OWNER ------------------------------ ------------------------------ SYS_C0011192 JACK SQL> select segment_name from user_segments where segment_name='SYS_C0011192'; SEGMENT_NAME -------------------------------------------------------------------------------- SYS_C0011192 SQL> truncate table testnew; Table truncated SQL> select segment_name from user_segments where segment_name like 'TESTNEW%'; SEGMENT_NAME -------------------------------------------------------------------------------- TESTNEW TESTNEW_IME SQL> conn /as sysdba 已连接。 SQL> 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 * 第 1 行出现错误: ORA-14223: 此表不支持延迟创建段
注意:
11gR2默认是使用segment creation deferred建立,新建的无记录表不分配segment,当insert第一条记录时分配段空间,不会因truncate而回收,并且在sys schema里不支持,exp也不会导出。
关于这个主要还是跟deferred_segment_creation参数有关,在11gR2中该参数的值为true,说明当创建对象(如表),初始没有数据,不会立即创建segment。
如果该参数设置为false,表明之后的创建的表,初始没有数据,会立即创建segment。
下面看一下它的效果:
SQL> alter system set deferred_segment_creation=false; System altered SQL> create table jack(x int); Table created SQL> select segment_name,segment_type,extents,blocks from user_segments where segment_name='JACK'; SEGMENT_NAME SEGMENT_TYPE EXTENTS BLOCKS -------------------------------------------------------------------------------- ------------------ ---------- ---------- JACK TABLE 1 8
相关推荐
然而,在使用 exp 命令导出 Oracle 11g 数据库时,空表会出现错误,这是因为 Oracle 11g 默认对空表不分配 segment。为了解决这个问题,我们可以使用以下几种方法。 方法 1: 修改 deferred_segment_creation 参数 ...
Oracle 11g R2 中新增的特性,使得 exp 无法导出空表,这是因为 11g R2 中有一个新特性,即当表无数据时,不分配 segment,以节省空间。这种情况下,使用 exp 命令无法导出空表。下面将介绍四种解决方法: 解决...
在Oracle 11gR2版本中,Oracle数据库引入了一个新的特性——延迟段创建(Deferred Segment Creation)。这个特性主要是为了优化空间管理,特别是在处理大量空表时,可以有效地避免不必要的磁盘空间占用。延迟段创建...
在 Oracle 11g 中,有一个新特性:当表无数据时,不分配 segment,以节省空间。这使得在通过 exp 导出时,无法导出没有分配 segment 的表。解决这个问题有两种情况: 情况一:数据库创建时 可以通过设置 deferred_...
### Linux 5.5 + Oracle 11gR2 SQL*Plus 错误解决方法 在使用 Linux 5.5 系统上安装并运行 Oracle 11gR2 数据库时,用户可能会遇到 SQL*Plus 启动失败的问题。具体错误信息为:“sqlplus:error while loading ...
### Oracle 11gR2 for RHEL6 安装手册含备份方案超详细解析 #### 一、系统环境概述 在本章节中,我们将会详细介绍Oracle 11gR2在RHEL6上的安装环境配置。为了确保Oracle数据库能够稳定运行,我们需要对操作系统...
首先,通过调整`deferred_segment_creation`参数的值,可以确保未来创建的空表能够在导出时不出现问题;其次,通过为现有空表手动分配存储空间,解决了历史遗留问题,使得所有表都能被正常导出。这种方法简单有效,...
Oracle11g为提高性能和节省空间,默认情况下对空表不分配segment(即数据段),这就导致了在使用exp工具进行数据导出时,空表无法被导出。这个行为是受deferred_segment_creation参数控制的,当其设置为TRUE时,默认...
在Oracle 11g及以上版本中,用户可能会遇到在尝试导出空表时失败的问题,主要表现为出现"EXP-00011: table 不存在"的错误信息。这个问题是由于Oracle的一种优化策略,即在11g版本以后,默认情况下,新建的表不会立即...
ORACLE 11G中有个新特性,当表无数据时,不分配segment,以节省空间。 解决方法: 1)insert一行,再rollback就产生segment了 该方法是在在空表中插入数据,再删除,则产生segment。导出时则可导出空表。 ...
在 Oracle 11G 中,默认情况下,空表不会被分配 segment,以节省空间。这意味着,当用户尝试导出空表时,exp 命令将无法完成导出任务。为了解决这个问题,有多种方法可以使用。 1. 插入一行数据再rollback 一种...
然而,Oracle11g在设计时默认对空表不分配segment,因此在使用exp导出数据库时,空表不会被包含在导出文件中。这对于完整备份和恢复所有表的场景来说,可能是一个问题。下面,我们将详细讨论如何处理这个问题,以及...
在Oracle 11g数据库系统中,用户可能会遇到无法导出空表的问题,这主要与Oracle 11g引入的一个新特性有关,即deferred_segment_creation参数。这个参数默认为true,它的作用在于延迟段的创建。当这个参数启用时,...
在 Oracle 11g R2 版本中,可能会出现空表无法导出的问题,这是由于deferred_segment_creation 参数的原因。解决这个问题可以使用三种方法:insert 一行再 rollback、设置 deferred_segment_creation 参数、强行修改...
### Oracle导出空表解决办法 #### 背景与问题描述 在Oracle数据库管理过程中,经常遇到的一个问题是无法导出空表。这种情况通常发生在使用`expdp`或`exp`命令进行数据导出时,如果表为空,则可能会遇到无法导出的...
一、不能导出空表的原因1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。 2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。 在...
关于R2无法exp出空表的方法。考虑到节省空间,oracle11g r2不给空表分配segment,具体办法见附件。
1、Oracle11g默认对空表不分配segment,故使用exp导出Oracle11g数据库时,空表不会导出。 2、设置deferred_segment_creation 参数为FALSE后,无论是空表还是非空表,都分配segment。 在sqlplus中,执行如下命令: ...
然而,在11G R2 版本中,由于一个新特性,空表在没有数据的情况下不会分配 segment,导致无法通过 exp 导出。这个问题可以通过以下几种方法解决: 1. **插入并回滚数据**:向空表中插入一行数据,然后执行 rollback...
- **业务连续性**:利用Oracle 11g的高可用性特性确保关键业务不间断运行。 - **数据安全性**:通过Oracle 11g提供的加密技术和访问控制策略保护敏感数据安全。 - **资源高效利用**:借助Oracle 11g的自动化管理工具...