【问题标题】:Full Oracle 10g XE Database Can't Be Exported?无法导出完整的 Oracle 10g XE 数据库?
【发布时间】:2011-11-27 21:15:29
【问题描述】:

这个问题的简单版本是:是否可以从已达到 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 数据库填满了,就会让人们完全不走运?

【问题讨论】:

    标签: oracle oracle10g oracle-xe


    【解决方案1】:

    您可以达到需要导出数据的目的,听起来您只需要一些帮助来合并数据,这样您就可以减少 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 用户友好吗?他们希望你这么想,但事实并非如此,尤其是当你遇到一些奇怪的角落情况,让你无法做你想做的事情时。

    【讨论】:

      【解决方案2】:

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

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

      【讨论】:

      • 所以我必须安装一个全新的 Oracle 10g 标准版实例(我没有许可证),这样我才能将我的 XE 实例从 10g 升级到 11g 而不会丢失我的数据?认真的吗?
      • 很遗憾,是的,因为您的 10g XE 目前已满。也许你可以使用 11g XE 执行一些类似的操作,但我不推荐它,你应该使用相同架构的相同 Oracle 版本以避免兼容性问题。
      • 请注意,似乎 11g XE 对 SYSTEM 表空间没有限制,因此应该不会再出现此问题:“资源限制与版本 10.2 相同,只是您现在可以存储11 GB 的用户数据(不包括 Express Edition 系统数据),而 10.2 版中的数据为 4 GB。” download.oracle.com/docs/cd/E17781_01/admin.112/e18585/…
      • 哇...我认为在安装 11g 后牺牲数据并重建我能做的事情会更有效地利用我的时间。似乎每次我认为我对甲骨文的看法跌至谷底时,都会发生一些事情进一步降低它。
      • 复制数据文件? XE 不支持可传输表空间。您也许可以将数据库(数据文件+重做日志+配置文件)挂载到 10g 标准版或企业版二进制文件...这似乎是 Oracle 文档中描述的方法...download.oracle.com/docs/cd/B25329_01/doc/server.102/b32391/…...但是做一个主要版本升级(10gXE -> 11gXE)我建议先导出再导入。
      猜你喜欢
      • 2015-02-26
      • 2011-10-26
      • 2013-09-01
      • 2017-11-07
      • 1970-01-01
      • 1970-01-01
      • 2010-10-15
      • 2013-07-28
      • 1970-01-01
      相关资源
      最近更新 更多