[Oracle]解析バックアップなしでundoが壊れたらどうすればいいですか?
Oracleが運行中に不幸にもundo破損に遭ったら、もちろん一番いい方法は完全回復ですが、バックアップがない場合は、通常ではない手段(Oracleの隠しパラメータを利用して)を採用してもいいです。この場合、undoが未提出の事務を含むと、少しのデータがなくなってしまいます。データが失われません。その主なステップは以下の通りです。
1.undo表の空間管理を手動に変更する;2.隠しパラメータ(_offine.ロックバックsegmentsまたは_コールポイントロックバックsegments)は影響を受けるロールバックを識別し、Oracleにその上の未提出のトランザクションを無視させる。3.手動で影響を受けたロールバックとundoテーブル空間を削除し、新しいundoテーブル空間を再構築する。4.還元undo表空間は自動的に管理されています。
実験は以下の通りです。Step 1.undoデータファイルが壊れたら、データベースはmount状態になります。openの場合、以下のエラーが発生します。ORA-01157:cannot identify/lock data file 14-see DBWR trace fileORA-01110:data file 14:''I:INTEL_DATA\O 06 DMS 0\UNDO 1.O 06 DMS 0は、このundoファイルが壊れていたり、紛失していたりしたと説明しています。このファイルをOffineしてからデータベースを開くことができます。DATA\O 06 DMS 0\UNDO 1.O 06 DMS 0'ofline drop;SQL>アルターdatabase open;データベースを開く目的は影響を受けるロールバックを見つけるためです。name,status from dbaロックバックsegs;SEGMENT_NAME STATUS----------------SYSTEM ONLINESYSSMU 10_120131463ドルです OFFLINE_SYSSMU 9_2926456744ドルです OFFLINE_SYSSMU 8_640224757ドルです OFFLINE_SYSSMU 7_3984293596ドルです OFFLINE_SYSSMU 6_3694658906ドルです OFFLINE_SYSSMU 5_3475919656ドルです OFFLINE_SYSSMU 4_16852732ドルです OFFLINE_SYSSMU 3_1987193959ドルです OFFLINE_SYSSMU 2_390826755ドルです OFFLINE_SYSSMU 1_3281912951ドルです OFFILINE
SQL>show parameter undo
NAME タイプ VALE-----------------------------------------------undo_management ストリングス AUTOundo_retension インテグ 900 undo_テーブルスペース ストリングス undo 1データベースを閉じます。SQL>shutdown immediate。
Step 2.一時的なpfileを作成する:SQL>create pfile='H:\initO 06 DMS 0.ora'from spfile;修正pfileは以下の通りです。*.undo_management='manaual' -- undo表空間管理方式を手動*.undo_に変更しました。テーブルspace='undo 2' --新しいundoテーブル空間を指定します。*.uoffine.ロックバックsegments=('uSYSSMU 10_120131463$SYSSMU 9_2926456744ドル',_SYSSMU 8_64640224757ドル','_SYSSMU 7_3984293596$SYSSMU 6_3694658906$SYSSMU 5_3475919656$SYSSMU 4_16852732ドル','_SYSSMU 3_1987193959ドル',_SYSSMU 2_390826755$SYSSMU 1_3281912951$ --すべての影響を受けるロールバックをここに並べてpfileを変えてデータベースを再起動します。SQL>startup pfile='H:\initO 06 DMS 0.ora'
Step 3.影響を受けるロールバックを手動で削除する:SQL>drop rollback segment"uSYSSMU 10_120131463$SQL>drop rollback segment'uSYSSMU 9_2926456744$SQL>drop rollback segment'uSYSSMU 8_640224757$SQL>drop rollback segment'uSYSSMU 7_3984293596$SQL>drop rollback segment'uSYSSMU 6_3694658906$SQL>drop rollback segment'uSYSSMU 5_3475919656$SQL>drop rollback segment'uSYSSMU 4_1616852732$SQL>drop rollback segment'uSYSSMU 3_1987193959$SQL>drop rollback segment'uSYSSMU 2_390826755$SQL>drop rollback segment'uSYSSMU 1_3281912951$古いundoテーブル空間を手動で削除します。SQL>dropテーブルspace undo 1 including contensts;新しいundo表空間を再構築します。SQL>create undoテーブルspace undo 2 datafile'I:\INTEL_DATA\O 06 DMS 0\UNDO 2.O 06 DMS 0'size 100 m新しいspfileを作成して、古いspfileをカバーします。SQL>create spfile from pfile='H:\initO 06 DMS 0.ora'データベースを閉じます。SQL>shutdown immediate;
Step 4.元のspfileでデータベースを起動する:SQL>startup;還元undo表空間管理は自動:SQL>alter systemセットundo_management='aut'scope=spfile;隠しパラメータの設定をキャンセルします。offine.ロックバックsegments「scope=spfile」再起動してそれを有効にします。SQL>shutdown immediate;SQL>startupSQL>show parameterund
NAME タイプ VALE-------------------------------------------------------------undo_management ストリングス AUTOundo_retension インテグ 900 undo_テーブルスペース ストリングス undo 2
最終チェック:SQL>select segment_name,status from dbaロックバックsegs;
SEGMENT_NAME STATUS----------------SYSTEM ONLINESYSSMU 40_1968985325ドルです ONLINESYSSMU 39_404040503138ドルです ONLINESYSSMU 38_4059847715ドルです ONLINESYSSMU 37_269220156$ ONLINESYSSMU 36_261742521ドルです ONLINESYSSMU 35_1133967719ドルです ONLINESYSSMU 34_1916939664ドルです ONLINESYSSMU 33_99444166ドルです ONLINESYSSMU 32_162619813ドルです ONLINESYSSMU 31_830375278ドルです ONLINE
1.undo表の空間管理を手動に変更する;2.隠しパラメータ(_offine.ロックバックsegmentsまたは_コールポイントロックバックsegments)は影響を受けるロールバックを識別し、Oracleにその上の未提出のトランザクションを無視させる。3.手動で影響を受けたロールバックとundoテーブル空間を削除し、新しいundoテーブル空間を再構築する。4.還元undo表空間は自動的に管理されています。
実験は以下の通りです。Step 1.undoデータファイルが壊れたら、データベースはmount状態になります。openの場合、以下のエラーが発生します。ORA-01157:cannot identify/lock data file 14-see DBWR trace fileORA-01110:data file 14:''I:INTEL_DATA\O 06 DMS 0\UNDO 1.O 06 DMS 0は、このundoファイルが壊れていたり、紛失していたりしたと説明しています。このファイルをOffineしてからデータベースを開くことができます。DATA\O 06 DMS 0\UNDO 1.O 06 DMS 0'ofline drop;SQL>アルターdatabase open;データベースを開く目的は影響を受けるロールバックを見つけるためです。name,status from dbaロックバックsegs;SEGMENT_NAME STATUS----------------SYSTEM ONLINESYSSMU 10_120131463ドルです OFFLINE_SYSSMU 9_2926456744ドルです OFFLINE_SYSSMU 8_640224757ドルです OFFLINE_SYSSMU 7_3984293596ドルです OFFLINE_SYSSMU 6_3694658906ドルです OFFLINE_SYSSMU 5_3475919656ドルです OFFLINE_SYSSMU 4_16852732ドルです OFFLINE_SYSSMU 3_1987193959ドルです OFFLINE_SYSSMU 2_390826755ドルです OFFLINE_SYSSMU 1_3281912951ドルです OFFILINE
SQL>show parameter undo
NAME タイプ VALE-----------------------------------------------undo_management ストリングス AUTOundo_retension インテグ 900 undo_テーブルスペース ストリングス undo 1データベースを閉じます。SQL>shutdown immediate。
Step 2.一時的なpfileを作成する:SQL>create pfile='H:\initO 06 DMS 0.ora'from spfile;修正pfileは以下の通りです。*.undo_management='manaual' -- undo表空間管理方式を手動*.undo_に変更しました。テーブルspace='undo 2' --新しいundoテーブル空間を指定します。*.uoffine.ロックバックsegments=('uSYSSMU 10_120131463$SYSSMU 9_2926456744ドル',_SYSSMU 8_64640224757ドル','_SYSSMU 7_3984293596$SYSSMU 6_3694658906$SYSSMU 5_3475919656$SYSSMU 4_16852732ドル','_SYSSMU 3_1987193959ドル',_SYSSMU 2_390826755$SYSSMU 1_3281912951$ --すべての影響を受けるロールバックをここに並べてpfileを変えてデータベースを再起動します。SQL>startup pfile='H:\initO 06 DMS 0.ora'
Step 3.影響を受けるロールバックを手動で削除する:SQL>drop rollback segment"uSYSSMU 10_120131463$SQL>drop rollback segment'uSYSSMU 9_2926456744$SQL>drop rollback segment'uSYSSMU 8_640224757$SQL>drop rollback segment'uSYSSMU 7_3984293596$SQL>drop rollback segment'uSYSSMU 6_3694658906$SQL>drop rollback segment'uSYSSMU 5_3475919656$SQL>drop rollback segment'uSYSSMU 4_1616852732$SQL>drop rollback segment'uSYSSMU 3_1987193959$SQL>drop rollback segment'uSYSSMU 2_390826755$SQL>drop rollback segment'uSYSSMU 1_3281912951$古いundoテーブル空間を手動で削除します。SQL>dropテーブルspace undo 1 including contensts;新しいundo表空間を再構築します。SQL>create undoテーブルspace undo 2 datafile'I:\INTEL_DATA\O 06 DMS 0\UNDO 2.O 06 DMS 0'size 100 m新しいspfileを作成して、古いspfileをカバーします。SQL>create spfile from pfile='H:\initO 06 DMS 0.ora'データベースを閉じます。SQL>shutdown immediate;
Step 4.元のspfileでデータベースを起動する:SQL>startup;還元undo表空間管理は自動:SQL>alter systemセットundo_management='aut'scope=spfile;隠しパラメータの設定をキャンセルします。offine.ロックバックsegments「scope=spfile」再起動してそれを有効にします。SQL>shutdown immediate;SQL>startupSQL>show parameterund
NAME タイプ VALE-------------------------------------------------------------undo_management ストリングス AUTOundo_retension インテグ 900 undo_テーブルスペース ストリングス undo 2
最終チェック:SQL>select segment_name,status from dbaロックバックsegs;
SEGMENT_NAME STATUS----------------SYSTEM ONLINESYSSMU 40_1968985325ドルです ONLINESYSSMU 39_404040503138ドルです ONLINESYSSMU 38_4059847715ドルです ONLINESYSSMU 37_269220156$ ONLINESYSSMU 36_261742521ドルです ONLINESYSSMU 35_1133967719ドルです ONLINESYSSMU 34_1916939664ドルです ONLINESYSSMU 33_99444166ドルです ONLINESYSSMU 32_162619813ドルです ONLINESYSSMU 31_830375278ドルです ONLINE