`
itspace
  • 浏览: 978636 次
  • 性别: Icon_minigender_1
  • 来自: 杭州
社区版块
存档分类
最新评论

Oracle 异常关闭undo segment header研究

阅读更多
Oracle异常关闭,再次open时,如果undo表空间出现问题,数据库往往不能正常启动,本文初步探讨关于undo的一些机制。
创建一事务,查看该事务的XID,XIDUSN,XIDSLOT,XIDSQN。

引用
SQL> insert into t select * from t;

51686 rows created.

SQL> select * from v$mystat where rownum=1;

       SID STATISTIC#      VALUE
---------- ---------- ----------
       142          0          1

SQL> select XID,XIDUSN,XIDSLOT,XIDSQN,v$transaction.STATUS
  2  from v$transaction,v$session
  3  where v$transaction.SES_ADDR=v$session.SADDR
  4  and v$session.sid=142;

XID                  XIDUSN    XIDSLOT     XIDSQN STATUS
---------------- ---------- ---------- ---------- ----------------
03001B0079A60000          3         27      42617 ACTIVE



SQL> select name from v$rollname where usn=3;

NAME
------------------------------
_SYSSMU3$


dump该回滚段
引用
SQL> ALTER SYSTEM DUMP UNDO HEADER "_SYSSMU3$";

System altered.

查看跟踪文件,可以看到一事务,没有提交,注意其flag标记,进一步可以看到XIDUSN,XIDSLOT,XIDSQN在跟踪文件中均有标记。

引用
  0x11    9    0x00  0xa67a  0x0026  0x08dd.03b78ea1  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x12    9    0x00  0xa679  0x001f  0x08dd.03b78ebe  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x13    9    0x00  0xa67b  0xffff  0x08dd.03b93ee2  0x0080028d  0x0000.000.00000000  0x00000001   0x00000000  1263426136
   0x14    9    0x00  0xa679  0x0022  0x08dd.03b78f02  0x0080028b  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x15    9    0x00  0xa679  0x0027  0x08dd.03b78ea9  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x16    9    0x00  0xa679  0x002b  0x08dd.03b78eb7  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x17    9    0x00  0xa679  0x002d  0x08dd.03b78ef3  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x18    9    0x00  0xa678  0x0017  0x08dd.03b78eeb  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x19    9    0x00  0xa679  0x002a  0x08dd.03b7906a  0x0080028b  0x0000.000.00000000  0x00000001   0x00000000  1263367605
   0x1a    9    0x00  0xa676  0x0003  0x08dd.03b78eb3  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x1b   10    0x80  0xa679  0x0010  0x08dd.03b93e94  0x008002a6  0x0000.000.00000000  0x0000001a   0x00000000  0
   0x1c    9    0x00  0xa678  0x002c  0x08dd.03b78e99  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x1d    9    0x00  0xa677  0x0013  0x08dd.03b93ed0  0x0080028d  0x0000.000.00000000  0x00000001   0x00000000  1263426136
   0x1e    9    0x00  0xa678  0x0007  0x08dd.03b78eaf  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x1f    9    0x00  0xa676  0x0025  0x08dd.03b78ec5  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005


进一步可以研究该事务的相关信息,其跟踪文件,本文不再涉及
引用
SQL> ALTER SYSTEM DUMP UNDO BLOCK "_SYSSMU3$" XID 3 27 42617;

System altered.


假如现在数据库异常关机之后,导致回滚段_SYSSMU3$出现问题,我们可以告知Oracle,下次启动启动时无须将该回滚段online,当然与该回滚段涉及的事务也将不处理,显示此设置会带来数据库一致性问题,需要谨慎。
引用
SQL> alter system set "_corrupted_rollback_segments"="_SYSSMU3$" scope=spfile;

System altered.

SQL> startup force;
ORACLE instance started.

Total System Global Area 1577058304 bytes
Fixed Size                  1262020 bytes
Variable Size             973082172 bytes
Database Buffers          587202560 bytes
Redo Buffers               15511552 bytes
Database mounted.
Database opened.


可以看到_SYSSMU$3没有出现在数据字典中

引用
SQL> select usn,name from v$rollname;

       USN NAME
---------- ------------------------------
         0 SYSTEM
         1 _SYSSMU1$
         2 _SYSSMU2$
         4 _SYSSMU4$
         5 _SYSSMU5$
         6 _SYSSMU6$
         7 _SYSSMU7$
         8 _SYSSMU8$
         9 _SYSSMU9$
        10 _SYSSMU10$
        11 _SYSSMU11$

11 rows selected.


假如dump _SYSSMU$3,alert日志显示如下错误
引用
SQL> ALTER SYSTEM DUMP UNDO HEADER "_SYSSMU3$";
ALTER SYSTEM DUMP UNDO HEADER "_SYSSMU3$"
*
ERROR at line 1:
ORA-03113: end-of-file on communication channel


Thu Jan 14 08:16:51 2010
Errors in file /ora10g/app/admin/super/udump/super_ora_32719.trc:
ORA-07445: exception encountered: core dump [ktefdsh()+18] [SIGSEGV] [Address not mapped to object] [0xFFFFFFEC] [] []


除了以上方法,屏蔽smon进程恢复事务外,Oracle还提供一event参数,使得Oracle启动时不进行事务恢复。

重置_corrupted_rollback_segments参数,重启数据库

引用
SQL> alter system set event="10513 trace name context forever, level 2" scope=spfile;

System altered.

SQL> select usn,name from v$rollname;

       USN NAME
---------- ------------------------------
         0 SYSTEM
         1 _SYSSMU1$
         2 _SYSSMU2$
         3 _SYSSMU3$
         4 _SYSSMU4$
         5 _SYSSMU5$
         6 _SYSSMU6$
         7 _SYSSMU7$
         8 _SYSSMU8$
         9 _SYSSMU9$
        10 _SYSSMU10$

11 rows selected.


再次dump undo segment header,查看事务有无恢复

引用
SQL>  ALTER SYSTEM DUMP UNDO HEADER "_SYSSMU3$";

System altered.


查看跟踪文件,该事务没有恢复,注意其flag标记的变化
引用

   0x17    9    0x00  0xa679  0x002d  0x08dd.03b78ef3  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x18    9    0x00  0xa678  0x0017  0x08dd.03b78eeb  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x19    9    0x00  0xa679  0x002a  0x08dd.03b7906a  0x0080028b  0x0000.000.00000000  0x00000001   0x00000000  1263367605
   0x1a    9    0x00  0xa676  0x0003  0x08dd.03b78eb3  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x1b   10    0x90  0xa679  0x0010  0x08dd.03b93e94  0x008002a6  0x0000.000.00000000  0x0000001a   0x00000000  0
   0x1c    9    0x00  0xa679  0xffff  0x08dd.03b9e33d  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  1263428662
   0x1d    9    0x00  0xa677  0x0013  0x08dd.03b93ed0  0x0080028d  0x0000.000.00000000  0x00000001   0x00000000  1263426136
   0x1e    9    0x00  0xa678  0x0007  0x08dd.03b78eaf  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x1f    9    0x00  0xa676  0x0025  0x08dd.03b78ec5  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x20    9    0x00  0xa678  0x001d  0x08dd.03b93ebe  0x0080028d  0x0000.000.00000000  0x00000001   0x00000000  1263426136


最后将event  参数重置,恢复初始值,重启数据库
引用

SQL> alter system reset event  scope=spfile sid='*';

System altered.

SQL> startup force;
ORACLE instance started.

Total System Global Area 1577058304 bytes
Fixed Size                  1262020 bytes
Variable Size             973082172 bytes
Database Buffers          587202560 bytes
Redo Buffers               15511552 bytes
Database mounted.
Database opened.

SQL> ALTER SYSTEM DUMP UNDO HEADER "_SYSSMU3$";

System altered.


可以看到事务已经恢复,但flag标记不同
引用

   0x15    9    0x00  0xa679  0x0027  0x08dd.03b78ea9  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x16    9    0x00  0xa679  0x002b  0x08dd.03b78eb7  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x17    9    0x00  0xa679  0x002d  0x08dd.03b78ef3  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x18    9    0x00  0xa678  0x0017  0x08dd.03b78eeb  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x19    9    0x00  0xa679  0x002a  0x08dd.03b7906a  0x0080028b  0x0000.000.00000000  0x00000001   0x00000000  1263367605
   0x1a    9    0x00  0xa676  0x0003  0x08dd.03b78eb3  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x1b    9    0x10  0xa679  0x002c  0x08dd.03ba325b  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  1263428922
   0x1c    9    0x00  0xa679  0x001b  0x08dd.03b9e33d  0x00000000  0x0000.000.00000000  0x00000000   0x00000000  1263428662
   0x1d    9    0x00  0xa677  0x0013  0x08dd.03b93ed0  0x0080028d  0x0000.000.00000000  0x00000001   0x00000000  1263426136
   0x1e    9    0x00  0xa678  0x0007  0x08dd.03b78eaf  0x00800289  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x1f    9    0x00  0xa676  0x0025  0x08dd.03b78ec5  0x0080028a  0x0000.000.00000000  0x00000001   0x00000000  1263367005
   0x20    9    0x00  0xa678  0x001d  0x08dd.03b93ebe  0x0080028d  0x0000.000.00000000  0x00000001   0x00000000  1263426136

以上记录,仅供测试。
















0
0
分享到:
评论

相关推荐

    Oracle 10g撤销段研究.pdf

    Oracle 10g撤销段(Undo Segment)是Oracle数据库管理回滚数据的一种新机制,它的引入标志着Oracle在数据库管理系统(DBMS)层面管理事务回滚的方式发生了变革。这一变化对于Oracle 10g的用户来说,意味着更加高效和...

    oracle核心技术路易斯

    - **撤销数据的存储**:撤销数据通常存储在撤销段(Undo Segment)中,撤销段是专门用于存储撤销数据的区域。 - **撤销数据的作用**: - 支持事务回滚:当事务需要回滚时,可以通过撤销数据恢复到更改前的状态。 - ...

    oracle ebs 打开成本期间

    脚本“Undo/ResetOPMCostedFlags”是用于重置Oracle EBS中成本交易标志的专用工具。该脚本由Oracle官方提供,仅供授权人员使用,并且在运行前需要获得多个级别的审批。脚本的核心目的是重置那些已经标记为“已计算...

    oracle学习笔记

    - **Undo Segment**:用于存储回滚数据,支持事务的回滚功能。 **空间管理方式:** - **Automatic**:自动管理,Oracle根据需要动态调整。 - **Uniform**:统一管理,所有Extent具有相同的大小。 **创建与存储特性...

    oracle常见错误精集

    SELECT class, COUNT(*) FROM V$waitstat WHERE class IN ('system undo header', 'system undo block', 'undo header', 'undo block'); SELECT SUM(value) FROM V$sysstat WHERE name IN ('db block gets', '...

    《Oracle RAC最佳实践》精华总结

    需要注意的是,它不包含关于undoblock和undo header transfers的信息。 2. **`V$INSTANCE_CACHE_TRANSFER`**: 这个视图可以帮助我们识别哪些实例在全局缓存中有最多的块级活动。 **示例查询**: ```sql SELECT * ...

    Oracle常见错误代码的分析与解决

    4. 检查回滚段的竞争状况,使用:`Select class,count from V$waitstat where calss in('system undo header','system undoblock','undo header','undo block')`和`Select sum(value) from V$sysstat where name in ...

    oracle常用命令

    DATAFILE '/opt/oracle/oradata/jinlian_undo.dbf' SIZE 20M; ``` #### 删除表空间 **命令示例:** ```sql DROP TABLESPACE AA INCLUDING CONTENTS AND DATAFILES; ``` #### 扩展数据文件 当现有表空间的数据...

    存储结构与关联

    6. **Undo Segment**:用于存储事务处理过程中产生的undo数据。 7. **Temporary Segment**:临时段,在执行排序或聚合等操作时使用。 8. **LOB (Large Object) Segment**:用于存储大对象类型数据,如文本、图像等。...

    ORACLE常见错误代码的分析与解决(一)

    SELECT class, count FROM V$waitstat WHERE calss IN ('system undo header', 'system undo block', 'undo header', 'undo block'); ``` 如果竞争率高,应考虑增加回滚段。 **ORA-01652: unable to extend temp...

    Oracle数据库管理员经常使用的表和视图

    ### Oracle数据库管理员经常使用的表和视图 在Oracle数据库中,表和视图是数据库管理员进行日常维护和监控的重要工具。这些系统表和视图包含了关于数据库实例、表空间、对象以及性能等丰富的信息,可以帮助DBA更好...

Global site tag (gtag.js) - Google Analytics