Computer >> कंप्यूटर >  >> प्रोग्रामिंग >> डेटाबेस

Oracle डेटाबेस में मरम्मत ब्लॉक भ्रष्टाचार

इस पोस्ट में चर्चा की गई है कि Oracle® डेटाबेस में सिस्टम डेटा फ़ाइलों सहित डेटा फ़ाइलों के एकाधिक या एकल ब्लॉक भ्रष्टाचार को कैसे ठीक किया जाए। ब्लॉककरप्शन डेटाबेस के बंद होने का एक सामान्य स्रोत है।

एक डेटाबेस ब्लॉक दूषित हो जाता है जब इसकी सामग्री ओरेकल डेटाबेस की अपेक्षा से भिन्न होती है। यदि ब्लॉक भ्रष्टाचार को रोका या मरम्मत नहीं किया जाता है, तो भ्रष्टाचार डेटाबेस को नीचे ला सकता है और संभवतः प्रमुख व्यावसायिक डेटा के नुकसान का कारण बन सकता है।

यह वास्तविक समय की समस्याओं में से एक है जिसका आपको उत्पादन डेटाबेस में सामना करने और ठीक करने की आवश्यकता है।

ब्लॉक भ्रष्टाचार ढूंढें और ठीक करें

निम्न छवि एक संभावित अवरोधन भ्रष्टाचार दिखाती है:

Oracle डेटाबेस में मरम्मत ब्लॉक भ्रष्टाचार

छवि स्रोत :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:~ ] $

निष्कर्ष

डेटा भ्रष्टाचार का पता लगाने और उसे रोकने के लिए, निम्नलिखित अधिकतम उपलब्धता आर्किटेक्चर (एमएए) सर्वोत्तम अभ्यास करें:

  • Oracle डेटा गार्ड का उपयोग करें।
  • Oracle डेटाबेस ब्लॉक करप्शन डिटेक्शन पैरामीटर सेट करें।
  • पुनर्प्राप्ति प्रबंधक (RMAN) के साथ बैकअप और पुनर्प्राप्ति रणनीति लागू करें।

ये उच्च उपलब्धता समाधान Oracle डेटाबेस के साथ एकीकृत हैं और अंतर्निहित डेटा संरचनाओं का लाभ उठाते हैं। इस प्रकार, उपकरण बुद्धिमान डेटा सुरक्षा और आपदा पुनर्प्राप्ति का एक नया वर्ग प्रदान करते हैं।

कोई टिप्पणी करने या प्रश्न पूछने के लिए प्रतिक्रिया टैब का उपयोग करें।

हमारी डेटाबेस सेवाओं और रैकस्पेस एप्लिकेशन सेवाओं के बारे में अधिक जानें।


  1. डेटाबेस प्रशासकों के लिए नई Oracle 19c सुविधाएँ

    Oracle® डेटाबेस संस्करण 19c ने कई नई और बेहतर सुविधाओं को पेश किया। परिचय Oracle 19c दीर्घकालिक समर्थन के साथ Oracle डेटाबेस 12c रिलीज़ 2 उत्पाद परिवार में अंतिम है। यह Linux®, Windows®, Solaris®, HP/UX®, और AIX® प्लेटफ़ॉर्म के साथ-साथ Oracle क्लाउड पर उपलब्ध है। Oracle 19c ग्राहकों को उनके सभी परि

  1. Windows अद्यतन डेटाबेस भ्रष्टाचार त्रुटि [हल]

    Windows Update Database Corruption error को ठीक करें: विंडोज 10 को अपडेट करते समय आपका अपडेट अटक सकता है या आप विंडोज अपडेट डेटाबेस करप्शन एरर के कारण अपने विंडोज को अपडेट नहीं कर पाएंगे। विंडो अपडेट ट्रबलशूटर चलाते समय आप केवल इस त्रुटि का पता लगाने में सक्षम होंगे, जबकि कुछ मामलों में समस्या निवार

  1. Windows 10 पर खराब प्रोग्राम को कैसे रिपेयर या अनइंस्टॉल करें

    विंडोज 10 का वातावरण कार्यक्रमों और अनुप्रयोगों से भरा हुआ है। विंडोज 10 पर ढेर सारे ऐप और प्रोग्राम लोड हैं जो हमारे अनुभव को आनंददायक मनोरंजक बनाते हैं। लेकिन कई बार ऐसा होता है, जब कोई ऐप अचानक क्रैश हो जाता है और हमें पता नहीं चलता कि ऐसा क्यों है। ठीक है, निश्चित रूप से जैसे ही कोई ऐप या प्रोग्