在线观看www成人影院-在线观看www日本免费网站-在线观看www视频-在线观看操-欧美18在线-欧美1级

0
  • 聊天消息
  • 系統消息
  • 評論與回復
登錄后你可以
  • 下載海量資料
  • 學習在線課程
  • 觀看技術視頻
  • 寫文章/發帖/加入社區
會員中心
創作中心

完善資料讓更多小伙伴認識你,還能領取20積分哦,立即完善>

3天內不再提示

如何在Oracle數據庫中找出損壞索引?

電子工程師 ? 來源:未知 ? 作者:胡薇 ? 2018-10-18 14:24 ? 次閱讀

Oracle數據庫中如何找出損壞索引呢? 下面我們人為構造一個案例,將索引塊損壞。如下案例所示:

SQL> create tablespace test_data

2 datafile '/u01/app/oracle/oradata/gsp/test_data_01.dbf'

3 size 200M autoextend off

4 logging

5 segment space management auto

6 extent management local;

Tablespace created.

SQL> create tablespace test_index

2 datafile '/u01/app/oracle/oradata/gsp/test_idx_01.dbf'

3 size 200M autoextend off

4 logging

5 segment space management auto

6 extent management local;

Tablespace created.

SQL> create user kerry

2 identified by 123456

3 default tablespace test_data;

User created.

SQL> grant connect to kerry;

SQL> grant resource to kerry;

上述腳本是創建表空間,創建用戶kerry并授權,然后使用kerry賬號登錄數據庫,構造測試數據,在TEST表上創建索引IX_TEST

SQL> show user;

USER is "KERRY"

SQL>

SQL> CREATE TABLE TEST(ID NUMBER(10), NAME VARCHAR2(64));

Table created.

SQL> DECLARE I NUMBER;

2 BEGIN

3 FOR I IN 1..1000 LOOP

4 INSERT INTO TEST VALUES(I, LPAD('T', 60));

5 END LOOP;

6 COMMIT;

7 END;

8 /

PL/SQL procedure successfully completed.

SQL> CREATE INDEX IX_TEST ON KERRY.TEST(NAME) TABLESPACE TEST_INDEX;

Index created.

然后使用下面腳本找到索引段數據庫文件ID,以及索引段的第一個塊的塊號。

SQL> show user;

USER is "SYS"

SQL> col segment_name for a32;

SQL> col header_file for 9999;

SQL> col header_block for 9999;

SQL> select segment_name

2 ,header_file

3 ,header_block

4 ,blocks

5 from dba_segments ds

6 where ds.owner='KERRY' and ds.segment_name='IX_TEST';

SEGMENT_NAME HEADER_FILE HEADER_BLOCK BLOCKS

-------------------------------- ----------- ------------ ----------

IX_TEST 8 130 16

SQL>

構造壞塊的方法有不少(例如BBED等),這里我們使用RMAN下面的命令clear,可以標記數據塊為corrupt,標記數據文件8中130號數據塊為壞塊。

[oracle@DB-Server ~]$ rman target /

Recovery Manager: Release 11.2.0.1.0 - Production on Thu Sep 13 17:41:05 2018

Copyright (c) 1982, 2009, Oracle and/or its affiliates. All rights reserved.

connected to target database: GSP (DBID=644393201)

RMAN> recover datafile 8 block 130 clear;

Starting recover at 13-SEP-18

using target database control file instead of recovery catalog

allocated channel: ORA_DISK_1

channel ORA_DISK_1: SID=12 device type=DISK

Finished recover at 13-SEP-18

RMAN>

那么我們先來看看使用那些方法驗證索引損壞了,測試驗證一下看看是否可行。

1:使用ANALYZE分析驗證索引結構

[oracle@DB-Server ~]$ sqlplus / as sysdba

SQL*Plus: Release 11.2.0.1.0 Production on Thu Sep 13 17:42:03 2018

Copyright (c) 1982, 2009, Oracle. All rights reserved.

Connected to:

Oracle Database 11g Enterprise Edition Release 11.2.0.1.0 - 64bit Production

With the Partitioning, OLAP, Data Mining and Real Application Testing options

SQL> analyze index kerry.ix_test validate structure;

analyze index kerry.ix_test validate structure

*

ERROR at line 1:

ORA-01578: ORACLE data block corrupted (file # 8, block # 130)

ORA-01110: data file 8: '/u01/app/oracle/oradata/gsp/test_idx_01.dbf'

如上截圖所示,如果索引損壞(Corrupt Index),那么使用analyze index validate structure就會報錯。要檢查整個數據庫所有的損壞索引(Corrupt Indexes)的話,就可以借助下面腳本:

spool analy_index.sql

SET PAGESIZE 50000;

SELECT

'ANALYZE INDEX ' || OWNER || '.' || INDEX_NAME|| ' VALIDATE STRUCTURE;' FROM DBA_INDEXES;

spool off;

@analy_index.sql

2:使用系統視圖v$database_block_corruption查看損壞索引

如下所示,我們使用這個腳本來查看出現壞塊的索引,發現這個腳本無法找出壞塊索引。

set pagesize 50 linesize 170

col segment_name format a30

col partition_name format a30

SELECT DISTINCT file#,

segment_name,

segment_type,

tablespace_name,

partition_name

FROM dba_extents a,

v$database_block_corruption b

WHERE a.file_id = b.file#

AND a.block_id <= b.block#?

AND a.block_id + a.blocks >= b.block#;

原因分析如下,視圖v$database_block_corruption中有壞塊記錄,但是我們將索引段的第一個塊標記為壞塊后,在dba_extents中沒有該索引段的記錄了。所以這種情況下的索引損壞,這個SQL語句根本無法找出壞塊索引。

SQL> SELECT file_id,

2 segment_name,

3 segment_type

4 FROM dba_extents

5 WHERE file_id = 8 ;

no rows selected

SQL> SELECT file_id,

2 segment_name,

3 segment_type

4 FROM dba_extents

5 WHERE owner = 'KERRY';

FILE_ID SEGMENT_NAME SEGMENT_TYPE

---------- -------------------------------- ------------------

7 TEST TABLE

7 TEST TABLE

SQL>

因為一個段的第一個區的第一個塊是FIRST LEVEL BITMAP BLOCK,第二個塊是SECOND LEVEL BITMAP BLOCK,這兩個塊是用來管理free block的,第三個塊是PAGETABLE SEGMENT HEADER,這個塊才是segment里的HEADER_BLOCK,再后面的塊就是用來記錄數據的。關于這些知識,可以參考我博客ORACLE關于段的HEADER_BLOCK的一點淺析。而我們最上面的例子,是將第一個塊構造為壞塊,所以導致上面SQL無法查出。 我們重新構造案例,如我們將索引段的數據塊構造為壞塊,例如下面,將塊號148人為構造壞塊。那么此時這個腳本就能找出壞塊索引了。所以綜上述實驗可以看出,這個腳本查找壞塊索引是有條件的,要看索引段損壞的塊是什么類型

SQL> SELECT FILE_ID,

2 BLOCK_ID,

3 BLOCKS

FROM DBA_EXTENTS

4 5 WHERE OWNER ='&OWNER'

6 AND SEGMENT_NAME = '&TABLE_NAME';

Enter value for owner: KERRY

old 5: WHERE OWNER ='&OWNER'

new 5: WHERE OWNER ='KERRY'

Enter value for table_name: IX_TEST

old 6: AND SEGMENT_NAME = '&TABLE_NAME'

new 6: AND SEGMENT_NAME = 'IX_TEST'

FILE_ID BLOCK_ID BLOCKS

---------- ---------- ----------

8 144 8

8 152 8

SQL> SELECT HEADER_FILE

2 , HEADER_BLOCK

3 , BYTES

4 , BLOCKS

5 , EXTENTS

FROM DBA_SEGMENTS

6 7 WHERE OWNER='&OWNER' AND SEGMENT_NAME='&SEGMENT_NAME';

Enter value for owner: KERRY

Enter value for segment_name: IX_TEST

old 7: WHERE OWNER='&OWNER' AND SEGMENT_NAME='&SEGMENT_NAME'

new 7: WHERE OWNER='KERRY' AND SEGMENT_NAME='IX_TEST'

HEADER_FILE HEADER_BLOCK BYTES BLOCKS EXTENTS

----------- ------------ ---------- ---------- ----------

8 146 131072 16 2

SQL>

RMAN> recover datafile 8 block 148 clear;

聲明:本文內容及配圖由入駐作者撰寫或者入駐合作網站授權轉載。文章觀點僅代表作者本人,不代表電子發燒友網立場。文章及其配圖僅供工程師學習之用,如有內容侵權或者其他違規問題,請聯系本站處理。 舉報投訴
  • Oracle
    +關注

    關注

    2

    文章

    289

    瀏覽量

    35132
  • 索引
    +關注

    關注

    0

    文章

    59

    瀏覽量

    10469

原文標題:ORACLE 如何檢查找出損壞索引

文章出處:【微信號:DBDevs,微信公眾號:數據分析與開發】歡迎添加關注!文章轉載請注明出處。

收藏 人收藏

    評論

    相關推薦

    數據庫索引技術應用

    在對數據庫索引技術進行討論和研究,論述如何準確有效的設置數據庫索引,并結合具體的實例對數據庫索引
    發表于 11-04 11:28 ?26次下載

    提高Oracle數據庫性能

    Oracle數據庫設計中長期受到設計人員重視的是如何更好更快地提高Oracle數據庫性能的問題。其中對數據庫表現有較大關聯的是兩個因素,一
    發表于 11-11 18:16 ?4次下載

    oracle數據庫應用領域

    Oracle Database,又名Oracle RDBMS,或簡稱Oracle。是甲骨文公司的一款關系數據庫管理系統。它是在數據庫領域一直
    的頭像 發表于 02-23 10:08 ?2.6w次閱讀
    <b class='flag-5'>oracle</b><b class='flag-5'>數據庫</b>應用領域

    Oracle數據庫開發和管理的工具

    的路徑。 ? 數據庫設計 ? 可視化編輯器的設計表 精心設計的表設計器,可以直觀地創建和編輯表、列、鍵、索引、關系和約束,而無需鍵入任何代碼。 在數據庫圖中繪制對象 將
    的頭像 發表于 06-19 09:54 ?666次閱讀

    數據庫數據恢復-Oracle數據庫文件出現壞塊的數據恢復案例

    ,sysaux01.dbf文件損壞數據庫無備份,不能通過備份去恢復數據庫。用戶提供了該Oracle數據庫
    的頭像 發表于 07-18 15:10 ?707次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復-<b class='flag-5'>Oracle</b><b class='flag-5'>數據庫</b>文件出現壞塊的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復-oracle數據庫常見故障及數據恢復分析

    作為存儲和處理數據的系統,oracle數據庫在使用過程不可避免會出現各種導致數據丟失和數據
    的頭像 發表于 07-27 15:01 ?659次閱讀

    數據庫數據恢復-Oracle數據庫文件塊損壞數據恢復案例

    打開Oracle數據庫時報錯,報錯信息:“system01.dbf需要更多的恢復來保持一致性,數據庫無法打開”。用戶急需恢復zxfg用戶下的數據
    的頭像 發表于 08-03 15:10 ?653次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復-<b class='flag-5'>Oracle</b><b class='flag-5'>數據庫</b>文件塊<b class='flag-5'>損壞</b>的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復-Oracle ASM故障數據恢復案例

    數據庫數據恢復環境: Oracle數據庫ASM磁盤組有4塊成員盤。 數據庫故障&分析: Ora
    的頭像 發表于 08-11 15:27 ?1316次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復-<b class='flag-5'>Oracle</b> ASM故障<b class='flag-5'>數據</b>恢復案例

    oracle數據庫如何連接

    oracle數據庫如何連接? Oracle數據庫是目前非常流行的關系型數據庫管理系統,它可以在各種平臺上運行,因此它是企業級應用程序的首選
    的頭像 發表于 08-28 17:09 ?1.1w次閱讀

    數據庫數據恢復-oracle數據庫報錯無法打開的數據恢復案例

    oracle數據庫數據恢復環境: 一臺服務器,底層由12塊硬盤組成一組磁盤陣列,上層操作系統上運行oracle數據庫
    的頭像 發表于 10-12 14:00 ?852次閱讀

    oracle數據庫的使用方法

    Oracle數據庫是一種關系型數據庫管理系統,它由Oracle公司開發和維護。它提供了安全、可靠和高性能的數據庫管理解決方案,被廣泛應用于企
    的頭像 發表于 12-06 10:10 ?1238次閱讀

    oracle數據庫的基本操作

    Oracle數據庫是一種關系數據庫管理系統(RDBMS),廣泛應用于企業級應用。它具有強大的功能和靈活的配置選項,可以滿足復雜的數據處理需
    的頭像 發表于 12-06 10:14 ?692次閱讀

    數據庫數據恢復—Oracle數據庫文件system01.dbf損壞數據恢復案例

    打開oracle數據庫報錯“system01.dbf需要更多的恢復來保持一致性,數據庫無法打開”。
    的頭像 發表于 09-21 14:25 ?355次閱讀
    <b class='flag-5'>數據庫</b><b class='flag-5'>數據</b>恢復—<b class='flag-5'>Oracle</b><b class='flag-5'>數據庫</b>文件system01.dbf<b class='flag-5'>損壞</b>的<b class='flag-5'>數據</b>恢復案例

    Oracle數據恢復—異常斷電后Oracle數據庫報錯的數據恢復案例

    Oracle數據庫故障: 機房異常斷電后,Oracle數據庫報錯:“system01.dbf需要更多的恢復來保持一致性,
    的頭像 發表于 09-30 13:31 ?305次閱讀
    <b class='flag-5'>Oracle</b><b class='flag-5'>數據</b>恢復—異常斷電后<b class='flag-5'>Oracle</b><b class='flag-5'>數據庫</b>啟<b class='flag-5'>庫</b>報錯的<b class='flag-5'>數據</b>恢復案例

    數據庫數據恢復—ORACLE常見故障的數據恢復可行性分析

    Oracle數據庫常見故障表現: 1、ORACLE數據庫無法啟動或無法正常工作。 2、ORACLE ASM存儲破壞。 3、
    的頭像 發表于 12-10 11:35 ?121次閱讀
    主站蜘蛛池模板: 午夜视| 久久久久久久成人午夜精品福利| 黄网免费| 高清视频一区二区三区| 全黄性色大片| 伊人网在线观看| 啪啪免费小视频| 特级全黄一级毛片免费| 国产普通话一二三道| 国产手机在线观看视频| 在线观看www日本免费网站| 美女 免费 视频 黄的| 手机看片自拍自拍自拍| 男女交性高清视频无遮挡| 欧美zooz人禽交免费| 青青操久久| 永久免费毛片| 国久久| 色涩在线观看| 四虎国产成人亚洲精品| 亚洲精品久久久久久久蜜桃| 欧美18在线| 全黄毛片| 久久精品国产免费看久久精品| 97人人揉人人捏人人添| 国产美女特级嫩嫩嫩bbb| 啪啪网站免费观看| 日韩h视频| 男人午夜禁片在线观看| 亚洲图色视频| 永久免费视频| 美女扒开尿口让男人30视频| 激情在线视频| 欧美精品激情| 免费一级视频在线播放| 久久草在线视频国产一| 天天摸日日| 天天干亚洲| 性欧美大胆高清视频| 亚洲午夜网| 电影天堂bt|