选择显示字体大小

oracle 回滚段表空间数据文件丢失或损坏处理方法(2)


  
续上文:http://www.csdn.net/develop/read_article.asp?id=20220

ii. 数据库是启动着的

如果你检测到丢失或损坏了回滚段表空间的数据文件,并且数据库是运行着的,不要把它down掉。在很多情况下,数据库是启着的比关闭着解决问题更容易些。

这种情况的两种可能的解决方法:

a)使丢失的那个数据文件offline,并从备份中恢复它,这种情况适用于数据库是处于归档方式的。

b)另一个方法是offline掉所有的那个文件所属表空间的回滚段,drop那个表空间,然后得建它们。你可能不得不杀掉那些使用着回滚段的进程,以便使它offline.

方法ii.a:从备份恢复那个数据文件

这个方法只有你的库是在归档方式下才能使用。

1、脱机(offline)那个丢失的数据文件。
  alter database datafile &#39;<full_path_file_name>&#39; offline;
 
提示:其于目前数据库的事务量,你可能需要建一个临时的回滚表空间和一些临时的回滚段以备正常业务运行。

2、从备份中恢复(restore)那个数据文件。

3、执行如下命令

   select v1.group#, member, sequence#
     from v&#36;log v1, v&#36;logfile v2
    where v1.group# = v2.group# ;
  这将列出所有的联机的重做日志和他们的序号及首次改变号(first change numbers).

4、得用联机日志及归档日志恢复那个文件
  recover datafile &#39;<full_path_file_name>&#39;
 
5、确认所有的日志都被恢复,只到你收到"media recovery complete"信息。

6、使这个数据文件online
  alter database datafile &#39;<full_path_file_name>&#39; online;
 

方法ii.b:重建回滚表空间

这种方法不必考虑数据库是否是归档模式的。

步骤如下:

1、试图脱机所有的丢失或损坏数据文件所在回滚表空间中所包含的回滚段。
  alter rollback segment <rollback_segment> offline;
  重复执行这个命令直到所包含的回滚段都脱机.
 
2、检查回滚段的状态。
  在drop掉它们之前它们必需是offline状态的。 
  select segment_name, status from dba_rollback_segs
   where tablespace_name = &#39;<tablespace_name>&#39;;

3、删除掉所有脱机的c。
   drop rollback segment <rollback_segment>;
  
4、处理那些保持online状态的回滚段
   重复执行2一下的命令,如果回滚段在执行1中命令仍保扭亏为盈"online"状态,意味着它之中有活动的事务,你可以用如下的查询来确认一下:
   select segment_name, xacts active_tx, v.status
     from v&#36;rollstat v, dba_rollback_segs
    where tablespace_name = &#39;<tablespace_name>&#39; and segment_id = usn;
   如果这个查询没有结果返回,意味着没有事务在这些回滚段中了。哪果有结果返回,那些不能offline的回滚段的状态应为"pending offline"。可以用5中的方法把这些事务杀掉。
  
5、强制使有活动事务的回滚段脱机
 执行如下查询,看这些"pending offline"的回滚段包含哪些事务。
 select s.sid, s.serial#, s.username, r.name "rollback"
   from v&#36;session s, v&#36;transaction t, v&#36;rollname r
  where r.name in (&#39;<pending_rollback_1>&#39;, ... , &#39;<pending_rollback_n>&#39;)
 and s.taddr = t.addr and t.xidusn = r.usn;         

 用alter system kill session &#39;<sid>, <serial#>&#39;;语句杀掉这些事务,重复执行上面的查询,直到没有事务存在,这时运行一下2中的查询,确认这些回滚段己经处于offline状态,并用3中的语句把它们drop掉。

6、删除这个回滚表空间。
 drop tablespace <tablespace_name> including contents;
 如果语句执行失败,请与oracle技术支持联系,否则转向7

7、重建回滚段表空间。

8、重建回滚段,并使它们联机(online)。

译者按:

  回滚段表空间的数据文件丢失或损坏在实际中是比较棘手和常见的,产生这种问题 的原回很多的,比如介质的损坏、人为的误操作、机器的突然的断电等等。

  建议没实践过这种操作的oracle的爱好者可以模拟一下这种故障,实际实测一下,注意一定要在测试库,我模拟的方法如下:

1、单独建了一个rbs表空间,并在这个表空间建了一个回滚段rbs_test。

2、指定一个transaction 用这个回滚段

  sql>set transaction use rollback segment rbs_test;

   sql>insert into test values (&#39;2&#39;);

   sql>insert into test values(&#39;3&#39;);

3、另开一个te.net窗口te.net至主机,执行如下命令:

   sqlplus /nolog

   sql>conn / as sysdba

   sql>shutdown abort

4、把新加的那个回滚段表空间的数据文件更个名。  

全文完


 


关键字 本文所属关键字

相关 与本文相关文章

分类 所有文章关键字导航

源码编程相关

Java   Asp   PHP   .Net   XML   C/C++   CGI   VB   Jsp   J2ee   J2se   J2me   EJB   Servlet   Tomcat   Resin   Struts   Weblogic   Eclipse   ANT   GUI   JMS   Web servise   IDEA   Webphere   Hibernate   Spring   Jboss   Applet   Swing   Socket   Javamail   Perl   Ajax   P2P   安全   模式   框架   测试   开源   游戏

SQL数据库相关

My-SQL   Ms-SQL   Access   DB2   Oracle   Sybase   SQLserver   索引   存储过程   加密   数据库   分页   视图  

手机无线相关

3G   Wap   CDMA   GRPS   GSM   IVR   彩信   短信   无线   增值业务

网页设计制作相关

HTML   CSS   网页配色   网页特效   Javascript   VBscript   Dreamweaver   Frontpage   JS   Web   网站设计

网站建设推广相关

建站经验   网站优化   网站排名   推广   Alexa

操作系统/服务器相关

Windows XP   Windows 2000   Windows 2003   Windows Me   Windows 9.x   Linux   UNIX   注册表   操作系统   服务器   应用服务器

图形图像多媒体相关

Photoshop   Fireworks   Flash   Coreldraw   Illustrator   Freehand   Photoimpact   多媒体   图形图像

标准 网站致力的规范

Valid CSS!

无不良内容,无不良广告,无恶意代码

Valid XHTML 1.0 Transitional

creativecommons