Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1702923
  • 博文数量: 136
  • 博客积分: 10021
  • 博客等级: 上将
  • 技术积分: 3261
  • 用 户 组: 普通用户
  • 注册时间: 2007-01-22 11:26
文章分类

全部博文(136)

文章存档

2010年(1)

2009年(26)

2008年(109)

我的朋友

分类: Oracle

2008-07-03 15:16:37

IMP/EXP 是我们经常使用的工具,它是二进制文件,所以我们无法读懂它里面的内容。但可以通过在 IMP 时的错误提示,大概猜测出它里面的内容。在《Oracle Programmer's Hand Book - Beginner》中 Part V 的第1小节,我已经介绍了一些 DMP 文件的内容,今天做 IMP,又发现了一个有意思的问题:DMP 文件里是不包括索引数据的,而只包括表中的数据,最后再带一个创建索引的语句。下面是一个 IMP 的测试过程:
 
C:\Documents and Settings\YUECHAOTIAN>imp userid='sys/password as sysdba' fromuser
=xt_hos03 touser=y1 file=E:\200080630.dmp tables=hjsfk
 
Import: Release 9.2.0.1.0 - Production on 星期四 7月 3 11:01:20 2008
 
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
 

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
 
经由常规路径导出由EXPORT:V08.01.06创建的文件
 
警告: 此对象由 XT_HOS03 导出, 而不是当前用户
 
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
导出服务器使用ZHS16GBK NCHAR 字符集 (可能的ncharset转换)
. 正在将XT_HOS03的对象导入到 Y1
. . 正在导入表                         "HJSFK"    2860582行被导入
IMP-00017: 由于 ORACLE 的 1652 错误,以下的语句失败
 "CREATE INDEX "INDEX_HJSFK_CFH_YYNM_KFRQ" ON "HJSFK" ("CFH" , "YYNM" , "KFRQ"
 "" )  PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 199024640 NEXT 9942"
 "6304 MINEXTENTS 1 MAXEXTENTS 505 PCTINCREASE 50 FREELISTS 1 FREELIST GROUPS"
 " 1 BUFFER_POOL DEFAULT)                     LOGGING"
IMP-00003: 遇到 ORACLE 错误 1652
ORA-01652: 无法通过128(在表空间TEMP中)扩展 temp 段
IMP-00017: 由于 ORACLE 的 1652 错误,以下的语句失败
 "ALTER TABLE "HJSFK" ADD  PRIMARY KEY ("ZYH","CFH","KFRQ","XGBH","YYNM") USI"
 "NG INDEX PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 298975232 NEXT "
 "149143552 MINEXTENTS 1 MAXEXTENTS 121 PCTINCREASE 50 FREELISTS 1 FREELIST G"
 "ROUPS 1 BUFFER_POOL DEFAULT) TABLESPACE "SYSTEM" ENABLE"
IMP-00003: 遇到 ORACLE 错误 1652
ORA-01652: 无法通过128(在表空间TEMP中)扩展 temp 段
成功终止导入,但出现警告。
 
这是因为数据库的 temp 表空间设置得不够,导致的错误,从错误信息中可以看到这几个创建索引的语句。
 
由此可以猜测:DMP 文件中是没有索引数据的,而是导入表中数据完毕后,用一个 CREATE INDEX ... 命令重新创建索引。因为索引段中是包括每行的 rowid 的,这都需要从表中查找的,这样实现 EXP/IMP 功能,确实很简单,但如果索引很多,那么导入这个表的时间可以就稍长点,这就是为啥你已经看到这个表导入的行数,但仍然一直停在那里,迟迟不导入下一张表的原因。就像我这次的导入,在这里停了很长时间:
 
C:\Documents and Settings\YUECHAOTIAN>imp userid='sys/password as sysdba' fromuser=
xt_hos03 touser=y1 file=E:\200080630.dmp tables=hjsfk
 
Import: Release 9.2.0.1.0 - Production on 星期四 7月 3 11:01:20 2008
 
Copyright (c) 1982, 2002, Oracle Corporation.  All rights reserved.
 

连接到: Oracle9i Enterprise Edition Release 9.2.0.1.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.1.0 - Production
 
经由常规路径导出由EXPORT:V08.01.06创建的文件
 
警告: 此对象由 XT_HOS03 导出, 而不是当前用户
 
已经完成ZHS16GBK字符集和AL16UTF16 NCHAR 字符集中的导入
导出服务器使用ZHS16GBK NCHAR 字符集 (可能的ncharset转换)
. 正在将XT_HOS03的对象导入到 Y1
. . 正在导入表                         "HJSFK"    2860582行被导入

而且还大量占用了 temp 表空间,建索引时需要排序,就需要 temp 表空间了。
阅读(4234) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~