0

Oracle 11G,Linux 200GB 空间。一些文件已经占用了大约 25GB。

我收到了一个.dmp50GB 的“”文件,为了执行导入,我创建了一个带有 100GB 的 bigdatafile 的 bigtablespace(因为我认为这已经足够了)。

导入命令:

imp user/pwd full=Y log=/home/oracle/log.txt file=/usr/oracle/public/dump.dmp

但是在导入大量表并向其中插入大量数据后,我收到以下错误消息:

IMP-00017: following statement failed with ORACLE error 603:
 "CREATE UNIQUE INDEX "PR_TABLE1" ON "TABLE1" ("TABLE1_ID" , "ROW_NUM" , "COL_NUM" ) "
 " PCTFREE 10 INITRANS 2 MAXTRANS 255 STORAGE(INITIAL 4294967294 FREELISTS 1 "
 "FREELIST GROUPS 1 BUFFER_POOL DEFAULT)                      NOLOGGING"
IMP-00003: ORACLE error 603 encountered
ORA-00603: ORACLE server session terminated by fatal error
ORA-01114: IO error writing block to file 201 (block # 1719438)
ORA-27072: File I/O error
Linux-x86_64 Error: 25: Inappropriate ioctl for device Additional information: 4 Additional information: 1719438 Additional information:
114688
ORA-01114: IO error writing block to file 201 (block # 1719438)
ORA-27072: File I/O error
Linux-x86_64 Error: 25: Inappropriate ioctl for device Additional information: 4 Additional information: 1719438 Additional info
IMP-00017: following statement failed with ORACLE error 3114:
 "BEGIN  SYS.DBMS_EXPORT_EXTENSION.SET_IMP_SKIP_INDEXES_OFF; END;"
IMP-00003: ORACLE error 3114 encountered
ORA-03114: not connected to ORACLE
IMP-00000: Import terminated unsuccessfully

“临时”数据文件消耗了大约 15GB。

根据我在网上阅读的有关试图扩展自身的数据文件的内容,它似乎空间不足。Linux 显示大约 8GB 可用空间,但可能会将它们保留用于其他用途。

问题是:有没有办法让我知道我应该给硬盘驱动器多少空间才能成功实现导入???

之所以问这个是因为上传“.dmp”文件到服务器需要很长时间,创建“.dbf”文件并实现导入需要更多时间。

客户不知道此信息。我不是 Oracle DBA,但我曾经成功地将 .Net 应用程序连接到 Oracle 数据库,所以现在我应该是这里的专家。

4

1 回答 1

1

我假设您的数据文件和临时文件在文件系统上?

因此,对于临时文件,Oracle 将它们创建为稀疏文件。所以,如果你的文件系统有 100MB 的可用空间。即使只有 100MB 的可用空间,您也可以在该文件系统中创建一个大小为 2GB 的临时表空间。因此,很容易过度分配空间。所以,一旦你开始使用这个临时空间,当你的使用量超过 100MB 时,你就会得到上面的错误,“不适合设备的 ioctl”。

因此,请理智地检查您的数据文件和临时文件的大小,以及您实际拥有的可用空间量。请注意,一旦您开始使用临时文件中的空间,文件的大小(由 O/S 报告)可能不会改变,但由 O/S 报告的可用空间会减少,直到达到零并且文件系统已满。

另请注意,在大型表上创建索引可能会占用大量临时空间,尤其是在您使用 WORKAREA_SIZE_POLICY=AUTO 和 PGA_AGGREGATE_TARGET 时。(我知道,如果您是 Oracle 新手,而不是 DBA,那可能没有任何意义,请不要担心。)

您可能想要做的是使用“INDEXES=N”运行导入,只导入数据,然后在事后创建索引,从脚本运行。这样,您可以设置 WORKAREA_SIZE_POLICY=MANUAL,并设置非常大的 sort_area_size 和 sort_area_retained_size。这可能(也可能不会,取决于正在创建的索引的大小)减少临时表空间的空间使用。

因此,总而言之,首先检查临时文件的大小以及文件系统中剩余的空间。如果你有一个最初稀疏文件的问题,现在已经过度使用你的空间,那么你需要解决这个问题。最好的办法可能是删除临时表空间,然后检查文件系统中的可用空间量,然后根据您的情况创建一个新的临时表空间。

然后,其次,看看您是否可以在索引构建期间调整 TEMP 空间消耗,使用手动工作区大小策略并显式设置 sort_area_size/sort_area_retained_size。

希望有帮助。

于 2012-10-18T23:07:37.400 回答