无法导出完整的Oracle 10g XE数据库?

时间:2011-09-29 17:02:59

标签: oracle oracle10g oracle-xe

这个问题的简单版本是:是否可以从已达到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应用程序运行“Compact Storage”,但没有效果。

所以我的问题是,我错过了什么吗?或者甲骨文是否真的如此无能,以至于如果他们的XE数据库填满了让人们完全失去运气?

2 个答案:

答案 0 :(得分: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用户友好吗?他们会喜欢你这么认为,但实际上并非如此,特别是当你遇到一些奇怪的角落案例时,你无法做你想做的事情。

答案 1 :(得分:1)

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

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