Oracleデータベースのブロック破損を修復する
この投稿では、Oracle®データベース内のシステムデータファイルを含むデータファイルの複数または単一ブロックの破損を修復する方法について説明します。ブロックの破損は、データベースの停止の一般的な原因です。
データベースブロックは、その内容がOracleデータベースが検出するものと異なる場合に破損します。ブロックの破損が防止または修復されない場合、破損によってデータベースがダウンし、主要なビジネスデータが失われる可能性があります。
これは、本番データベースで直面して修正する必要のあるリアルタイムの問題の1つです。
次の画像は、ブロックが破損している可能性を示しています。
画像ソース :https://blog.toadworld.com/2017/12/01/block-corruption-in-an-oracle-database
破損を見つけるには、次のコマンドを実行します。
SQL> select * from V$DATABASE_BLOCK_CORRUPTION;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTION
----- ---------- ---------- ------------------ ----------
352 173191 9 0 ALL ZERO
SQL> SELECT FILE_ID,RELATIVE_FNO,FILE_NAME,TABLESPACE_NAME FROM DBA_DATA_FILES WHERE FILE_ID=352;
FILE_ID RELATIVE_FNO FILE_NAME TABLESPACE_NAME
---------- ------------ -------------------------------------------------- ------------------
352 352 /u01/apps_st/samusxxxxxxxx_data2/system09.dbf SYSTEM
SQL> SELECT owner, segment_name, segment_type FROM dba_extents WHERE RELATIVE_FNO = 352 AND Block_id BETWEEN 173191 AND 173191 + blocks - 1;
OWNER SEGMENT_NAME SEGMENT_TYPE
-------- --------------- ------------------
SYS I_COL3 INDEX
SYS C_OBJ# CLUSTER
注 :この場合、SYSオブジェクトセグメントI_COL3のブロックが破損しています。 dbv
によって報告された破損したブロック コマンドは、dba_free_space
で無料として表示されます ビュー。
ファイル352のブロックを解放するには、次のコマンドを実行します。
SQL> select * from V$DATABASE_BLOCK_CORRUPTION;
FILE# BLOCK# BLOCKS CORRUPTION_CHANGE# CORRUPTION
----- ---------- ---------- ------------------ ----------
352 173191 9 0 ALL ZERO
SQL> Select * from dba_free_space where file_id =352 and 173191 between block_id and block_id + blocks -1;
TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
--------------- ------- -------- ----- ---------- ------------
SYSTEM 352 173191 73728 9 352
ブロックが解放されたら、次のコマンドを使用して、破損したブロックを強制的にクリアできます。これは、セグメントの一部ではない破損したブロックのフォーマットとも呼ばれます。
1。ユーザーを作成し、ユーザーにデータベースへのアクセスを許可します。
create user Scott identified by password default tablespace SYSTEM;
grant resource, connect, create table, create trigger to Scott;
2。データファイルに対して破損したブロックを特定します
[Thu Nov 17 11:59:19 orbdev@samusxxxxxxxx:~ ] $ dbv file='/mnt/apps_st/samusxxxxxxxx_data2/system09.dbf' userid=sys/xxxxx
DBVERIFY: Release 11.2.0.4.0 - Production on Thu Nov 17 11:59:21 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting: FILE = /mnt/apps_st/samusxxxxxxxx_data2/system09.dbf
Page 173191 is marked corrupt
Corrupt block relative dba: 0x5802a487 (file 352, block 173191)
Completely zero block found during dbv:
Page 173192 is marked corrupt
Corrupt block relative dba: 0x5802a488 (file 352, block 173192)
Completely zero block found during dbv:
Page 173193 is marked corrupt
Corrupt block relative dba: 0x5802a489 (file 352, block 173193)
Completely zero block found during dbv:
Page 173194 is marked corrupt
Corrupt block relative dba: 0x5802a48a (file 352, block 173194)
Completely zero block found during dbv:
Page 173195 is marked corrupt
Corrupt block relative dba: 0x5802a48b (file 352, block 173195)
Completely zero block found during dbv:
Page 173196 is marked corrupt
Corrupt block relative dba: 0x5802a48c (file 352, block 173196)
Completely zero block found during dbv:
Page 173197 is marked corrupt
Corrupt block relative dba: 0x5802a48d (file 352, block 173197)
Completely zero block found during dbv:
Page 173198 is marked corrupt
Corrupt block relative dba: 0x5802a48e (file 352, block 173198)
Completely zero block found during dbv:
Page 173199 is marked corrupt
Corrupt block relative dba: 0x5802a48f (file 352, block 173199)
Completely zero block found during dbv:
DBVERIFY - Verification complete
Total Pages Examined : 917504
Total Pages Processed (Data): 253735
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 335744
Total Pages Failing (Index): 0
Total Pages Processed (Other): 375
Total Pages Processed (Seg) : 17
Total Pages Failing (Seg) : 0
Total Pages Empty : 327624
Total Pages Marked Corrupt : 9
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 3412538527 (1421.3412538527)
[Thu Nov 17 12:00:13 orbdev@samusxxxxxxxx:~ ] $
3。空き容量を探す
Select * from dba_free_space where file_id= <Absolute file number> and <corrupted block number> between block_id and block_id + blocks -1;
SQL> Select * from dba_free_space where file_id=352 and 173191 between block_id and block_id + blocks -1;
TABLESPACE_NAME FILE_ID BLOCK_ID BYTES BLOCKS RELATIVE_FNO
--------------- ---------- ---------- ---------- --------- ------------
SYSTEM 352 173196 73728 9 352
4。最初に破損したブロックを再フォーマットします
破損したすべてのブロックが再フォーマットされるまで、手順4を繰り返します。
create table scott.s (n number,c varchar2(4000)) nologging tablespace SYSTEM;
select owner,table_name,tablespace_name from dba_tables where table_name='S';
SQL> CREATE OR REPLACE TRIGGER corrupt_trigger
AFTER INSERT ON scott.s
REFERENCING OLD AS p_old NEW AS new_p
FOR EACH ROW
DECLARE
corrupt EXCEPTION;
BEGIN
IF (dbms_rowid.rowid_block_number(:new_p.rowid)=&blocknumber)
and (dbms_rowid.rowid_relative_fno(:new_p.rowid)=&filenumber) THEN
RAISE corrupt;
END IF;
EXCEPTION
WHEN corrupt THEN
RAISE_APPLICATION_ERROR(-20000, 'Corrupt block has been formatted');
END;
/
Enter value for blocknumber: 173191
old 8: IF (dbms_rowid.rowid_block_number(:new_p.rowid)=&blocknumber)
new 8: IF (dbms_rowid.rowid_block_number(:new_p.rowid)=173191)
Enter value for filenumber: 352
old 9: and (dbms_rowid.rowid_relative_fno(:new_p.rowid)=&filenumber) THEN
new 9: and (dbms_rowid.rowid_relative_fno(:new_p.rowid)=352) THEN
Trigger created.
Select BYTES/1024/1024 from dba_free_space where file_id=352 and 173191 between block_id and block_id + blocks -1;
72K
SQL> BEGIN
FOR i IN 1..100000 LOOP
EXECUTE IMMEDIATE 'alter table scott.s allocate extent (DATAFILE '||'''/mnt/apps_st/samusxxxxxxxx_data2/system09.dbf''' ||'SIZE 72K)';
END LOOP;
END;
/
SQL> BEGIN
FOR i IN 1..1000000 LOOP
INSERT /*+ APPEND */ INTO scott.s select i, lpad('REFORMAT',3092, 'R') from dual;
commit ;
END LOOP;
END;
/
SQL> Select * from v$database_block_corruption;
no rows selected
DROP TABLE scott.s;
Alter system switch logfile;
Alter system checkpoint;
DROP trigger corrupt_trigger;
5。破損したブロックが修正されていることを確認します
SQL> select * from V$DATABASE_BLOCK_CORRUPTION;
no rows selected
[Wed Nov 16 08:12:37 orbdev@samusxxxxxx:~ ] $ dbv file='/mnt/apps_st/samusxxxxxx_data2/system09.dbf' userid=sys/****
DBVERIFY: Release 11.2.0.4.0 - Production on Wed Nov 16 08:12:41 2016
Copyright (c) 1982, 2011, Oracle and/or its affiliates. All rights reserved.
DBVERIFY - Verification starting : FILE = /mnt/apps_st/samusxxxxxx_data2/system09.dbf
DBVERIFY - Verification complete
Total Pages Examined : 655359
Total Pages Processed (Data) : 260868
Total Pages Failing (Data) : 0
Total Pages Processed (Index): 340482
Total Pages Failing (Index): 0
Total Pages Processed (Other): 278
Total Pages Processed (Seg): 15
Total Pages Failing (Seg): 0
Total Pages Empty : 53716
Total Pages Marked Corrupt : 0
Total Pages Influx : 0
Total Pages Encrypted : 0
Highest block SCN : 136830000 (1422.136830000)
[Wed Nov 16 08:14:50 orbldev2@samusxxxxxx:~ ] $
データの破損を検出して防止するには、次のMaximumAvailability Architecture(MAA)のベストプラクティスを実行します。
- OracleDataGuardを使用します。
- OracleDatabaseブロックの破損検出パラメータを設定します。
- Recovery Manager(RMAN)を使用してバックアップとリカバリの戦略を実装します。
これらの高可用性ソリューションはOracleDatabaseと統合されており、基盤となるデータ構造を利用します。したがって、これらのツールは、新しいクラスのインテリジェントなデータ保護とディザスタリカバリを提供します。
[フィードバック]タブを使用して、コメントを書き込んだり、質問したりします。
データベースサービスとRackspaceアプリケーションサービスの詳細をご覧ください。
-
Windows Update データベース破損エラー [解決済み]
Windows Update データベース破損エラーを修正: Windows 10 の更新中に、Windows Update データベース破損エラーが原因で、更新が停止するか、Windows を更新できなくなる可能性があります。 Window Update Troubleshooter を実行している場合にのみ、このエラーを見つけることができます。場合によっては、トラブルシューティング ツールで Windows Update に関連するすべての問題を修正できますが、この特定のケースでは、潜在的な Windows Update データベース エラーが検出されたとして原因が示されますが、 [修正の
-
Windows 10 で破損したプログラムを修復またはアンインストールする方法
Windows 10 の環境は、プログラムとアプリケーションでいっぱいです。 Windows 10 にはたくさんのアプリやプログラムがロードされており、私たちの体験をとても楽しいものにしています。しかし、特定のアプリが突然クラッシュし、その理由がわからない場合が数回あります。もちろん、アプリやプログラムがクラッシュしたり応答を停止したりすると、Windows は即座に修復プログラム ウィンドウを開きます。しかし、この解決策はほとんどの場合効果的ではありません。 そのため、何らかの理由で特定のアプリが Windows でクラッシュした場合は、明らかにすぐに修正する必要があります。 Wind