【问题标题】:how to move undo datafile in running database without disturbing transactions?如何在不干扰事务的情况下在正在运行的数据库中移动撤消数据文件?
【发布时间】:2014-10-18 20:02:24
【问题描述】:

不幸的是,当我添加空间时,一个 UNDO 数据文件放错了位置。我想将该文件移动到正确的位置。由于它是生产数据库,我不想打扰正在进行的交易。我可以在移动时将那个特定的撤消数据文件脱机吗...数据库是否可以正常工作且零数据丢失?

Oracle DB 版本:11.2.0.4.0

任何人都可以建议吗?

【问题讨论】:

    标签: oracle database-administration data-files sysdba


    【解决方案1】:

    在数据库运行期间和 24/7 环境中,您应该需要使用 undo 数据文件的新位置创建新的 undo 表空间。创建这个较新的表空间后,您可以在线将旧表空间切换到较新的撤消表空间,而不会影响任何正在进行的事务。

    以下示例展示了如何实现您的目标。使用此技巧,您可以避免数据丢失。

    SQL>create undo tablespace undotbs2 datafile '/yournewlocation/undotbs02.dbf' size 1000m;
    
    Now set new undo tablespace as default undo tablespace using following command as SYSDBA in SQLPLUS
    SQL> alter system set undo_tablespace= undotbs2 ;
    
    After finishing above task you can drop old undotbs tablespace from database using following command.
    SQL> drop tablespace undotbs including contents;
    

    【讨论】:

    • 如果有人想知道,也适用于 12c
    【解决方案2】:

    我会考虑将撤消表空间创建为 BIGFILE 数据文件:

    CREATE BIGFILE UNDO TABLESPACE UNDOTBS02 
        DATAFILE '/yournewlocation/UNDOTBS02.dbf' 
        SIZE 100M AUTOEXTEND ON NEXT 100M 
        MAXSIZE 500G; --or whatever size you consider sufficient for your DB
    

    我还会在 BOTH 范围内更改系统,以确保在内存和 spfile 中都进行更改:

    ALTER SYSTEM SET UNDO_TABLESPACE=UNDOTBS02 SCOPE=BOTH;
    

    然后,如果所有活动事务和 UNDO_RETENTION 时间段(如果有)都已完成,您将能够按照 doc123 的描述删除表空间。

    【讨论】:

      猜你喜欢
      • 2010-10-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多