Email: [email protected] 7 x 24 online support!
ORACLEによくあるエラ の解決策
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でロールバック セグメントを禁⽌止する
		 データベースが成功に起動した、ロジックエクスポートインポート

 沪公网安备 31010802001377号
沪公网安备 31010802001377号