最新国产好看的视频,伊人天堂AV在线,国产Aaaaaa视频,蜜臀视频在线观看一区,人妻av色图,密臀久久久精品影片,青青视频免费观看毛片,久草在线观看视,国产三级精品色情在线

ORA-01578、ORA-01110:數據塊被損壞,此時無法讀取文件問題修復方案

 更新時間:2024年03月22日 09:27:38   作者:zbqice007  
這篇文章主要給大家介紹了關于ORA-01578、ORA-01110:數據塊被損壞,此時無法讀取文件問題的修復方案,文中通過示例代碼介紹的非常詳細,對大家學習或者使用數據庫具有一定的參考學習價值,需要的朋友可以參考下

查看問題:

1.使用oracle用戶登錄linux服務器,并進入sql模式

# sqlplus /nolog

2.超級管理員的權限操作數據庫

# conn /as sysdba;

3.查詢不在線的數據

select name, status from v$datafile order by file#;

4.恢復數據

# recover datafile

5.再次查詢文件數據 文件為脫機狀態(tài)

# select status from v$datafile where file# = 6;

6.將文件掛上網

# alter database datafile 13 online;

7.確認文件狀態(tài)

# select name, status from v$datafile order by file#;

8.文件已經上線,可能還會出現一些問題 BLOB字段損壞導致部分表無法使用

參考了很多優(yōu)秀博主的文章 可是有些不適用,便自己整理了一下

原因分析:

1.重啟數據庫 導致oracle在操作blob字段有問題。

2.應用操作數據庫事,產生了鎖等待。

3.出現鎖等待,可以通過后臺日志查看,后臺會有對應的拋出一個ORA-00600錯誤。

4.根據 ORA-00600 錯誤跟蹤,發(fā)現是一個INSERT 語句插入導致(可能是壞塊造成),在數據庫重啟時插入數據有問題。  

5.通過select count(*) from user.table;查詢對應的表會拋出錯誤,說明此數據文件下的某個塊存在問題;

表修復方案:

方案一 可視化處理壞塊(親測有效):

操作需要用超級管理員登錄,下面用的是plsql 也可以用控制臺

1.查詢壞塊對應的分段類型、所屬、分段名稱

SELECT SEGMENT_TYPE, OWNER, SEGMENT_NAME
  FROM DBA_EXTENTS
 WHERE FILE_ID = 6
   AND 1962511 BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;
 
-- FILE_ID 文件標識  1962511 壞塊的標識 可通過報錯獲取

 2.查詢壞塊的對應表

select table_name, column_name
  from dba_lobs
 where segment_name = 'SYS_LOB0000086896C00002$$'
   and owner = 'HLT20230606';
-- segment_name 分段名稱 上一條語句中獲取  owner 所有者

3.根據表及字段查看到數據缺失有損壞,刪除損壞塊即可,置空應該也可以

select * from HLT20230606.S_BS_UIVIEWEXT;
DELETE FROM HLT20230606.S_BS_UIVIEWEXT WHERE FID = 'AnwAAACllIjajtru'

 優(yōu)勢:可視化發(fā)現錯誤并可以直接通過語句清理

 劣勢:需要sql能執(zhí)行查詢語句,否則看不到錯誤點在哪里

方案二(查詢壞塊的rowid進行處理):

1.通過表空間 object_id,file_ID,block#,row# 構造ROWID 1)通過FILE_ID,BLOCK 查詢出

segment_name:

SELECT SEGMENT_TYPE, OWNER, SEGMENT_NAME FROM DBA_EXTENTS
 WHERE FILE_ID = 6 
 AND 1962511 BETWEEN BLOCK_ID AND BLOCK_ID+BLOCKS

 2.構造壞塊的ROWID

SELECT DATA_OBJECT_ID FROM USER_OBJECTS WHERE OBJECT_NAME = 'SYS_LOB0000086896C00002$$';

不懂為啥查不出來

SELECT DBMS_ROWID.ROWID_CREATE(1, 54649, 39, 24961, 0) FROM DUAL;
-- 54649 上面查出來的

3.通過ROWID 查詢對應的列數據,并處理 

SELECT ROWID,XXX FROM TABLE_NAME

優(yōu)勢:直接定位到有問題的數據

劣勢:不懂為啥查不到數據

方案三(建立中間表處理):

1.建臨時表

create table corrupted_lob_data (corrupted_rowid rowid);

 2.設置凹入

set concat off

3.打開設置輸出服務器

set serveroutput on

 4.執(zhí)行存過

declare
  error_1555 exception;
  pragma exception_init(error_1555, -1555);
  num number;
begin
  for cursor_lob in (select rowid r, &&lob_column
                       from &table_owner. &table_with_lob) loop
    begin
      num := dbms_lob.instr(cursor_lob.FSQL, hextoraw('889911'));
    exception
      when error_1555 then
        insert into corrupted_lob_data values (cursor_lob.r);
        commit;
    end;
  end loop;
end;

 5.獲取有問題數據

select * from corrupted_lob_data;
select * from table(壞塊的表) where rowid='AAEtzZAAOAACBpiAAP' ;--(BLOB壞的字段會出現ERROR字樣)

通過上面的sql執(zhí)行獲取到具體哪些數據有問題,并對這些數據進行處理。

優(yōu)勢:循壞遍歷到各個問題數據并放入中間表,更快的定位問題數據

劣勢:執(zhí)行存過報錯的話,沒辦法解決

方案四(重新導入可用數據):

 1.10231 內部事件,設置在全表掃描時跳過損壞的數據塊.

alter system set events='10231 trace name context forever,level 10'; 

2.導出對應的表信息 

exp HLT20230606/kshdksk file=t.dmp tables=S_BS_UIVIEWEXT
-- exp 用戶名/密碼@數據庫 file=t.dmp tables=有問題的表

3.刪除表

drop table t;

4.導入備份表

imp HLT20230606/kshdksk@orcl file=t.dmp tables=S_BS_UIVIEWEXT
-- imp 用戶名/密碼@數據庫 file=t.dmp tables=有問題表

優(yōu)勢:直接整個問題表進行導入導出,對于數據量大的表,這種方式比較快

劣勢:直接跳過問題數據,無法直觀的看到有問題的數據

方案五(通過數據庫直接建備份表轉換):

 1.查詢壞塊對應的分段類型、所屬、分段名稱

SELECT SEGMENT_TYPE, OWNER, SEGMENT_NAME
  FROM DBA_EXTENTS
 WHERE FILE_ID = 6
   AND 1962511 BETWEEN BLOCK_ID AND BLOCK_ID + BLOCKS - 1;
 
-- FILE_ID 文件標識  1962511 壞塊的標識 可通過報錯獲取

 2.查詢壞塊的對應表

select table_name, column_name
  from dba_lobs
 where segment_name = 'SYS_LOB0000086896C00002$$'
   and owner = 'HLT20230606';
-- segment_name 分段名稱 上一條語句中獲取  owner 所有者

3.使用10231事件忽略壞塊

alter session SET EVENTS '10231 trace name context forever,level 10';

4.使用CTAS方式重建表

create table S_BS_UIVIEWEXT_NEW as select * from S_BS_UIVIEWEXT;

 5.重命名表rename table

rename S_BS_UIVIEWEXT to S_BS_UIVIEWEXT_BAK;
rename  S_BS_UIVIEWEXT_NEW to  S_BS_UIVIEWEXT;

6.重建索引rebuild index

alter index PK_BS_UIVIEWEXT rebuild;

7.關閉忽略壞塊

alter session SET EVENTS '10231 trace name context off';

優(yōu)勢:直接整個問題表進行重建,對于數據量大的表,這種方式比較快

劣勢:直接跳過問題數據,無法直觀的看到有問題的數據

對象方案修復:

對于對象 可以直接重建對象

alter index indexname rebuild

總結

到此這篇關于ORA-01578、ORA-01110:數據塊被損壞,此時無法讀取文件問題修復方案的文章就介紹到這了,更多相關ORA-01578 ORA-01110數據塊被損壞內容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關文章希望大家以后多多支持腳本之家!

相關文章

  • Oracle監(jiān)聽口令及監(jiān)聽器安全詳解

    Oracle監(jiān)聽口令及監(jiān)聽器安全詳解

    這篇文章主要介紹了Oracle監(jiān)聽口令及監(jiān)聽器安全的解決方法,需要的朋友可以參考下
    2014-07-07
  • ORA-01578、ORA-01110:數據塊被損壞,此時無法讀取文件問題修復方案

    ORA-01578、ORA-01110:數據塊被損壞,此時無法讀取文件問題修復方案

    這篇文章主要給大家介紹了關于ORA-01578、ORA-01110:數據塊被損壞,此時無法讀取文件問題的修復方案,文中通過示例代碼介紹的非常詳細,對大家學習或者使用數據庫具有一定的參考學習價值,需要的朋友可以參考下
    2024-03-03
  • Oracle數據庫升級或數據遷移方法研究

    Oracle數據庫升級或數據遷移方法研究

    本文詳細論述了oracle數據庫升級的升級前的準備、升級過程和升級后的測試與調整工作,并對各種升級方法在多種操作系統(tǒng)平臺上作了測試。
    2016-07-07
  • 使用Oracle的Decode函數進行多值判斷

    使用Oracle的Decode函數進行多值判斷

    decode函數比較表達式和搜索字,如果匹配,返回結果;如果不匹配,返回default值;如果未定義default值,則返回空值
    2013-05-05
  • oracle10g發(fā)送email示例

    oracle10g發(fā)送email示例

    本文介紹了通過Oracle10g發(fā)送Email的實例,該Procedure支持中文郵件、HTML代碼、多收件人。 ,需要的朋友可以參考下
    2014-01-01
  • Oracle實例啟動時報錯:ORA-32004的解決方法

    Oracle實例啟動時報錯:ORA-32004的解決方法

    最近在啟動實例時遇到了一些錯誤,通過查找的相關的資料終于解決,決定分享出來給有需要的朋友們,所以下面這篇文章主要給大家介紹了在Oracle實例啟動時報錯:ORA-32004的解決方法,需要的朋友可以參考借鑒,下面來一起看看吧。
    2017-10-10
  • Oracle判斷是否需要重建索引的詳細步驟

    Oracle判斷是否需要重建索引的詳細步驟

    Oracle數據庫中的重建索引(Rebuild Index)是一個維護操作,用于更新或完全重構已有的索引結構,當索引損壞、性能下降或者需要優(yōu)化時,可以執(zhí)行此操作,本文給大家介紹了Oracle判斷是否需要重建索引的詳細步驟,需要的朋友可以參考下
    2024-08-08
  • Oracle中的定時任務實例教程

    Oracle中的定時任務實例教程

    定時任務相信大家都不陌生,下面這篇文章主要給大家介紹了關于Oracle中定時任務的相關資料,文中通過實例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友可以參考下
    2023-04-04
  • ORACLE中鎖住/解鎖統(tǒng)計信息的操作代碼

    ORACLE中鎖住/解鎖統(tǒng)計信息的操作代碼

    從Oracle 10g 開始,Oracle提供了鎖定/解鎖表統(tǒng)計信息功能,它的目的是阻止數據庫自動收集統(tǒng)計信息,防止可能會產生/出現的糟糕的計劃,這篇文章主要介紹了ORACLE中鎖住/解鎖統(tǒng)計信息的操作代碼,需要的朋友可以參考下
    2023-09-09
  • Oracle如何批量將表中字段名全轉換為大寫(利用簡單存儲過程)

    Oracle如何批量將表中字段名全轉換為大寫(利用簡單存儲過程)

    這篇文章主要給大家介紹了關于Oracle如何批量將表中字段名全轉換為大寫的相關資料,主要利用的就是一個簡單的存儲過程,文中通過示例代碼介紹的非常詳細,對大家的學習或者工作具有一定的參考學習價值,需要的朋友們下面隨著小編來一起學習學習吧
    2020-11-11

最新評論

三都| 泽州县| 江阴市| 龙海市| 登封市| 南阳市| 余江县| 获嘉县| 广德县| 河间市| 嘉兴市| 河东区| 视频| 丽水市| 柳江县| 娄烦县| 湘潭市| 满洲里市| 柞水县| 平度市| 营山县| 神农架林区| 双峰县| 永新县| 兴安盟| 景洪市| 石台县| 武定县| 垣曲县| 麻城市| 济阳县| 红原县| 汉沽区| 呼伦贝尔市| 白沙| 峨山| 方山县| 横峰县| 荔波县| 沙田区| 襄樊市|