0

背景

我正在尝试将一个大于 40GB 的巨大 Oracle 数据库转储导入我的 Oracle Express 环境。如您所知,Oracle Express 只允许最大为 11GB 的数据库大小。因此,我不能将此转储文件的全部内容“impdp”到我的 Oracle XE。我只需要选择性地导入一些不会超过 XE 限制的表。

准备

我创建了导入所需的表空间,这些表空间指向DIR我硬盘上的一个目录,如下所示:

目录对象 { DIR } 创建为/db/

表空间ABC/db/abc.dbf创建,分配大小为 6GB

我创建的表空间只应用了大小,没有其他附加参数。

提示*:转储文件需要表空间名称 ABC 才能导入。

我成功导入了整个数据库结构

首先,我在下面运行此命令以在我的目标 XE 环境中创建表结构,而无需复制任何数据。只是为了确保我的转储文件包含我想要的所有表:

$> impdp system/pwd directory=DIR dumpfile=FOO.dump 
   content=METADATA_ONLY schemas=FOO;

上面的命令执行正确。所有表结构都是在我的 XE 环境中创建的 schema FOO

接下来,我要开始导入表数据(但失败)

然后我从要导入的第一个表开始,比如 table abc。我运行此命令仅将数据导入到我预先创建的表中。

$> impdp FOO/pwd directory=DIR dumpfile=FOO.dump
   content=DATA_ONLY tables=abc;

您可能会注意到我从用户切换systemFOO. 我知道这一点。由于我的表是在 schema 下创建的FOO,因此我使用FOO将其导入到此 schema 下的现有表中。

然而,这失败了。我有如下所示的错误:

连接到:Oracle Database 11g Express Edition Release 11.2.0.2.0 - 64bit Production

主表 "FOO"."SYS_IMPORT_TABLE_01" 成功加载/卸载

开始 "FOO"."SYS_IMPORT_TABLE_01": FOO/******** 目录=DIR dumpfile=DUMP.dump logfile=import_table.log content=data_only tables=item_keyword_tab

处理对象类型SCHEMA_EXPORT/TABLE/TABLE_DATA

ORA-31693: 表数据对象 "FOO"."ABC" 未能加载/卸载并且由于错误而被跳过:

ORA-29913: 执行 ODCIEXTTABLEFETCH 标注时出错

ORA-01653: 无法在表空间 ABC 中将表 FOO.ABC 扩展 8

作业 "ABC"."SYS_IMPORT_TABLE_01" 在 02:03:33 完成,出现 1 个错误

错误消息似乎提到“表空间不能仅扩展 8 MB”。我可以保证我已经创建了足够大的表空间“ABC”,最大 6 GB,并且不会超过 XE 限制。

有人可以帮我解决这个问题吗?我应该怎么做?

我的假设是:

  • 架构“FOO”缺乏特权,因此在导入时无法扩展表。我浏览了文档,但“扩展表空间”不是用户的可调整权限之一。

  • 将表空间扩展 8 MB 的大小非常小。我认为这不是它失败的真正原因。可能还有其他根本原因。

4

0 回答 0