ORACLEによくあるエラ の解決策

ORACLEデータベース によくあるエラ の解決策

プロのOracle Databaseの復旧サービスを提供
携帯番号: +86 13764045638 メール:service@parnassusdata.com

 

準備知識

 コントロールファイルに関する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でロールバック セグメントを禁⽌止する
 
 データベースが成功に起動した、ロジックエクスポートインポート

Comment

*

沪ICP备14014813号

沪公网安备 31010802001379号