Oracle 对象破损时的对策:之二(破损块的修复)

如果自己搞不定可以找诗檀软件专业ORACLE数据库修复团队成员帮您恢复!

诗檀软件专业数据库修复团队

服务热线 : 13764045638    QQ号:47079569    邮箱:service@parnassusdata.com

[适用版本]
所有版本
[适用平台]
所有平台
[详细内容]

修复破损块
==================

Document 1746576.1(KROWN:135925) 块破损时的对策:其1(查看破损块)中,我们可以发现与之前查看到的 SEGMENT_TYPE 的 INDEX 与 TABLE 的处理方法不同。

1) SEGMENT_TYPE = INDEX 的情况

索引破损的案例中,可以通过drop/create重新制成索引来处理。
* rebuild 时,无法重新使用现在正在使用的块。

CREATE 语句可以通过dbms_metadata package来查看。

Document 1721853.1(KROWN:63896) dbms_metadata package的概要与使用例
2) SEGMENT_TYPE = TABLE 的情况

1. 想获得RMAN 以及用户管理的备份时请使用。
并且,通过RMAN 来获得备份时,可以以块单位来执行恢复。详细内容请查看以下 KROWN。

Document 1713078.1(KROWN:38393) RMAN 9i新功能: 块介质恢复 (BMR)

2. 理论备份时(exp/imp 以及 csv 等)需要重新制成对象,从备份中加载数据。

3. 使用DBMS_REPAIR package,读取对应块,详细内容请查看以下 KROWN。

Document 1717045.1(KROWN:48684) DBMS_REPAIRpackage的使用例

※DBMS_REPAIR package仅对标记为破损的块有效,无法对LOB段使用。
详细内容请查看 KROWN。

Document 1717169.1(KROWN:49040) 破损块对策

如果有备份的话
—————————-
如果没有备份,也无法使用DBMS_REPAIR package时,从破损对象中尽可能取出数据重新制成

查看一下内容。

1. 使用export utility的修复

查看是否可以通过export utility获得转储文件。

$ exp test/test file=test.dmp tables=test direct=y

* 11g 以后,请使用Datapump utility。

不会发生Document 1737396.1(KROWN:122837)直接输出以及 Data Pump Export ORA-1578
2. 使用CREATE TABLE AS SELECT(CTAS) 修复

a. 发生ORA-1578 时

设定event 10231,执行CTAS。

SQL> CREATE TABLE TEST_TMP AS SELECT * FROM TEST;

Document 1706324.1(KROWN:21385) ORA-1578 块破损时,获得表数据 (event 10231)
无法执行b. a.,并且发生了其他错误时

从获得的块转储中指定发生破损的转储块或者问题行,查看破损的读取对象数据的ROWID
通过DBMS_ROWID.ROWID_CREATE来查看ROWID。

SQL> CREATE TABLE TEST_TMP AS SELECT * FROM TEST WHERE ROWID != ‘AAAAACAABAAANX0AAD’;
SQL> RENAME TEST TO TEST_BAK;
SQL> RENAME TEST_TMP TO TEST;
SQL> DROP TABLE TEST_BAK;

使用Document 1731203.1(KROWN:99901) dbms_rowid package,读取破损块数据的方法(R8.0以后)
3) TEMP 表空间中的破损

在发生TEMP 表空间中发生破损的案例中,请重新制成TEMP表空间。

Document 1722564.1(KROWN:66029) 本地管理临时表空间的备份、恢复方法以及注意事项

4) 本地管理表空间额bitmap块破损时
这些破损案例中,请使用通过用户管理的备份或者RMAN获得的备份执行恢复。
无法获得理论备份时,请在删除表空间并重新制成后,执行数据加载。
没有备份时,请使用export utility取出数据,重新制成表空间。

Comment

*

沪ICP备14014813号-2

沪公网安备 31010802001379号