本文共 1855 字,大约阅读时间需要 6 分钟。
Oracle的ROWID包含了数据对象号、数据文件号、数据文件中的块号以及块中的行号等信息。这些信息可以通过DBMS_ROWID包转换为具体的数字。
SQL> select dbms_rowid.ROWID_RELATIVE_FNO(rowid) as file#, dbms_rowid.ROWID_BLOCK_NUMBER(rowid) as block#, dbms_rowid.ROWID_ROW_NUMBER(rowid) as row#, a.* from paololiu.test1 a;
运行上述SQL语句后,会发现所有记录都位于第6号文件的131号块,分别占用了块内的第0、1、2行。
SQL> desc test1;Name Null? Type----------- ----- ----------------------------AAA NULL CHAR(5)BBB NULL VARCHAR2(50)
typ=96
表示字符类型(CHAR)typ=1
表示可变长字符串类型(VARCHAR2)32
,字符串长度补充为32
SQL> select dump(123456) as dump1 from dual;
输出结果:
SQL> select dump(123456.789) as dump1 from dual;
输出结果:
SQL> select dump(-98765.4321) as dump1 from dual;
输出结果:
某日数据库运行异常,通过SQL*Plus无法正常连接。查看alert.log发现多次时间漂移警告(VKTM detected a time drift
),表明数据库可能存在时钟驱动问题。
SQL> sqlplus -prelim / as sysdba;SQL> oradebug setmypid;SQL> oradebug dump systemdump 266;
等待90秒后,通过awk脚本分析dump文件,发现主要原因是ASH(Active Session History)缓存不足,导致 emergency flush频繁发生。可以通过增加ASH大小或优化相关查询来解决问题。
最终,建议执行以下步骤:
通过上述方法,可以有效解决数据库hang问题,确保系统稳定运行。
转载地址:http://gkfy.baihongyu.com/