恢复备份实例时出现ORA-01659的解决方法

日期: 2011-03-14 作者:Brian Peasland翻译:包春霞 来源:TechTarget中国 英文

问:为了开发一个灾难恢复计划,我正试图在备份服务器上恢复备份实例。当我要重新创建表的时候,一直有一个错误信息”ORA-01659: unable to allocate MINEXTENTS”,我知道这是由于”Failed to find sufficient contiguous space”.引起的。两个服务器上的表空间和数据文件大小相同。   在导入数据的时候表空间满了。

重新创建所有表的脚本运行之后提示表空间满了。我尝试“ALTER TABLESPACE xxx COALESCE;”在Oracle enterprise mana……

我们一直都在努力坚持原创.......请不要一声不吭,就悄悄拿走。

我原创,你原创,我们的内容世界才会更加精彩!

【所有原创内容版权均属TechTarget,欢迎大家转发分享。但未经授权,严禁任何媒体(平面媒体、网络媒体、自媒体等)以及微信公众号复制、转载、摘编或以其他方式进行使用。】

微信公众号

TechTarget微信公众号二维码

TechTarget

官方微博

TechTarget中国官方微博二维码

TechTarget中国

电子邮件地址不会被公开。 必填项已用*标注

敬请读者发表评论,本站保留删除与本文无关和不雅评论的权力。

问:为了开发一个灾难恢复计划,我正试图在备份服务器上恢复备份实例。当我要重新创建表的时候,一直有一个错误信息"ORA-01659: unable to allocate MINEXTENTS",我知道这是由于"Failed to find sufficient contiguous space".引起的。两个服务器上的表空间和数据文件大小相同。

  在导入数据的时候表空间满了。重新创建所有表的脚本运行之后提示表空间满了。我尝试“ALTER TABLESPACE xxx COALESCE;"在Oracle enterprise manager中列出的每个表空间明明还有自由空间。为什么满了呢?我只是删除并创建了表,那里不应该有任何数据。

  我是完全遵从DRP过程。备份实例已经在那儿了,我所做的只是删了表而已。

  1)从生产库获取当前模式的信息(前提是生产库可访问)。

  set pagesize 0
  set long 90000
  set feedback off
  set echo off
  spool d:exprebuild_outputsyspisa_schema_rebuild_matson.sql
  connect syspisa/****@MATSON;
  SELECT 'DROP TABLE '||u.table_name||' CASCADE CONSTRAINTS;'
  FROM USER_TABLES u;
  SELECT DBMS_METADATA.GET_DDL('TABLE',u.table_name) ||'; '
  FROM USER_TABLES u;
  SELECT DBMS_METADATA.GET_DDL('INDEX',u.index_name) ||'; '
  FROM USER_INDEXES u;
  spool off;

  2)从生产系统查询现有的对象信息来进一步检查(前提是生产库可访问)

  Set pages 1000
  Col object_name for a30
  spool d:exprebuild_outputbefore_exp
  Select object_name, object_type
  From user_objects
  Where object_type In ('TABLE', 'INDEX','TRIGGER')
  Union all
  Select constraint_name, constraint_type
  From user_constraints
  Where constraint_type IN ('P', 'R')
  Order by 2, 1

  3)用脚本导出(如果生产库可访问)或从备份中找到最新可用的导出文件。将导出文件传输到备份服务器。

  4)删除所有的表(检查OEM发现所有的表空间都是0%已用)。在failOver server上导入第一步得到的模式数据以重新创建表/索引。

  答:导入对象时,Oracle会首先在原来装有对象的表空间上创建表或索引。例如,如果表在源数据库的Users表空间中,且目标数据上Users表空间存在,Oracle就会在目标数据库Users表空间上创建表;如果目标数据上Users表空间不存在,Oracle就会在对象的Owner的缺省表空间上创建表和索引。似乎目标数据库上System表空间是这个用户的缺省表空间,或者还有其他用户的缺省表空间也是System,这可不是好主意。正确的做法是:或者创建表空间并起名与源数据库相同,或者在目标数据库创建其他表空间,确保表和索引的Owner的缺省表空间指向新创建的表空间。

作者

Brian Peasland
Brian Peasland

Techtarget旗下Searchoracle网站的资深专家,有16年IT行业经验、计算机科学硕士、专攻数据库方向,曾担任系统管理员等职。此外,他还获Oracle 7.3、8和8i的OCP数据库管理员证书,目前为SGT Inc.公司首席DBA。

相关推荐

  • Notre Dame对云端SQL Server性能基准的探索实践

    确立SQL Server的性能基准,对于云端迁移来说是至关重要的第一步,一位来自于University of Notre Dame 的DBA表示,他正在试图通过数据库监控软件,找出SQL server的性能基准。

  • DBA必须掌握的数据库恢复管理技术

    如果没有备份副本,数据库管理员就无法还原数据库,所以DBA在恢复之前倾向于考虑备份是合乎逻辑的。 但是,对我来说,这种逻辑一直是错误的。

  • DBA也要和领导抢饭碗?

    数据库架构师Ziaul Mannan 认为,DBA有成为高管的潜在可能,而这种潜力在过去往往被忽视,他还将证明DBA技能到领导力的转变是可行的。

  • Oracle备份和恢复简史

    这些年来,Oracle数据库备份和恢复方式已经发生了重大变化,特别是在Recovery Manager(RMAN)功能有了进一步改善之后。