
適切なムードを与える画像良い一日!
インターネット全般、特にHabréには、破損したブロックの修復に関する多くの出版物があります。 たとえば、これは
無傷のデータを引き出すこと
に関するものであり、壊れた
LOBセグメントに対する勝利の物語です。
このような記事でインターネットへの多数のリンクを提供することはありません。 しかし、これらの記事のほとんどには共通の機能があります。 データが保存された(または判明したために破棄された)場合、表領域内のすべての空き領域をキャプチャして、破損した空きブロックを無効にすることをお勧めします。 そして、何らかの理由でこの提案は説明的です。
仕様を追加してください!
食べる(ほぼ写真の魚のような)スクリプトを作成し、Oracle DBのすべての空き領域を解放します。
準備部。
壊れたブロックを見ました:
select * from v$database_block_corruption;
彼らがいることを確認してください。
すべての「空き」ブロックは正確に見えましたか(突然別の壊れたセグメントが失われましたか?):
SELECT e.owner, e.segment_type, e.segment_name, e.partition_name, c.file
壊れた空きブロックがあるTSのすべてのファイルの自動拡張を無効にすることを忘れないでください。 物忘れの結果はあまり快適ではないかもしれません。
はい、ファイルを「圧縮」する時間があります。 しかし、なぜ追加の問題が必要なのでしょうか?
select 'alter database datafile '|| file_name|| ' '|| ' autoextend off;' from dba_data_files where TABLESPACE_NAME='PSAPSR3';
チームのリストを取得しました。 それらを起動しました。 次に、同じ方法で、autoextendを返すコマンドのリストを作成します。
しかし、ここでは注意する必要があります。 データファイルが別のディスクにあるのでしょうか? そして、彼らは異なる拡張設定を持っていますか? ここで注意する価値があります。
(はい、私の専門は「SAP BASISスペシャリスト」です。これは、テーブルスペースの名前の選択について説明しています。結局、そこでエラーを修正する必要があります。)
そして今だけ、準備手順が完了します。
本体
Oracle sqlを使用するには、
SQL Developerを使用し
ます 。 必要なものはすべて揃っていますが、不要なものは観察されません。
何が欲しい?
すべての空きテーブルスペースブロックを再フォーマットします。 これを行うには、テーブルを作成し、場所がなくなるまでエクステントを追加します。
通常、必要なことを行うPL \ SQLスクリプトを次に示します。
SET SERVEROUTPUT ON DECLARE type ARR_TABLE is table of varchar2(13); TBLS ARR_TABLE:=ARR_TABLE(); I number; SPACE_AVAILABLE float;
(2つの余分なスラッシュ「\」に注意してください。「テーブルの作成」と「テーブルの削除」の行では、ハイライトが表示されないようにします。戦闘使用前に取り壊す必要があります。非常に迷惑なのは、その後の「インフィデル」の検索です。)
繰り返しますが、与えられた定数TABLESPACE_FOR_FULLとUSER_SCHEMAは、データベースの詳細を暗示しているようです。
操作アルゴリズムについてコメントする必要はないようです。
そのような方法の速度は私に合っています。
anonymous block completed Time start: 22-10-2013 13:10:10 Space available=827,88 Time end: 22-10-2013 13:10:11 anonymous block completed Time start: 22-10-2013 13:10:27 Space available=10668,75 Time end: 22-10-2013 13:10:46 anonymous block completed Time start: 22-10-2013 13:11:26 Space available=99266,81 Time end: 22-10-2013 13:14:37
3分で100Gb未満。 機器が非常に大きな役割を果たしていることは明らかですが、機器が弱く、特別なサイズがない場合です。 さらに、Tbの空き領域はかなり奇妙な状況です。
最終ステップ
自動拡張を返すようになったので、データベースチェックを行うことができます。
rman target /
そして
BACKUP VALIDATE database;
そうすると、v $ database_block_corruptionビューがきれいになります...よくわかります。
エピローグ
短くて速い方法はありますか? そうでなければなりません。 必須です。 私は3週間前にPL \ SQLで書き始めました。 そして何よりも、私はDBAではなくSAP BASISの専門家です。
これで十分です。 しかし、プロからこの問題の解決策を見ることは興味深いでしょう。