最近因为发现撤销表空间占用过大空间,想把这个空间删除,重新建立一个小的撤销空间,删除的时候由于一拉提示正在使用当中,没法子,直接把oracle服务器停了。删除了UNDOTBS1.DBF这数据文件,结果数据库无法登录,请问这问题能不能解决,如果能解决怎么来解决这个问题。谢谢。

解决方案 »

  1.   


    在数据库的初始化文件里是指定了UNDO 表空间的位置的。 如果删了之后,在数据库打开的时候会检测这个文件,如果没有这个文件,就会报错。 解决方法就是在创建一个表空间,和pfile 里的位置相同,就可以正常启动了。 如:
    CREATE UNDO TABLESPACE UNDOTBS01
    DATAFILE '/u01/oracle/rbdb1/UNDOTBS01.dbf' SIZE 200M REUSE
    AUTOEXTEND ON;相关位置指定到自己的实例下面。undo 切换的时候步骤:
    1. 创建新的undo 空间
    2. 修改undo 空间:Alter system set undo_tablespace=undotbs2;当切换命令完成后,所有的事务就会在新的回滚表空间内进行。Undo tablespace的相关操作1. 增加数据文件
    ALTER TABLESPACE undotbs_01
    ADD DATAFILE '/u01/oracle/rbdb1/undo0102.dbf' AUTOEXTEND ON NEXT 1M MAXSIZE UNLIMITED;2. 重命名数据文件
    ALTER TABLESPACE undotbs_01 RENAME DATAFILE '/u01/oracle/rbdb1/undo0102.dbf' TO '/u01/oracle/rbdb1/undo0101.dbf';3. 使数据文件online或者offline
    ALTER TABLESPACE undotbs_01 online|offline;4. 开始或者结束一个联机备份
    ALTER TABLESPACE undotbs_01 BEGIN|END BACKUP;5. 删除undo tablespace
    Drop tablespace undotbs_01;Drop undo表空间的时候必须是在未使用的情况下才能进行。如果undo表空间正在使用(例如事务失败,但是还没有恢复成功),那么drop表空间命令将失败。在drop表空间的时候可以使用including contents。6. 切换undo tablespace
    切换undo表空间有两种方式:
    1. 使用命令动态修改;
    2. 修改初始化参数后重新启动数据库。
    Alter system set undo_tablespace=undotbs1;
    当切换命令完成后,所有的事务就会在新的回滚表空间内进行。具体内容参考blog:Oracle undo 回滚段管理
    http://blog.csdn.net/tianlesoftware/archive/2009/11/30/4901666.aspx------------------------------------------------------------------------------ 
    Blog: http://blog.csdn.net/tianlesoftware 
    网上资源: http://tianlesoftware.download.csdn.net 
    相关视频:http://blog.csdn.net/tianlesoftware/archive/2009/11/27/4886500.aspx 
    DBA1 群:62697716(满); DBA2 群:62697977
      

  2.   

    你应该是干净的关闭了DB了。先把undo_management设置为manual后,把undo_tablespace 改为你现在的undo tablespace;启动数据库,把undotbs1 drop掉。然后shutdown