`
itspace
  • 浏览: 978728 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle exp compress参数引起的空间浪费

 
阅读更多
今天碰到一个比较有趣的问题,记录一下。

客户需要将表结构导出来做测试,并不将内容导出。
$exp ydjy/ydjy file=/tmp/ggs.dmp ROWS=n OWNER=ydjy STATISTICS=none
并用以下语句导入:
$imp zhoul/zhoul file=/tmp/ydjy.dmp fromuser=ydjy touser=zhoul

导入的时候出现错误:
"CREATE TABLE "SHENFENGZHENGXIUGAI" ("AAC001" NUMBER(16, 0) NOT NULL ENABLE, "EAC001" VARCH"
"AR2(12) NOT NULL ENABLE, "AAA029" VARCHAR2(3) NOT NULL ENABLE, "AAE135" VAR"
"CHAR2(20) NOT NULL ENABLE, "AAA130" VARCHAR2(6), "AAC003" VARCHAR2(50) NOT "
"NULL ENABLE, "AAC004" VARCHAR2(1) NOT NULL ENABLE, "AAC005" VARCHAR2(3) NOT"
" NULL ENABLE, "AAC006" NUMBER(8, 0) NOT NULL ENABLE, "AAC007" NUMBER(8, 0),"
" "AAC009" VARCHAR2(3) NOT NULL ENABLE, "AAC010" VARCHAR2(100), "AAC011" VAR"
"CHAR2(3), "AAC012" VARCHAR2(3) NOT NULL ENABLE, "AAC014" VARCHAR2(3), "AAC0"
"15" VARCHAR2(3), "AAC017" VARCHAR2(3), "AAC020" VARCHAR2(3), "AAE005" VARCH"
"AR2(20), "AAE006" VARCHAR2(100), "AAE007" VARCHAR2(6), "AAE013" VARCHAR2(20"
"00), "AAZ308" NUMBER(16, 0), "AAE159" VARCHAR2(50), "AAB401" VARCHAR2(20), "
""PRSENO" NUMBER(12, 0) NOT NULL ENABLE)  PCTFREE 10 PCTUSED 40 INITRANS 1 M"
"AXTRANS 255 STORAGE(INITIAL 192937984 NEXT 1048576 FREELISTS 1 FREELIST GRO"
"UPS 1 BUFFER_POOL DEFAULT)                    LOGGING NOCOMPRESS"
IMP-00017: following statement failed with ORACLE error 1658:
"CREATE TABLE "AC01MERGE" ("AAC001" NUMBER(16, 0) NOT NULL ENABLE, "EAC001" "
"VARCHAR2(12) NOT NULL ENABLE, "AAA029" VARCHAR2(3) NOT NULL ENABLE, "AAE135"
"" VARCHAR2(20) NOT NULL ENABLE, "AAA130" VARCHAR2(6), "AAC003" VARCHAR2(50)"
" NOT NULL ENABLE, "AAC004" VARCHAR2(1) NOT NULL ENABLE, "AAC005" VARCHAR2(3"
") NOT NULL ENABLE, "AAC006" NUMBER(8, 0) NOT NULL ENABLE, "AAC007" NUMBER(8"
", 0), "AAC009" VARCHAR2(3) NOT NULL ENABLE, "AAC010" VARCHAR2(100), "AAC011"
"" VARCHAR2(3), "AAC012" VARCHAR2(3) NOT NULL ENABLE, "AAC014" VARCHAR2(3), "
""AAC015" VARCHAR2(3), "AAC017" VARCHAR2(3), "AAC020" VARCHAR2(3), "AAE005" "
"VARCHAR2(20), "AAE006" VARCHAR2(100), "AAE007" VARCHAR2(6), "AAE013" VARCHA"
"R2(2000), "AAZ308" NUMBER(16, 0), "AAE159" VARCHAR2(50), "AAB401" VARCHAR2("
"20), "PRSENO" NUMBER(12, 0) NOT NULL ENABLE)  PCTFREE 10 PCTUSED 40 INITRAN"
"S 1 MAXTRANS 255 STORAGE(INITIAL 3145728 NEXT 1048576 FREELISTS 1 FREELIST "
"GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS"
IMP-00003: ORACLE error 1658 encountered
ORA-01658: unable to create INITIAL extent for segment in tablespace USERS
IMP-00017: following statement failed with ORACLE error 1658:

查看了一下数据文件是自动扩展打开的
FILE_NAME                      AUT
------------------------------ ---
/lank/db/lank/users01.dbf      YES

怀疑自动扩展是不是有bug,手工扩展一下数据文件,发现空间不足,当然出现此类错误,最好解决了,解决过程不说明了。
SQL> alter database datafile '/lank/db/lank/users01.dbf' resize 120m;
alter database datafile '/lank/db/lank/users01.dbf' resize 120m
*
ERROR at line 1:
ORA-01237: cannot extend datafile 4
ORA-01110: data file 4: '/lank/db/lank/users01.dbf'
ORA-19502: write error on file "/lank/db/lank/users01.dbf", blockno 14721
(blocksize=8192)
ORA-27072: File I/O error
Linux-x86_64 Error: 28: No space left on device
Additional information: 4
Additional information: 14721
Additional information: -1

导入表结构发现这张表竟然达到了190M,而这张表为空,到这里有经验的人可能一下子看出来了原因了


SEGMENT_NAME                        BYTES
------------------------------ ----------
SHENFENGZHENGXIUGAI             192937984

原来在exp时有个参数COMPRESS主要用于是否将segment的extent在导出时是否合并,而在上述导出语句中,我们可以看到compress没有加,也就是说保持默认,也就是说导出时Oracle将表结构的extent合并到一个extent中。
Keyword    Description (Default)      Keyword      Description (Default)
--------------------------------------------------------------------------
USERID     username/password          FULL         export entire file (N)
BUFFER     size of data buffer        OWNER        list of owner usernames
FILE       output files (EXPDAT.DMP)  TABLES       list of table names
COMPRESS   import into one extent (Y) RECORDLENGTH length of IO record
GRANTS     export grants (Y)          INCTYPE      incremental export type
INDEXES    export indexes (Y)         RECORD       track incr. export (Y)
DIRECT     direct path (N)            TRIGGERS     export triggers (Y)
LOG        log file of screen output  STATISTICS   analyze objects (ESTIMATE)
ROWS       export data rows (Y)       PARFILE      parameter filename
CONSISTENT cross-table consistency(N) CONSTRAINTS  export constraints (Y)

OBJECT_CONSISTENT    transaction set to read only during object export (N)
FEEDBACK             display progress every x rows (0)
FILESIZE             maximum size of each dump file
FLASHBACK_SCN        SCN used to set session snapshot back to
FLASHBACK_TIME       time used to get the SCN closest to the specified time
QUERY                select clause used to export a subset of a table
RESUMABLE            suspend when a space related error is encountered(N)
RESUMABLE_NAME       text string used to identify resumable statement
RESUMABLE_TIMEOUT    wait time for RESUMABLE
TTS_FULL_CHECK       perform full or partial dependency check for TTS
VOLSIZE              number of bytes to write to each tape volume
TABLESPACES          list of tablespaces to export
TRANSPORT_TABLESPACE export transportable tablespace metadata (N)
TEMPLATE             template name which invokes iAS mode export

Export terminated successfully without warnings.


问题重现:

SQL> conn ggs/ggs
Connected.
SQL> create table zhoul (name char(2000));

Table created.
可以看到刚创建出来的表格INITIAL_EXTENT为65536
SQL> select INITIAL_EXTENT,NEXT_EXTENT from user_tables where TABLE_NAME='ZHOUL';

INITIAL_EXTENT NEXT_EXTENT
-------------- -----------
         65536     1048576

插入一定数据量之后,表格扩展到了75497472字节
SQL> select count(*) from zhoul;

  COUNT(*)
----------
     24576


SQL> select sum(BYTES) from user_extents where SEGMENT_NAME='ZHOUL';

SUM(BYTES)
----------
  75497472

接下来用compress取不同值导出,观察建表脚本。
exp ggs/ggs tables=zhoul rows=n  file=/tmp/zhoul02.dmp

[ora10g@linux-64 ~]$ strings /tmp/zhoul01.dmp
EXPORT:V10.02.01
DGGS
RTABLES
8192
                                        Fri Oct 28 11:26:51 2011/tmp/zhoul01.dmp
#G#G
#G#G
+00:00
BYTE
UNUSED
INTERPRETED
DISABLE:ALL
METRICST
TABLE "ZHOUL"
CREATE TABLE "ZHOUL" ("NAME" CHAR(2000))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 75497472 NEXT 1048576 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS
METRICSTreferential integrity constraints
METRICET 0
METRICSTtriggers
METRICET 0
METRICSTbitmap, functional and extensible indexes
METRICET 0
METRICSTposttables actions
METRICET 0
METRICSTPost-inst procedural actions
METRICET 0
METRICETG0
EXIT
EXIT


exp ggs/ggs tables=zhoul rows=n compress=n file=/tmp/zhoul02.dmp

[ora10g@linux-64 ~]$ strings /tmp/zhoul02.dmp
EXPORT:V10.02.01
DGGS
RTABLES
8192
                                        Fri Oct 28 11:27:46 2011/tmp/zhoul02.dmp
#G#G
#G#G
+00:00
BYTE
UNUSED
INTERPRETED
DISABLE:ALL
METRICST
TABLE "ZHOUL"
CREATE TABLE "ZHOUL" ("NAME" CHAR(2000))  PCTFREE 10 PCTUSED 40 INITRANS 1 MAXTRANS 255 STORAGE(INITIAL 65536 NEXT 1048576 FREELISTS 1 FREELIST GROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "USERS" LOGGING NOCOMPRESS
METRICSTreferential integrity constraints
METRICET 0
METRICSTtriggers
METRICET 0
METRICSTbitmap, functional and extensible indexes
METRICET 0
METRICSTposttables actions
METRICET 0
METRICSTPost-inst procedural actions
METRICET 0
METRICETG0
EXIT
EXIT

分享到:
评论
1 楼 孤星119 2012-07-09  
好熟悉的数据库字段啊, 上家公司做的项目每天都跟这些字段打招呼。
AAC001 人员内码? AAC003 人员姓名? AAC004 性别? AAE135 险种编码?AAB001 单位内码?  ……  不知道记错没有。 难道和博主曾在同一家公司? 呵呵

相关推荐

    Oracle中用exp_imp命令参数详解

    ### Oracle中用exp/imp命令参数详解 #### 一、使用`exp`命令进行数据导出 `exp`(Export)命令是Oracle提供的一种用于备份和迁移数据的强大工具。通过`exp`命令,用户可以将数据库中的数据以及相关元数据(如表...

    oracle exp-imp命令详解.doc

    除了这些基本模式,Oracle EXP还支持增量备份,只备份自上次备份以来更改的数据,从而减少备份的时间和空间需求。增量备份的命令类似于完全备份,但需要设置`inctype=incremental`参数。 Oracle IMP(Import)命令...

    Oracle expimp,备份或导入时注意的事项

    Oracle exp/imp 是Oracle数据库系统提供的两个实用工具,用于数据的备份和恢复。exp(Export)用于导出数据库中的对象和数据,而imp(Import)则用于将这些导出的数据导入到另一个数据库中。在实际操作中,由于各种...

    oracle的expimp使用方法学习

    Oracle数据库的备份是确保数据安全的关键操作,而`exp`和`imp`是Oracle数据库中用于逻辑备份的主要工具。这两个命令允许用户将数据库中的数据导出(exp)到文件,然后在需要时导入(imp)回数据库。逻辑备份在某些...

    oracle exp imp详解

    以上就是 Oracle EXP/IMP 的详细解析及常见参数介绍。这些工具虽然较为传统,但对于一些具体场景下的数据库操作仍然非常实用。在实际应用中,根据具体的业务需求和技术背景选择合适的工具和方法是非常重要的。

    oracle imp exp几点应用技巧

    标题和描述均提到了“oracle imp exp几点应用技巧”,这暗示了文章主要聚焦于Oracle数据库的导入(import,简称imp)和导出(export,简称exp)操作的实用技巧。以下是对这一主题的深入探讨: ### Oracle Imp Exp ...

    oracle数据库exp_imp命令详解[参考].pdf

    Oracle 数据库 exp/imp 命令详解 Oracle 数据库 exp/imp 命令是 Oracle 中最常用的命令之一。...exp/imp 命令是 Oracle 数据库备份和恢复的重要工具,了解其使用方法和参数可以帮助我们更好地备份和恢复数据库。

    Oracle exp imp命令详解

    通过以上内容,我们可以看到Oracle `exp` 和 `imp` 命令提供了非常丰富的参数设置,可以根据不同的需求灵活地进行数据的导出与导入操作。熟练掌握这些参数,对于日常数据库管理和维护工作来说是非常有帮助的。

    ORACLE EXPIMP的使用详解

    Oracle EXPIMP工具是Oracle数据库系统中用于数据迁移和备份恢复的重要工具。虽然随着技术的发展,RMAN和其他第三方工具已经成为了大型数据库备份的主要选择,但在处理小型数据库、表空间迁移、表抽取以及解决逻辑和...

    oracle备份及恢复参数

    - `compress` 参数可以启用压缩,减少导出文件大小。 - `resumable` 参数允许在中断后恢复导出操作。 - `consistent` 与 `object_consistent` 参数的选择应基于恢复需求和数据一致性要求。 了解并熟练掌握Oracle ...

    关于oracle11g数据库备份存在空间不足解决办法.docx

    exp jtkg/Jtkg_2017 owner=jtkg rows=y indexes=y compress=n buffer=65536feedback=100000 volsize=0file=/home/oracle/app/oradata/ljh/exp_jtkg_pipe.dmplog=/home/oracle/app/oradata/ljh/exp_jtkg_20210103.log...

    Oracle备份恢复工具EXPIMP的使用

    Oracle数据库的备份和恢复是数据库管理中至关重要的环节,EXPIMP工具是Oracle提供的一种实用的数据导入导出工具,用于实现数据的备份和恢复。本文将详细介绍如何使用EXPIMP工具以及相关的注意事项。 首先,EXP...

    oracle空间碎片的整理

    - **存储浪费**:过多的空间碎片会导致可用空间无法有效利用,从而浪费存储资源。 #### 二、评估Oracle空间碎片程度 为了准确评估Oracle空间碎片的程度,可以使用以下SQL语句: ```sql SELECT tablespace_name, ...

    Oracle数据备份(exp.exe)、恢复工具(imp.exe)使用方法.docx

    #### 一、Oracle 数据备份工具 exp.exe 使用方法 **1.1 基础概念** 在Oracle数据库管理中,`exp.exe`是一款功能强大的命令行工具,主要用于数据的备份操作。通过设置不同的参数,可以实现对整个数据库或特定表的...

    Oracle exp、imp注意和使用

    ### Oracle exp、imp 注意事项与使用方法 #### 一、Oracle exp、imp 概述 在Oracle数据库管理中,`exp` 和 `imp` 是两个非常重要的工具,用于数据的导出(Export)和导入(Import)。它们为数据库管理员提供了一种...

    Oracle expimp导出导入命令及数据库备份很详细.doc

    - 在exp命令中添加`compress=y`参数也可以在导出时直接对文件进行压缩。 5. **性能优化**: - 为了提高导出导入的效率,可以调整数组缓冲区大小(`array fetch buffer size`),这个值决定了每次从数据库读取或...

    oracle_exp_imp_详解

    Oracle的`exp`和`imp`工具是数据库管理员在管理Oracle...总的来说,`exp`和`imp`是Oracle数据库管理中的基础工具,虽然在现代数据库管理中可能不再是首选,但了解它们的用法和参数对于数据库管理员来说仍然至关重要。

    关于oracle数据库备份存在空间不足问题.docx

    Oracle 数据库备份存在磁盘空间不足的问题是备份过程中常见的问题,但通过创建一个脚本程序和使用 exp 命令,可以解决这个问题。同时,我们也需要注意磁盘空间的使用情况,以避免磁盘空间不足的问题。

    oracle中exp与imp命令详解.pdf

    Oracle 中 exp 与 imp 命令详解 Oracle 数据库中有两种备份方法:物理备份和逻辑备份。物理备份需要数据库运行在归档模式下,并需要大量的外部存储设备。逻辑备份则可以在数据库运行在非归档模式下,不需要外部存储...

    oracle_exp_imp详解

    ### Oracle EXP/IMP 详解 #### 一、概述 Oracle 的 EXP 和 IMP 是数据库领域内非常古老且重要的命令行工具,它们主要用于数据的导出与导入。虽然在现代大型数据库管理中,这两种工具逐渐被 RMAN 等更为高效的技术...

Global site tag (gtag.js) - Google Analytics