ORACLEデータベース によくあるエラ の解決策
プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:[email protected]
準備知識
コントロールファイルに関するscn v$database. checkpoint_change# v$datafile. checkpoint_change#
データファイルに関するscn v$datafile_header. checkpoint_change#
ファイルヘッダFUZZY化 v$datafile_header.FUZZY v$datafile.last_change#
データベースopenプロセス(10046trace)
alter session set events ‘10046 trace name context forever, level 12’;
=========================================================================
第⼀策:隠しバラメタ _allow_resetlogs_corruption
主にactive/current redo エラに対応する _offline_rollback_segments
エラundoを強制的にoffline状態と設定す る。主にロールバックセグメントがあった が、エラになった場合に対応する_corrupted_rollback_segments
ロールバックセグメントを強制的にエラを標識する。主にロールバックセグメントが
具体的なシーンと説明
_allow_resetlogs_corruption
Actvie/Current redo log ベッドブロック、IO エラ错误、喪失などredo logのエラでデータ ベース起動できなくなった
主にredoロールフォワードを禁⽌止して、デー タベースを強制的に起動する。Redo中の データがなくなるので、⼤大事に使ってくだ さい。
_offline/corrupted_rollback_segments Undoセグメントにエラになって、トランザ

具体的な例(⼀)
SQL> startup
ORACLE 例が起動した。
Total System Global Area 1581916160 bytes
Fixed Size
Variable Size
Database Buffers
Redo Buffers
データベースがロードした。
ORA-00368: redoログブロックのテストと
1336060 bytes 964693252 bytes
603979776 bytes 11907072 bytesエラ
SQL> recover database until cancel;
SQL>alter database open resetlogs
ORA-01547: アラーム: RECOVER 成功した が、 OPEN RESETLOGS には以下のよう なエラが現れる
ORA-01194: ファイル1が⼀一致性を保つため に、より多くのリカバリが 必要としてい る
ORA-01110: データファイル 1:’R:\ORADATA\HZYL\SYSTEM01.DBF‘

具体的な例(⼆)
データベース起動alertログに以下のような エラが現れた
Tue Feb 14 09:34:11 2012
Errors in file d:\oracle\product\10.2.0\admin\interlib\bdump\ interlib_smon_2784.trc:
ORA-01595: error freeing extent (2) of rollback segment (3))
ORA-00607: Internal error occurred while making a change to a data block
-00600: internal error code, argumen
undo manual管理モードを設定する undo_tablespace=SYSTEM
undo_management=MANUAL
データベースがうまく起動できていない、 まだORA-600[4193/4194]がある
_offline_rollback_segments=_SYSSMU3$
データベースを成功に起動した。新し いundoを作成して、トラブルundoを再構造
第⼆策:bbed
bbedはデータベースを起動していない場合にブロックの内容を変更する 主に以下のようなシーンに使う
1)アーカイブがない場合にデータファイル をonlineする場合に
2)システム基礎テーブルが提出されていな いから、データベースが起動できない場合
に3)⼀一部のベッドブロックをリカバリする場合に4)………………
bbedコンパイル
BBEDはOracleの内部コンパイルツール で、Oracleデータファイルブロックの内容を直に 変更できる。⼀一部の極端なリカバリシーンによ く効いている。それに使いやすい。けどOracleに ⽀支持されていないから、ディフォルトで実⾏行可 能なファイルを作成できない。使う前にコンパ イルする必要がある。oracle 9iあるいは10gでコ ンパイル⽅方法は以下の通り:


bbedをブロックを変更する実験
SQL> create table hr.b(id number,name varchar2(100)) tablespace xff;
SQL> insert into hr.b values(1,’aaa’);
SQL> Commit
SQL> select rowid,
2 dbms_rowid.rowid_relative_fno(rowid)rel_fno ,
3 dbms_rowid.rowid_block_number(rowid)blockno from hr.b ;

[oracle@localhost ~]$ bbed parfile=/tmp/parfile.cnf
Password:
BBED: Release 2.0.0.0.0 – Limited Production on Sat Aug 20 17:10:24 2011
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
************* !!! For Oracle Internal Use only !!! ***************
BBED> set dba 2,522
DBA 0x0080020a (8389130 2,522)

 BBED> find /c aaa
 BBED> modify /c bbb
Warning: contents of previous BIFILE will be
lost. Proceed? (Y/N) y
File: /opt/oracle/oradata/ORCL/xff01.dbf (2)
Block: 522 Offsets: 8185 to 8191 Dba:0x0080020a
—————————————————— ——————
62626201 067735
BBED> sum apply
Check value for File 2, Block 522:

第三策:Oracle dul
http://www.parnassusdata.com/ja/oracle-repair
Dulはデータベースが正常に起動されてい ない場合に、データファイルを直に読み 取って、データをリカバリできる
Dulは主に以下のようなシーンに使える 1)いろんな⽅方法も試したが、起動できない 2)誤削除したテーブルリカバリ
3)truncate table 削除 4)systemをなくした場合のリカバリ

Dul実験
Init.dulファイル設定
osd_big_endian_flag=false osd_dba_file_bits=10
osd_c_struct_alignment=32 osd_file_leader_size=1
osd_word_size = 32
dc_columns=2000000
dc_tables=10000
dc_objects=1000000
dc_users=400
dc_segments=100000
Buffer=10485760

control.txtファイル設定
データベースをmountに起動してselect ts#,rfile#,name from v$datafile実⾏行すること で獲得できる
[oracle@ORCL dul]$ more control.txt
1 /u01/oracle/oradata/system01.dbf
2 /u01/oracle/oradata/undotbs01.dbf
3 /u01/oracle/oradata/sysaux01.dbf
4 /u01/oracle/oradata/users01.dbf
5 /u01/oracle/oradata/datfttuser.dbf

Dulが初めて効果を果たす
[oracle@ORCL dul]$ ./dul
Data UnLoader: 10.2.0.5.13 – Internal Only – on Sun Jun 10 06:39:47 2012
with 64-bit io functions
Copyright (c) 1994 2012 Bernard van Duijnen All rights reserved.
Strictly Oracle Internal Use Only

ORA-600[kcrf_resilver_log_1]例1
Unpblished Bug 9056657: BOX REBOOT DURING UPGRADE CAUSED ORA-600 [KCRF_RESILVER_LOG_1]
There has been a lost write to the online redolog as a result of the crash.
The fix for this bug will raise a more meaning log corruption error rather than an ORa-00600
error.
Instance recovery is not possible – restore the database and do point in time recovery to the
most recent archivelog.

 Sat Mar 01 18:40:44 2014
alter database open
Beginning crash recovery of 1 threads
parallel recovery started with 3 processes
Started redo scan
Errors in file f:\app\administrator\diag\rdbms\orcl\orcl\trace\ orcl_ora_6432.trc (incident=61360):
ORA-00600: 内部エラコード、バラメタ: データベース
[kcrf_resilver_log_1], [0x7FF61C56E30], [2],
SCN
[], [], [], [], [], [], [], [], []
Incident details in: f:\app\administrator\diag\rdbms\orcl\orcl\incid
SQL> recover database using backup controlfile until cancel;
ORA-00279: 16574746 変更( 03/01/2014 13:10:11で作成する) スレッド1に対し て、必要としている
ORA-00289:アドバイス: F:\APP\ADMINISTRATOR\FLASH_RECOV ERY_AREA\ORCL\ARCHIVELOG\2014_03_01\O1_MF_1_1510_%U_.ARC
ORA-600[kcrf_resilver_log_1]例2
Tue Mar 04 09:19:22 2014
ALTER DATABASE OPEN
Beginning crash recovery of 1 threads
parallel recovery started with 32 processes
Started redo scan
Errors in file /opt/oracle/diag/rdbms/orcl/ORCL/trace/ORC L_ora_4093.trc (incident=13393):
ORA-00600: internal error code, arguments:
[kcrf_resilver_log_1], [0x7C0E59B40], [2], [],[], [], [], [], [], [], [], []
関連するSCN情報 データベースSCN
データファイルSCN
データファイルヘッダSCN

リカバリプロセス
_allow_resetlogs_corruptionバラメタを追加 する
ORA-00600: internal error code, arguments: [2662], [0], [48503075], [0], [48508238], [12583040], [], [], [], [], [], []
SCN(event,隠しバラメタ,bbed,oradebugな ど)を進める
ORA-01595: error freeing extent (3) of rollback segment (1))
ORA-00600: internal error code, arguments: [4194], [], [], [], [], [], [], [], [], [], [], []
_offline_rollback_segmentsでロールバック セグメントを禁⽌止する
データベースが成功に起動した、ロジックエクスポートインポート
Leave a Reply