字典表误Truncate故障成功恢复案例_Oracle数据库_黑客防线网安服务器维护基地--Powered by WWW.RONGSEN.COM.CN

字典表误Truncate故障成功恢复案例

作者:黑客防线网安Oracle维护基地 来源:黑客防线网安Oracle维护基地 浏览次数:0

黑客防线网安网讯:昨天,成功帮助客户恢复了一个故障数据库。故障的原因是技术人员将数据库中的几个数据字典表Truncate掉,这直接导致了数据库不可用。数据库环境为Oracle 9.2.0.7 RAC环境。由于数据库的事务...

昨天成功帮助客户恢复了一个故障数据库

故障的原因是技术人员将数据库中的几个数据字典表Truncate掉这直接导致了数据库不可用

数据库环境为Oracle 9.2.0.7 RAC环境。由于数据库的事务量巨大,所以数据库没有备份。

现场检查确认,主要被截断的表有这样一些:

SQL> select object_name,object_type from dba_objects where object_name like 'IDL%';
OBJECT_NAME          OBJECT_TYPE
------------------------------ ------------------
IDL_CHAR$           TABLE
IDL_SB4$           TABLE
IDL_UB1$           TABLE
IDL_UB2$           TABLE

关于IDL_UB1$表,我以前讨论过,这是非常重要的字典表,一旦出现故障,数据库会出现大量的ORA-00600错误,所有事务不能进行:

ORA-00600: internal error code, arguments: [17069], [0xC0000000DDDFA690], [], [], [], [], [], []

ORA-600 17069错误是最头疼的,客户当时数据库的一个跟踪日志已经暴涨到5G左右。

IDL系列字典表是记录数据库对象编译信息的,丢失了其中的数据,所有过程、Package等都将无法执行。

摘引一点关于这几个字典表作用的说明:

IDL_UB1$ is one of four tables that hold compiled PL/SQL code:
IDL_UB1$
IDL_CHAR$
IDL_UB2$
IDL_SB4$
"PL/SQL is based on the programming language Ada. As a result, PL/SQL uses a
variant of Descriptive Intermediate Attributed Notation for Ada (DIANA), which
is a tree-structured intermediate language. It is defined using a meta-notation
called Interface Definition Language (IDL). DIANA provides for communication
internal to compilers and other tools.
"At compile time, PL/SQL source code is translated into machine-readable
m-code.Both the DIANA and m-code for a procedure or package are stored in the
database.At run time, they are loaded into the shared (memory) pool. The DIANA is
used to compile dependent procedures; the m-code is simply executed."
These four tables hold the DIANA and the so-code m-code. I think "m-code" is
short for machine-dependent byte code but there is a sizable machine-indenpendent part as well. If you have a look at sql.bsq, you can see
that Oracle documents the "type" column of these tables as follows:
part number not null,
/* part: 0 = diana, 1 = portable pcode, 2 = machine-dependentpcode */

更严重的情况可能会导致大量系统DBMS包失效,其重新编译将更加复杂。

恢复进行了6个小时,成功帮助用户恢复了数据库,消除了所有ORA-600错误。

恢复最主要的是通过运行相关的脚本,重建和重新编译所有Procedure/Trigger/Package等对象,重新生成这些对象的DIANA和so-code m-code,这些主要的脚本包括catlog.sql,catproc.sql等。

当然最重要的是,一些ORA-00600错误需要解决,这可能会花费大量的时间。

这一案例的恢复过程并不重要,重要的是DBA应该学会永远不要让我们的数据库置于这样的危险境地。

DBA四大守则之一:备份重于一切。

DBA的基本素质之一:严谨。

-The End-

    黑客防线网安服务器维护方案本篇连接:http://www.rongsen.com.cn/show-12762-1.html
网站维护教程更新时间:2012-03-23 00:45:39  【打印此页】  【关闭
我要申请本站N点 | 黑客防线官网 |  
专业服务器维护及网站维护手工安全搭建环境,网站安全加固服务。黑客防线网安服务器维护基地招商进行中!QQ:29769479

footer  footer  footer  footer