背景
我正在尝试将一个大于 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;
您可能会注意到我从用户切换system
到FOO
. 我知道这一点。由于我的表是在 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 的大小非常小。我认为这不是它失败的真正原因。可能还有其他根本原因。