1

这个问题的简单版本是:是否可以从已达到 4GB 最大大小限制的 Oracle 10g XE 数据库中导出所有数据?

现在,背景是:我的 (Windows) Oracle 10g XE 数据库已达到其允许的最大数据库大小 4GB。我打算针对这个问题实施的解决方案是升级到最大大小限制更大的 Oracle 11g XE,无论如何更好地反映我们的生产环境。当然,在典型的 Oracle 方式中,它们没有就地升级选项(至少我无法为 XE 找到)。因此,我决定按照 Oracle 11g XE 安装指南的“在 10.2 XE 和 11.2 XE 之间导入和导出数据”部分中的说明进行操作。在与 SQLPlus 斗争了一段时间后,我最终到达了指令的第 3d 步,该指令指示用户输入以下内容(它没有指定命令行而不是 SQLPlus,但它表示命令行):

expdp system/system_password full=Y EXCLUDE=SCHEMA:\"LIKE \'APEX_%\'\",SCHEMA:\"LIKE \'FLOWS_%\'\" directory=DUMP_DIR dumpfile=DB10G.dmp logfile=expdpDB10G.log

该命令产生以下输出:

Export: Release 10.2.0.1.0 - Production on Thursday, 29 September, 2011 10:19:11


Copyright (c) 2003, 2005, Oracle.  All rights reserved.

Connected to: Oracle Database 10g Express Edition Release 10.2.0.1.0 - Production
ORA-31626: job does not exist
ORA-31633: unable to create master table "SYSTEM.SYS_EXPORT_FULL_06"
ORA-06512: at "SYS.DBMS_SYS_ERROR", line 95
ORA-06512: at "SYS.KUPV$FT", line 863
ORA-12952: The request exceeds the maximum allowed database size of 4 GB

我已经从 USERS 表空间中删除了相当多的数据,但由于数据的物理位置,我无法调整它的大小。而且无论我做什么,我总是得到相同的输出。我尝试从管理 Web 应用程序运行“紧凑型存储”,但没有任何效果。

所以我的问题是,我错过了什么吗?还是甲骨文真的那么无能,以至于如果他们的 XE 数据库填满了,就会让人们完全不走运?

4

2 回答 2

4

您可以达到需要导出数据的程度,听起来您只需要一些帮助来合并数据,这样您就可以减少 USERS 表空间大小并增加 SYSTEM 表空间大小以解决您的问题。

您提到您从 USERS 表空间中删除了数据,但无法调整大小。由于您无法将表空间大小减小到小于最高块,因此通过对每个表执行以下命令来重组表数据:

ALTER TABLE <table_name> MOVE <tablespace_name>;

表空间名称可以与表当前所在的表空间相同,它仍然会重新组织数据并合并数据。

该语句将为您提供位于 USERS 表空间中的所有表的该命令的文本:

select 'ALTER TABLE '||OWNER||'.'||TABLE_NAME||' MOVE '||TABLESPACE_NAME||';' From dba_tables where tablespace_name='USERS';

还必须重建索引 (ALTER INDEX REBUILD;),因为 MOVE 命令会使它们无效,因为它会更改表数据(块)的物理组织,而不是逐行重定位。

合并数据后,您可以调整 USERS 表空间的大小以反映数据大小。

是不是很痛?是的。Oracle 用户友好吗?他们希望你这么想,但事实并非如此,尤其是当你遇到一些奇怪的角落情况,让你无法做你想做的事情时。

于 2011-09-30T17:19:27.683 回答
0

如您所见,您需要 SYSTEM 表空间中的一些空闲空间才能导出,而 Oracle XE 拒绝分配它,因为 SYSTEM+USERS 的总和已达到 4 Gb。

我会尝试在类似架构上安装 Oracle 10gR2 标准版实例,然后关闭 Oracle XE 并复制现有的用户数据文件。在标准版上使用“ALTER TABLESPACE”命令,您应该能够将 USERS 表空间链接到您现有的数据文件,然后导出数据。

于 2011-09-30T08:27:16.417 回答