数据字典(dd)一致性鉴别

dd损坏通常包括:
1. Data Dictionary Inconsistency, missing rows in tables:
          - Tab$/Ind$ with no entries in OBJ$
          - Undo$/Tab$/Ind$ with no entries in SEG$
          - Seg$ with no entries in TAB$/IND$/OBJ$
tab$和ind$的条目在OBJ$中不存在;Undo$/Tab$/Ind$的条目在SEG$中不存在;Seg$的条目在TAB$/IND$/OBJ$中不存在
2. Missing data dictionary objects
DD对象丢失
3. Corrupted data dictionary objects (table, index, or table-index inconsistency)
DD对象损坏
4. Invalid entries in data dictionary tables.
DD表中存在无效对象

1. Identifying Objects with Data Dictionary Inconsistency
 
首先需要安装hcheck包,参见Note136697.1
In order to detect data dictionary inconsistency we need to run hcheck.full procedure, see Note 136697.1.

a. Connect as SYS schema in sqlplus
      b. Create package hOut as described in Note 101468.1  先创建hOut包,该包主要用于控制hcheck系列程序的输出,见附件hout.sql
      c. Create package hcheck in SYS schema as described in Note 136697.1 attachment.
       d. set serveroutput on
      c. execute hcheck.full

The script will report various dictionary related issues that may or may not be a problem.
Any problems reported should be reviewed by an experienced support analyst as some
reported "problems" may be normal and expected.

Example of HCHECK.FULL output:

Problem: Orphaned IND$ (no SEG$) - See Note 65987.1 (Bug:624613/3655873)  
ORPHAN IND$: OBJ=200449 DOBJ=200449 TS=0 RFILE/BLOCK=0 0 BO#=200446 SegType=  
^- May be OK. Needs manual check
 ORPHAN IND$: OBJ=39442 DOBJ=39442 TS=14 RFILE/BLOCK=2 49 BO#=39438 SegType=

Problem: Orphaned TAB$ (no SEG$)  
ORPHAN TAB$: OBJ=1817074 DOBJ=0 TS=0 RFILE/BLOCK=0 0 BOBJ#= SegType=  
^- May be OK. Needs manual check
 ORPHAN TAB$: OBJ=2149126 DOBJ=2149126 TS=19 RFILE/BLOCK=31 44291 BOBJ#= SegType=
 
Problem: Orphaned SEG$ Entry  
ORPHAN SEG$: SegType=INDEX TS=20 RFILE/BLOCK=33 28435
 
 
 
Based on the hcheck.full output you will have to identify the objects that show a dd inconsistency, and verify the reported inconsistency.

Select name,type# from obj$ where obj#=<OBJ>; /* 1=INDEX, 2=TABLE, 3=CLUSTER, 21=LOB, 25=IOT
Select object_name,owner,object_type from dba_objects where object_id=<OBJ>;

Some of the problems, mainly the one marked as  'May be OK. Needs manual check ' could be a false alarm.
注意有些alarm未必是真的存在问题。
 
Check the type of the object.
 
Lob Index on temporary table or IOT do not have a segment, than the problem message is a false alarm.
例如:临时表的LOB索引或者IOT表的索引不存在段,但是hcheck会抛出一个alarm。

附:
1.hout.sql

***Checked for relevance on 27-MAR-2013***
REM ======================================================================
REM hout.sql        Version 1.1    29 Dec 2000
REM
REM Purpose:
REM    To provide an output package for the h*.sql series of scripts.
REM     All h*.sql scripts use this package to output their results
REM    This allows one package to control where output is sent
REM    to.
REM    Eg: This package can be coded to output to DBMS_OUTPUT
REM        or to use the UTL_FILE calls if required.
REM
REM    This version of the script can write to both DBMS_OUTPUT and
REM    to the users trace file.
REM
REM Usage:
REM     See Note:101466.1 for details of using this and other h* packages
REM
REM Depends on:
REM    dbms_output , dbms_system
REM
REM Notes:
REM     Must be installed in SYS schema
REM    For Oracle 7.3, 8.0, 8.1, 9.0, 9.2, 10.1, 10.2, 11.1 and 11.2
REM     server versions
REM
REM CAUTION
REM   The sample program in this article is provided for educational
REM   purposes only and is NOT supported by Oracle Support Services.  
REM   It has been tested internally, however, and works as documented.  
REM   We do not guarantee that it will work for you, so be sure to test
REM   it in your environment before relying on it.
REM
REM ======================================================================
REM
create or replace package hOut as
 --
 -- Output options - change these to default as required
 -- You can override them at run time if required.
 --
  TO_DBMS_OUTPUT boolean := TRUE;    -- Send output to DBMS_OUTPUT
  TO_USER_TRACE  boolean := TRUE;    -- Send output to user trace file
  IGNORE_ERRORS  boolean := TRUE;    -- Ignore DBMS_OUTPUT errors if
                    -- also writing to the trace file
 --
 -- Output methods
 --
  procedure put_line(txt varchar2);
  procedure put(txt varchar2);
  procedure new_line;
  procedure wrap(txt varchar2, linelen number default 78);
  procedure rule_off;
 --
end hOut;
/
show errors
create or replace package body hOut as
  -- 7.3 has problems with ksdwrt as it uses the wrong length info
  -- putting nonsense on the end of lines.
  -- As a workaround we copy the text to a TMP varchar, append a chr(0)
  -- then reset the length back so we have an hidden chr(0) at the end
  -- of the string.
  tmp varchar2(2001);
  --
  APP_EXCEPTION EXCEPTION;
  pragma exception_init(APP_EXCEPTION, -20000);
  --
  procedure put_line(txt varchar2) is
  begin
    tmp:=txt||chr(0);
    tmp:=txt;
    if TO_DBMS_OUTPUT then
      begin
    dbms_output.put_line(txt);
      exception
    when APP_EXCEPTION then
      -- If DBMS_OUTPUT is full then carry on if we are writing to
      -- the trace file and ignoring errors, otherwise error now
      if TO_USER_TRACE and IGNORE_ERRORS then
        begin
          dbms_output.put_line('[TRUNCATED]');
            exception
          when APP_EXCEPTION then
          null;
        end;
      else
        raise;
      end if;
      end;
    end if;
    if TO_USER_TRACE then
    dbms_system.ksdwrt(1,tmp);
    end if;
  end;
 --
  procedure put(txt varchar2) is
  begin
    tmp:=txt||chr(0);
    tmp:=txt;
    if TO_DBMS_OUTPUT then
      begin
    dbms_output.put(txt);
      exception
    when APP_EXCEPTION then
      -- If DBMS_OUTPUT is full then carry on if we are writing to
      -- the trace file and ignoring errors, otherwise error now
      if TO_USER_TRACE and IGNORE_ERRORS then
        begin
          dbms_output.put('[TRUNCATED]');
            exception
          when APP_EXCEPTION then
          null;
        end;
      else
        raise;
      end if;
      end;
    end if;
    if TO_USER_TRACE then
    dbms_system.ksdwrt(1,tmp);
    end if;
  end;
 --
  procedure new_line is
  begin
    if TO_DBMS_OUTPUT then
      begin
    dbms_output.new_line;
      exception
    when APP_EXCEPTION then
      if TO_USER_TRACE and IGNORE_ERRORS then
        null;
      else
        raise;
      end if;
      end;
    end if;
    if TO_USER_TRACE then
    dbms_system.ksdwrt(1,' ');
    end if;
  end;
 --
  procedure wrap(txt varchar2, linelen number default 78) is
    p   integer:=1;
    len integer;
    pos integer;
    chunk varchar2(2000);
    xchunk varchar2(2000);
    llen number:=linelen;
  BEGIN
    if (llen>2000) then
    llen:=2000;
    end if;
    if (llen<=1) then
    llen:=78;
    end if;
    len:=length(txt);
    while (p<=len) loop
      chunk:=substr(txt,p,llen);
      pos:=instr(chunk,chr(10),-1);
      if pos>0 then
       -- We have a CR in the text - use it
       put_line(substr(chunk,1,pos-1));
       p:=p+pos;
      else
       -- No CR in the text so we will look for a split character
       xchunk:=translate(chunk,' ,()=',',,,,,');
       pos:=instr(xchunk,',',-1);
       if pos>0 and len>llen then
        put_line(substr(chunk,1,pos));
    p:=p+pos;
       else
        put(chunk);
    p:=p+llen;
       end if;
      end if;
    end loop;
    new_line;
  END;
 --
  procedure rule_off is
  begin
    put_line('=========================================================');
  end;
 --
begin
  dbms_output.enable(100000);
end hout;
/
REM ====================

2.hcheck使用方法
SQL> set serveroutput on size unlimited
SQL> spool outputfile
SQL> execute hcheck.full  
SQL> spool off

3.安装hcheck
先安装hOut,再安装hcheck2.sql(for 8i,不能运行于9I数据库)或hcheck3.sql(for 9i+)
4.hcheck3.sql
--
--------------------------------------------------------------------------
-- hcheck.sql          Version 3.50          Tue Mar 26 14:20:38 CEST 2013
--
-- Purpose:
--   To provide a single package which looks for common data dictionary
--   problems.
--     Note that this version has not been checked with locally managed
--     tablespaces and may give spurious output if these are in use.
--     This script is for use mainly under the guidance of Oracle Support.
--
-- Usage:
--   SQL> set serverout on size unlimited
--   SQL> exec hcheck.full [(parameters)]
--
--   Where parameters are
--        Verbose In Boolean - Verbose Output
--        RunAll  In Boolean - Run All procedures despite of Release
--        VerChk  In Number  - Check against 1st 'VerChk' release numbers
--
--   Output is to the hOut package to allow output to be redirected
--   as required
--
-- Depends on:
--   hOut
--
-- Notes:
--   Must be installed in SYS schema
--   This package is intended for use in Oracle releases 9i onwards
--   This package will NOT work in 8i or earlier.
--   In all cases any output reporting "problems" should be
--   parsed by an experienced Oracle Support analyst to confirm
--   if any action is required.
--
-- CAUTION
--   The sample program in this article is provided for educational
--   purposes only and is NOT supported by Oracle Support Services.
--   It has been tested internally, however, and works as documented.
--   We do not guarantee that it will work for you, so be sure to test
--   it in your environment before relying on it.
--
--------------------------------------------------------------------------
--

Create Or Replace Package hcheck Is
  Type sFuncNam Is Table Of Varchar2(32) Index By Binary_integer ;
  Type sFuncRel Is Table Of Varchar2(32) Index By Binary_integer ;
--
  sFn sFuncNam ;       /* Function Names                              */
  sFr sFuncRel ;       /* Version Control: Fixed Release per function */
--
-- Procedure Definitions
--
  Procedure SynLastDDLTim        
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  1 */
  Procedure LobNotInObj          
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  2 */
  Procedure MissingOIDOnObjCol   
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  3 */
  Procedure SourceNotInObj       
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  4 */
  Procedure IndIndparMismatch    
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  5 */
  Procedure InvCorrAudit         
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  6 */
  Procedure OversizedFiles       
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  7 */
  Procedure TinyFiles            
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  8 */
  Procedure PoorDefaultStorage   
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /*  9 */
  Procedure PoorStorage          
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 10 */
  Procedure MissTabSubPart       
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 11 */
  Procedure PartSubPartMismatch  
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 12 */
  Procedure TabPartCountMismatch
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 13 */
  Procedure OrphanedTabComPart
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 14 */
  Procedure ZeroTabSubPart
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 15 */
  Procedure MissingSum$
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 16 */
  Procedure MissingDir$
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 17 */
  Procedure DuplicateDataobj
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 18 */
  Procedure ObjSynMissing
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 19 */
  Procedure ObjSeqMissing
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 20 */
  Procedure OrphanedUndo
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 22 */
  Procedure OrphanedIndex
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 21 */
  Procedure OrphanedIndexPartition
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 23 */
  Procedure OrphanedIndexSubPartition
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 24 */
  Procedure OrphanedTable
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 25 */
  Procedure OrphanedTablePartition
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 26 */
  Procedure OrphanedTableSubPartition
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 27 */
  Procedure MissingPartCol
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 28 */
  Procedure OrphanedSeg$
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 29 */
  Procedure OrphanedIndPartObj#
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 30 */
  Procedure DuplicateBlockUse
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 31 */
  Procedure HighObjectIds
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 32 */
  Procedure PQsequence
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 33 */
  Procedure TruncatedCluster
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 34 */
  Procedure FetUet
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 35 */
  Procedure Uet0Check
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 36 */
  Procedure ExtentlessSeg
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 37 */
  Procedure SeglessUET
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 38 */
  Procedure BadInd$
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 39 */
  Procedure BadTab$
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 40 */
  Procedure BadIcolDepCnt
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 41 */
  Procedure WarnIcolDep
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 42 */
  Procedure OnlineRebuild$
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 43 */
  Procedure DropForceType
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 44 */
  Procedure TrgAfterUpgrade
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 45 */
  Procedure FailedInitJVMRun
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 46 */
  Procedure TypeReusedAfterDrop
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 47 */
  Procedure Idgen1$TTS
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 48 */
  Procedure DroppedFuncIdx
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 49 */
  Procedure BadOwner
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 50 */
  Procedure UpgCheckc0801070
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 51 */
  Procedure BadPublicObjects
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 52 */
  Procedure BadSegFreelist
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 53 */
  Procedure BadCol#
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 54 */
  Procedure BadDepends
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 55 */
  Procedure CheckDual
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 56 */
  Procedure ObjectNames
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 57 */
  Procedure BadCboHiLo
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 58 */
  Procedure ChkIotTs
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 59 */
  Procedure NoSegmentIndex
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 60 */
  Procedure BadNextObject
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 61 */
  Procedure OrphanIndopt
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 62 */
  Procedure UpgFlgBitTmp
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 63 */
  Procedure RenCharView
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 64 */
  Procedure Upg9iTab$
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 65 */
  Procedure Upg9iTsInd
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 66 */
  Procedure Upg10gInd$
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 67 */
  Procedure DroppedROTS
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 68 */
  Procedure ChrLenSmtcs
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 69 */
  Procedure FilBlkZero
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 70 */
  Procedure DbmsSchemaCopy
           (nF In Number Default 0, VerChk In Number Default 5,
            Verbose In Boolean Default FALSE) ; /* 71 */
--
  bRun  Boolean      ;
  nFunc Number := 71 ; /* should be equal-to, not one-greater-than, the   */
                       /* highest expected number of procedures to be run */
--
-- Function  CatV2nCatV ( s In Varchar2, n in Number default 5 ) Return Number ;
-- Procedure ChecknCatVnFR ( nCatV In Number, nFR In Number ) ;
--
-- Main
--
  Procedure Full (Verbose In Boolean Default FALSE,
                  RunAll  In Boolean Default FALSE,
                  VerChk  In Number  Default 5) ;
End hcheck;
/

Create Or Replace Package Body hcheck Is
    Ver        Varchar2(10) := '9i+/hc3.50';
    Warn       Number       :=0            ;
    Fatal      Number       :=0            ;
    CatV       Varchar2(10)                ;
    nCatV      Number       :=0            ;
    Verbose    Boolean                     ;
    nFR        Number       :=0            ; /* Fixed Release */
--
  Function InitsFr Return sFuncRel Is
    AllReleases Varchar2(32) := '99.99.99.99.99' ;
  Begin
--
-- Highest Relevant Release For Functions
-- If check against all releases, specify '99.99.99.99.99'
--
    sFr (0) := AllReleases            ; /*  0 */
    sFr (1) := '10.1.0.2.0'           ; /*  1 */
    sFr (2) := '10.0.0.2.0'           ; /*  2 */
    sFr (3) := AllReleases            ; /*  3 */
    sFr (4) := '10.2.0.1.0'           ; /*  4 */
    sFr (5) := '11.2.0.1.0'           ; /*  5 */
    sFr (6) := '11.2.0.1.0'           ; /*  6 */
    sFr (7) := AllReleases            ; /*  7 */
    sFr (8) :=  '9.0.1.0.0'           ; /*  8 */
    sFr (9) := AllReleases            ; /*  9 */
    sFr(10) := AllReleases            ; /* 10 */
    sFr(11) :=  '9.0.1.0.0'           ; /* 11 */
    sFr(12) := '11.2.0.1.0'           ; /* 12 */
    sFr(13) := AllReleases            ; /* 13 */
    sFr(14) :=  '9.0.1.0.0'           ; /* 13 */
    sFr(15) :=  '9.2.0.1.0'           ; /* 15 */
    sFr(16) := AllReleases            ; /* 16 */
    sFr(17) := AllReleases            ; /* 17 */
    sFr(18) := AllReleases            ; /* 18 */
    sFr(19) := AllReleases            ; /* 19 */
    sFr(20) := AllReleases            ; /* 20 */
    sFr(21) := AllReleases            ; /* 21 */
    sFr(22) := AllReleases            ; /* 22 */
    sFr(23) := AllReleases            ; /* 23 */
    sFr(24) := AllReleases            ; /* 24 */
    sFr(25) := AllReleases            ; /* 25 */
    sFr(26) := AllReleases            ; /* 26 */
    sFr(27) := AllReleases            ; /* 27 */
    sFr(28) := AllReleases            ; /* 28 */
    sFr(29) := AllReleases            ; /* 29 */
    sFr(30) := '11.1.0.6.0'           ; /* 30 */
    sFr(31) := AllReleases            ; /* 31 */
    sFr(32) :=  '8.1.6.0.0'           ; /* 32 */
    sFr(33) :=  '8.0.6.0.0'           ; /* 33 */
    sFr(34) :=  '8.1.7.0.0'           ; /* 34 */
    sFr(35) := AllReleases            ; /* 35 */
    sFr(36) := AllReleases            ; /* 36 */
    sFr(37) := AllReleases            ; /* 37 */
    sFr(38) := AllReleases            ; /* 38 */
    sFr(39) := AllReleases            ; /* 39 */
    sFr(40) := AllReleases            ; /* 40 */
    sFr(41) := '11.1.0.7.0'           ; /* 41 */
    sFr(42) := '11.1.0.7.0'           ; /* 42 */
    sFr(43) := AllReleases            ; /* 43 */
    sFr(44) := '10.1.0.2.0'           ; /* 44 */
    sFr(45) := AllReleases            ; /* 45 */
    sFr(46) := AllReleases            ; /* 46 */
    sFr(47) :=  '9.0.1.0.0'           ; /* 47 */
    sFr(48) :=  '9.0.1.0.0'           ; /* 48 */
    sFr(49) :=  '9.2.0.1.0'           ; /* 49 */
    sFr(50) :=  '9.0.1.0.0'           ; /* 50 */
    sFr(51) := AllReleases            ; /* 51 */
    sFr(52) := AllReleases            ; /* 52 */
    sFr(53) := AllReleases            ; /* 53 */
    sFr(54) := '10.1.0.2.0'           ; /* 54 */
    sFr(55) := AllReleases            ; /* 55 */
    sFr(56) := AllReleases            ; /* 56 */
    sFr(57) := AllReleases            ; /* 57 */
    sFr(58) := AllReleases            ; /* 58 */
    sFr(59) := AllReleases            ; /* 59 */
    sFr(60) := AllReleases            ; /* 60 */
    sFr(61) := AllReleases            ; /* 61 */
    sFr(62) :=  '9.2.0.8.0'           ; /* 62 */
    sFr(63) := '10.1.0.1.0'           ; /* 63 */
    sFr(64) := '10.1.0.1.0'           ; /* 64 */
    sFr(65) :=  '9.2.0.4.0'           ; /* 65 */
    sFr(66) :=  '9.2.0.5.0'           ; /* 66 */
    sFr(67) := '10.2.0.0.0'           ; /* 67 */
    sFr(68) := AllReleases            ; /* 68 */
    sFr(69) := '11.1.0.6.0'           ; /* 69 */
    sFr(70) := AllReleases            ; /* 70 */
    sFr(71) := AllReleases            ; /* 70 */
--
    Return sFr ;
  End ;
--
  Function Owner (uid Number) Return Varchar2 Is
    r          Varchar2(30) := Null        ;
  Begin
    Select name Into r
    From   user$
    where  user# = uid ;

return r ;
  Exception
    When NO_DATA_FOUND Then
      Return ( '*UnknownOwnID='||uid||'*' ) ;
  End ;
--
  Function ObjName (objid Number) Return Varchar2 Is
    r          Varchar2(30) := Null        ;
    own        Number                      ;
  Begin
    Select name, owner# Into r, own
    From   obj$
    Where  Obj# = objid ;
    return r ;
  Exception
    When NO_DATA_FOUND Then
      Return ( '*UnknownObjID='||objid||'*' ) ;
  End ;
--
  Function IsLastPartition( o number ) Return Boolean Is
    n Number := 0 ;
  Begin
    Select partcnt Into n From partobj$ where obj#=o ;
    If ( n>1 ) Then
      Return(FALSE) ;
    Else
      Return(TRUE) ;
    End If ;
  End;
--
  Function ObjectIsTemporary( o Number ) Return Boolean
  -- Return TRUE if object is a TEMPORARY object
  -- Return NULL if object does not exist
  -- Return FALSE if object is not temporary
  Is
    Cursor cIsTemp Is
      Select Bitand(nvl(flags,0), 2) IsTemp From obj$ Where obj#=o
    ;
    ret Boolean := FALSE ;
  begin
    For R in cIsTemp Loop -- For loop just to keep cursor closed
      If ( R.IsTemp=2 ) Then
        ret := TRUE ;
      End If;
    End Loop ;
    return ret ;
  End;
--
  Procedure DictAt( ts number, fi number, bl number ) is
   Cursor cDictAt is
     select typ, ts#,file#,block#,count('x') CNT
      from (
    select 'UNDO$' typ, u.ts#, u.file#, u.block# from undo$ u
         where decode(u.status$,1,null,u.status$) is not null
    UNION ALL
    select 'TAB$'        typ, a.ts#,a.file#,a.block# from tab$        a
    UNION ALL
    select 'CLU$'        typ, b.ts#,b.file#,b.block# from clu$        b
    UNION ALL
    select 'TABPART$'    typ, c.ts#,c.file#,c.block# from tabpart$    c
    UNION ALL
    select 'TABSUBPART$' typ, d.ts#,d.file#,d.block# from tabsubpart$ d
    UNION ALL
    select 'IND$'        typ, e.ts#,e.file#,e.block# from ind$        e
    UNION ALL
    select 'INDPART$'    typ, f.ts#,f.file#,f.block# from indpart$    f
    UNION ALL
    select 'INDSUBPART$' typ, g.ts#,g.file#,g.block# from indsubpart$ g
    UNION ALL
    select 'LOB$'        typ, h.ts#,h.file#,h.block# from lob$        h
    UNION ALL
    select 'LOBFRAG$'    typ, i.ts#,i.file#,i.block# from lobfrag$    i
--  UNION ALL
--  select 'RECYCLEBIN$' typ, j.ts#,j.file#,j.block# from recyclebin$ j
       )
       where ts#= TS and file# = FI and block#= BL
       group by typ, ts#,file#,block#
      ;
  Begin
   For R in cDictAt
   Loop
     hout.put_line('^  '||R.typ||' has '||R.cnt||' rows');
   End Loop;
  End;
--
  function IndexIsNosegment( o number ) return boolean is
   Cursor cX is
    select bitand(flags,4096) noseg from ind$ where obj#=o;
   ret boolean:=null;
  begin
   For C in cX
   loop
     if C.noseg=4096 then
    ret:=true;
     else
    ret:=false;
     end if;
   end loop;
   return ret;  /* true/false or NULL if not found */
  end;
--
   Procedure CheckIndPart( o number ) is
    Cursor Cchk is
    select  i.obj#, i.dataobj#, i.ts#, i.file#, i.block#
          from indpart$ i
     where i.bo#=o
       and (i.file#!=0 OR i.block#!=0);
   begin
    For R in Cchk Loop
     hout.put_line(' ^- PROBLEM: Child INDPART$ with FILE/BLK (bug 4683380)');
     hout.put_line(' ^- ( OBJ='||R.obj#|| ' DOBJ='||r.dataobj#||
        ' TS='||r.TS#||
        ' RFILE/BLOCK='||r.file#||' '||r.block#||')' );
     Fatal:=Fatal+1;
    end loop;
   end;
--
  Procedure ChecknCatVnFR ( nCatV In     Number,
                            nFR   In     Number,
                            bRun  In Out Boolean) Is
    str1 Varchar2(10) := To_Char(nCatV) ;
    str2 Varchar2(10) := To_Char(nFR)   ;
  Begin
    Case
      When ( nCatV =          0 ) Then
        str1 := '*Any Rel*' ;
    Else
      Null ;
    End Case ;
    Case
      When ( nFR   = 9999999999 ) Then
        str2 := '*All Rel*' ;
      Else
        Null ;
    End Case ;
    If ( nCatV > nFR ) Then
      hout.put_line(Rpad(nCatv,10,' ')||' > '||Lpad(nFR,11,' ')||' : n/a');
      bRun := FALSE ;
      return ;
    Else
      hout.put_line(Rpad(str1,10,' ')||' <='||Lpad(str2,11,' ')||' : Ok') ;
      bRun := TRUE ;
    End If ;
  End ;
--
  Procedure strtok (tok In Out Varchar2, s In Out Varchar2, ct In Varchar2) Is
    i           Pls_integer      ;
    p           Pls_integer      ;
    len         Pls_integer      ;
    token_start Pls_integer      ;
    intoken     Boolean := FALSE ;
  Begin
    -- dbms_output.put_line ( 'strtok string: '||s ) ;
    If ( s Is Not NULL ) Then
      len := length( s ) ;
      i   := 1 ;
      While ( i <= len ) Loop
        p := instr( ct, substr(s,i,1) );
        If ( ( i = len ) Or ( p > 0 ) ) Then
          If ( intoken ) Then
            If ( p > 0 ) Then
              tok := substr( s, token_start, i - token_start ) ;
              s   := substr( s, i+1 ) ;
            Else
              tok := substr( s, token_start, i - token_start + 1 ) ;
              s   := '' ;
            End If ;
            Exit When TRUE ;
          End If ;
        Elsif ( Not intoken ) Then
            intoken := true ;
            token_start := i ;
        End If;
        tok := s ;
        i := i + 1 ;
      End Loop;
    End if;
  End;
--
  Function CatV2nCatV ( s In Varchar2, n in Number default 5 ) Return Number As
    type tok is table of Number index by binary_integer ;
    tk tok ;
    scp varchar2(16) ;
    i number := 1 ;
    scv Varchar2(16) := Null ;
  Begin
    scp := s ;
    for i in 1..n loop
      tk(i) := Null ;
      strtok( tk(i), scp, '.' );
      scv := scv || Lpad(tk(i),2,'0') ;
    end loop ;
    return To_Number(scv) ;
  end;
--
  Procedure SynLastDDLTim
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select Distinct o.obj#, o.owner#, o.name
      From   obj$ o, idl_ub1$ i
      Where  type#  = 5
      And    ctime != mtime
      And    i.obj# = o.obj#    /* Has IDL information */
      ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0001' ;
    ps1a Varchar2(65) :=
         'Synonym''s LAST_DDL_TIME != CREATED' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:2371453' ;
    aff1 Varchar2(80) := 'Affects: Vers >=8.1.7.2 and BELOW 10.1 - '||
         'Specifically: 8.1.7.4 9.0.1.3 9.2.0.1' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.5 9.0.1.4 9.2.0.2 10.1.0.2' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note: 2371453.8 - CREATE OR REPLACE SYNONYM can lead to inconsistent';
    not2 Varchar2(80) :=
         '                  dictionary (old IDL data)' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' OBJ#='||c1.OBJ#||' Name='||Owner(c1.owner#)||'.'||
                      c1.name);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure LobNotInObj
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select l.obj#, l.lobj#
      From   lob$ l, obj$ o
      Where  l.lobj# = o.obj#(+)
      And    o.obj# is null
      ;
    ps1  Varchar2(10) := 'HCKE-0001' ;
    ps1a Varchar2(65) := 'LOB$.LOBJ# not found in OBJ$' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:2405258' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8 and BELOW 10.1 - Specifically: 9.2.0.1' ;
    fix1 Varchar2(80) :=
         'Fixed  : 9.2.0.2 10.1.0.2' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note: 2405258.8 - Dictionary corruption / OERI(15265) from MOVE LOB' ;
    not2 Varchar2(80) :=
         '                  to existing segment name' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' LOB$.LOBJ# has no OBJ$ entry for LOBJ#='||c1.lobj#||
                      ' (OBJ#='||c1.obj#||')');
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure MissingOIDOnObjCol
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select o.obj# , o.type#, o.owner#, o.name, c.col#, c.intcol#,
               c.name cname, t.property
      From   obj$ o, col$ c, coltype$ ct, oid$ oi, tab$ t
      Where  o.obj#     = ct.obj#
      And    ct.obj#    = c.obj#
      And    ct.col#    = c.col#
      And    ct.intcol# = c.intcol#
      And    oi.oid$(+) = ct.toid
      And    o.obj#     = t.obj#(+)
      And    oi.oid$ is null
      ;
    ps1  Varchar2(10) := 'HCKE-0002' ;
    ps1a Varchar2(65) := 'Object type column with missing OID$' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:2728624' ;
    aff1 Varchar2(80) :=
         'Affects: Closed as not a Bug (92)' ;
    fix1 Varchar2(80) :=
         'Fixed  : See Note.229583.1 for patching steps' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.229583.1 - Bug:2728624 - Confirmation and Patching Notes' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' OBJ#='||c1.obj#||' Name='||Owner(c1.owner#)||'.'
                      ||c1.name||' IntCol#='||c1.intcol#||'='||c1.cname
                      ||' TabProp='||c1.property);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure SourceNotInObj
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select Count('x') cnt, Count(Distinct s.obj#) nobj
      From   source$ s, obj$ o
      Where  s.obj# = o.obj#(+)
      And    o.obj# is null
      Having Count('x') > 0
      ;
    ps1  Varchar2(10) := 'HCKE-0003' ;
    ps1a Varchar2(65) := 'SOURCE$ for OBJ# not in OBJ$' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:3532977' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 10.2   Specifically: 9.2.0.4 10.1.0.4' ;
    fix1 Varchar2(80) :=
         'Fixed  : 9.2.0.8 10.1.0.5 10.2.0.1' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('SOURCE$ has '||c1.cnt||
             ' rows for '||c1.nobj||' OBJ# values not in OBJ$' ) ;
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure IndIndparMismatch
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select io.obj# io, io.name ionam, ipo.obj# ipo, ipo.name iponam
      From   obj$ io, indpart$ ip, obj$ ipo
      Where  ipo.type#         = 20  /* IND PART */
      And    ip.obj#           = ipo.obj#
      And    io.obj# (+)       = ip.bo#
      And    nvl(io.name,'"') != ipo.name
      ;
    ps1  Varchar2(10) := 'HCKE-0004' ;
    ps1a Varchar2(65) := 'OBJ$.NAME mismatch for INDEX v INDEX PARTITION' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:3753873' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 11.2 - Specifically: All 9.2 rels '||
         '(9.2.0.4 through 9.2.0.8)' ;
    aff2 Varchar2(80) :=
         '         10.1.0.5 10.2.0.1 10.2.0.2 10.2.0.3 10.2.0.4 11.1.0.7' ;
    fix1 Varchar2(80) :=
         'Fixed  : 11.2.0.1.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note:3753873.8 - Minor dictionary corruption from DROP COLUMN' ;
    not2 Varchar2(80) :=
         '                 of partitioned table with LOB' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (aff2 Is Not Null) Then hout.put_line(aff2); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' Ind Part OBJ$.OBJ# '||c1.ipo||' '||c1.iponam||
                '!='||c1.ionam||' OBJ#='||c1.io);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure InvCorrAudit
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select decode(aud.user#,
                      0, 'ANY CLIENT',
                      1, Null        ,
                      client.name)     username ,
             proxy.name                proxyname,
             prv.name                  privilege,
             decode(aud.success,
                      1, 'BY SESSION',
                      2, 'BY ACCESS' ,
                      'NOT SET')       success  ,
             decode(aud.failure,
                      1, 'BY SESSION',
                      2, 'BY ACCESS' ,
                      'NOT SET')       failure
      From   sys.user$                 client   ,
             sys.user$                 proxy    ,
             system_privilege_map      prv      ,
             sys.audit$                aud
      Where  aud.option# = -prv.privilege
      and aud.user#      = client.user#
      -- and aud.user#     != 1               /* PUBLIC */
      and aud.user#      = 0               /* SYS */
      and aud.proxy#     = proxy.user# (+)
      and aud.proxy# is null
    ;
    ps1  Varchar2(10) := 'HCKE-0005' ;
    ps1a Varchar2(65) := 'Invalid/Corrupted AUDIT$ entries' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:6310840' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 11.2 - Specifically: 11.1.0.6' ;
    fix1 Varchar2(80) :=
         'Fixed  : 11.1.0.7 11.2.0.1' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.455565.1: Corrupted entries in DBA_PRIV_AUDIT_OPTS' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    variant Varchar2(30) := Null ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        If (c1.username = 'ANY CLIENT')
        Then
          variant := 'Corrupted -' ;
        Else
          variant := 'Invalid   -' ;
        End If ;
        hout.put_line(variant||' USER#='''||c1.username||''' OPTION='''||
                   c1.privilege||''' SUCCESS='''||c1.success||''' FAILURE='''||
                   c1.failure||'''');
        Fatal := Fatal + 1 ;
      End Loop;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OversizedFiles
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select f.ts# TS, f.relfile# RFILE, f.file# AFILE, v.name NAME, f.blocks
      From   ts$ ts, file$ f, v$datafile v
      Where  ts.ts#                = f.ts#
      And    v.file#               = f.file#
      And    f.blocks              > 4194303 -- (4M -1 blocks)
      And    bitand(ts.flags,256) != 256
      Order  By f.ts#, f.relfile#
      ;
    ps1  Varchar2(10) := 'HCKE-0006' ;
    ps1a Varchar2(65) := 'Oversized datafile (blocks>4194303)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' OVERSIZED FILE ('||c1.blocks||' blocks) TS='||c1.TS||
            ' RFILE='||c1.RFILE||
            ' ABS='||c1.AFILE||' Name='||c1.NAME);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure TinyFiles
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      select file#, ts#, blocks
      from   file$
      where  status$ = 2
      and blocks    <= 1
      ;
    ps1  Varchar2(10) := 'HCKE-0007' ;
    ps1a Varchar2(65) := 'Tiny File size in FILE$' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1646512' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 9.0 - Specifically: 8.1.7.3' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.4 9.0.1.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' FILE$ FILE#='||c1.file#||' has BLOCKS='||c1.blocks);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure PoorDefaultStorage
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      select tablespace_name, initial_extent, next_extent, min_extents,
             pct_increase, max_extents
      from   dba_tablespaces
      where (initial_extent < 1024*1024
             or
             contents='TEMPORARY')
       and   next_extent    < 65536
       and   min_extlen     < 65536
       and   pct_increase   <     5
       and   max_extents    >  3000
       ;
    ps1  Varchar2(10) := 'HCKW-0002' ;
    ps1a Varchar2(65) := 'Poor Default Storage Clauses For Tablespace' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note:50380.1 - ALERT: Using UNLIMITED Extent Format' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
          CursorRun := TRUE ;
          hout.put_line(chr(10)||ps1||': '||ps1a);
          hout.put_line('  '||rpad('Tablespace',30)||rpad('Init',10)||
               rpad('Next',10)||rpad('Min',10)||rpad('Pct',4)||
               'MaxExtents');
          ps1:=null;
        End If ;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('  '
            ||rpad(c1.tablespace_name,30)
            ||rpad(c1.initial_extent,10)
            ||rpad(c1.next_extent,10)
            ||rpad(c1.min_extents,10)
            ||rpad(c1.pct_increase,4)
            ||c1.max_extents );
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure PoorStorage
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select owner       ,
             segment_name,
             segment_type,
             next_extent ,
             extents     ,
             pct_increase,
             max_extents
      From   dba_segments
      Where (     initial_extent < 65535
              And next_extent    < 65536
              And pct_increase   <     5
              And max_extents    >  3000
              And extents        >   500
            ) Or extents         >  3000
    ;
    ps1  Varchar2(10) := 'HCKW-0003' ;
    ps1a Varchar2(65) := 'Poor Storage Clauses For Object(s)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note:50380.1 - ALERT: Using UNLIMITED Extent Format' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
          CursorRun := TRUE ;
          hout.put_line (chr(10)||ps1||': '||ps1a) ;
          ps1:=null;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line('  '||rpad('Segment',50)||rpad('Next',10)||
                        rpad('Exts',7)||rpad('Pct',4)||
                        'MaxExtents' ) ;
        End If;
--
        hout.put_line('  '||
                      rpad(c1.segment_type||' '
                      ||c1.owner||'.'
                      ||c1.segment_name,50)
                      ||rpad(c1.next_extent,10)
                      ||rpad(c1.extents,7)
                      ||rpad(c1.pct_increase,4)
                      ||c1.max_extents );
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure MissTabSubPart
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select o.obj#       part_obj# ,
             o.owner#               ,
             o.name                 ,
             o.subname              ,
             p.subpartcnt           ,
             p.bo#        table_obj#
      From   obj$         o         ,
             tabcompart$  p
      Where  o.type#      = 19      /* PARTITION                     */
      and    o.obj#       = p.obj#  /* Has subpartitions             */
      and    p.subpartcnt = 0       /* Has No entries in tabsubpart$ */
      ;
    Cursor sCur2 Is
      Select o.obj#       part_obj# ,
             o.owner#               ,
             o.name                 ,
             o.subname              ,
             p.subpartcnt           ,
             p.bo#        index_obj#
      from   obj$         o         ,
             indcompart$  p
      where  o.type#      = 20      /* INDEX PARTITION               */
      and    o.obj#       = p.obj#  /* Has subpartitions             */
      and    p.subpartcnt = 0       /* Has No entries in indsubpart$ */
    ;
    ps1  Varchar2(10) := 'HCKE-0008' ;
    ps1a Varchar2(65) := 'Missing TABSUBPART$ entry/entries' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1360714' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8.1.5 and BELOW 9.0 - Specifically: 8.1.7.1' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.2 9.0.1.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    sMsg Boolean      := FALSE ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
--
        hout.put_line(
          ' TABLE '||Owner(c1.owner#)||'.'||c1.name||
          ' Partition '||c1.subname||
          ' PartObj#='||c1.part_obj#||' TabObj#='||c1.table_obj#
        ) ;
        If ( IsLastPartition ( c1.table_obj# ) ) Then
          hout.put_line(' ^^ PARTOBJ$.PARTCNT<=1 - non standard corruption') ;
        End If ;
        If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
        Fatal := Fatal + 1 ;
      End Loop ;
--
      For c2 In sCur2 Loop
        If (ps1 Is Not Null) Then
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
--
        hout.put_line(
          ' INDEX '||Owner(c2.owner#)||'.'||c2.name||
          ' Partition '||c2.subname||
          ' PartObj#='||c2.part_obj#||' IndObj#='||c2.index_obj#);
        If ( IsLastPartition ( c2.index_obj# ) ) Then
          hout.put_line(' ^^ PARTOBJ$.PARTCNT<=1 - non standard corruption') ;
       End If;
       Fatal := Fatal+1 ;
       sMsg  := TRUE ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
--
      If ( sMsg ) Then
        hout.put_line('There are probably orphaned SEG$ entry/s with this') ;
      End If ;
    End ;
--
  Procedure PartSubPartMismatch
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
       Select po.obj#                              obj#   ,
              u.name owner,
              o.name name,
              Decode(o.type#, 1, 'INDEX', 'TABLE') type   ,
              Decode(po.parttype,
                     1, 'RANGE' ,
                     2, 'HASH'  ,
                     3, 'SYSTEM',
                     4, 'LIST'  ,
                     'Unknown')                    part   ,
              Decode(Mod(po.spare2, 256),
                     0, 'NONE'  ,
                     2, 'HASH'  ,
                     3, 'SYSTEM',
                     4, 'LIST'  ,
                     'Unknown')                    subpart
       From   partobj$                             po     ,
              obj$                                 o      ,
              user$                                u
       Where  po.obj#    = o.obj#
       And    o.owner#   = u.user#
       And    po.spare2 != 0
       And    o.type#    = 1                       -- Index
       And    Decode(po.parttype,
                     1, 'RANGE' ,
                     2, 'HASH'  ,
                     3, 'SYSTEM',
                     4, 'LIST'  ,
                     'Unknown') !=
              Decode(mod(po.spare2, 256),
                     0, 'NONE'  ,
                     2, 'HASH'  ,
                     3, 'SYSTEM',
                     4, 'LIST'  ,
                     'Unknown')
    ;
    ps1  Varchar2(10) := 'HCKW-0004' ;
    ps1a Varchar2(65) := 'TABPART/TABSUBPART method mismatch' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:7509714' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 11.2 - Specifically: 10.2.0.4 10.2.0.5' ;
    fix1 Varchar2(80) :=
         'Fixed  : 11.2.0.1' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note:1499.1 - OERR: ORA-1499 table/Index Cross Reference Failure' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0 ) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(
          rpad(' INDEX '||c1.owner||'.'||c1.name,62,' ')||
               ' (OBJ '||c1.obj#||')') ;
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure TabPartCountMismatch
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    nFr  Number ;
    Cursor sCur1 Is
      Select o.obj#                   ,
             o.owner#                 ,
             o.name                   ,
             t.property               ,
             p.partcnt                ,
             Bitand(p.spare2,255) comp
      From   obj$   o,
             tab$   t,
             partobj$ p
      Where  o.type#               =  2                  /* table */
      And    Bitand(t.property,32) = 32      /* partitioned table */
      And    o.obj#                = t.obj#
      And    o.obj#                = p.obj#(+)
      And    o.dataobj# is null
      ;
    Cursor sCur2 ( pobj In Number) Is
      Select o.obj#    ,
             o.name    ,
             o.subname ,
             o.type#   ,
             o.owner#
      From   obj$ o    ,
             tabpart$ p
      Where  o.obj# = p.obj#
      And    p.bo#  = pobj
      ;
    Cursor sCur3 ( obj In Number ) Is
      Select Count('x') Count From tabcompart$ Where bo#=obj
      ;
    ps1  Varchar2(10) := 'HCKE-0009' ;
    ps1a Varchar2(65) := 'OBJ$-PARTOBJ$-<TABPART$ mismatch' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    nCnt Number       := Null ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 In sCur1 Loop
        --
        -- No Partitions
        --
        If ( c1.partcnt Is Null ) Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line(
            ' OBJ$ has no PARTOBJ$ OBJ#='||c1.obj#||' NAME='||c1.name) ;
          Fatal := Fatal + 1 ;
        Else
          --
          -- Not Composite
          --
          If ( c1.comp=0 ) Then
            Select Count('x') Into nCnt From tabpart$ Where bo#=c1.obj# ;
            --
            -- Interval Partitioned Tables have partcnt = 1048575
            --
            If ( c1.partcnt != nCnt And c1.partcnt != 1048575 ) Then
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line(
                ' PARTOBJ$ PARTCNT!=num TABPART$ rows OBJ#='||c1.obj#||
                ' NAME='||c1.name||' PARTCNT='||c1.partcnt||' CNT='||nCnt
              ) ;
              Fatal := Fatal + 1 ;
            End If ;
            --
            -- Check OBJ$ for the tabpart$ rows match up
            --
            For c2 In sCur2 (c1.obj#) Loop
              If ( c2.name   != c1.name   Or
                   c2.owner# != c1.owner# Or
                   c2.type#  != 19 ) Then
                If (ps1 Is Not Null) Then
                    CursorRun := TRUE ;
                    hout.put_line (chr(10)||ps1||': '||ps1a) ;
                    ps1:=null;
                End If;
                 If ( V ) Then
                  if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                  End If;
                  if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                  End If;
                  if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                  End If;
                  if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                  End If;
                  if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                  End If;
                  hout.put(chr(10)); V := FALSE ;
                End If ;
                hout.put_line(
                  ' TABPART$-OBJ$ mismatch (Bug:1273906)'||
                  ' OBJ#='||c2.obj#||
                  ' #'||c2.owner#||'.'||c2.name||' '||c2.subname) ;
                If ( c2.name != c1.name) Then
                  hout.put_line(
                    '  - Table Name ('||c1.name||') != '||
                    ' Partition Name ('||c2.name||')' );
                End If ;
                If ( c2.owner# != c1.owner# ) Then
                  hout.put_line(
                    '  - Table Owner# ('||c1.owner#||') != '||
                    ' Partition Onwer# ('||c2.owner#||')' );
                End If ;
                If ( c2.type# != 19 ) Then
                  hout.put_line(
                    '  - Partition Type# ('||c2.type#||')!=19' );
                End If ;
                Fatal := Fatal + 1 ;
              End If ;
            End Loop ;
          --
          -- Hash Composite
          --
          ElsIf ( c1.comp=2 ) Then
            For c3 in sCur3 ( c1.obj# ) Loop
              If ( c1.partcnt != c3.Count And c1.partcnt != 1048575 ) Then
                If (ps1 Is Not Null) Then hout.put_line(ps1); ps1:=null; End If;
                CursorRun := TRUE ;
                 If ( V ) Then
                  if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                  End If;
                  if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                  End If;
                  if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                  End If;
                  if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                  End If;
                  if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                  End If;
                  hout.put(chr(10)); V := FALSE ;
                End If ;
                hout.put_line(
                  ' PARTOBJ$ PARTCNT!=num TABCOMPART$ rows OBJ#='||
                  c1.OBJ#||
                  ' NAME='||c1.name||' PARTCNT='||c1.partcnt||' CNT='||
                  c3.Count);
                Fatal := Fatal + 1 ;
              End If ;
            End Loop ;
          End If ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End ;
--
  Procedure OrphanedTabComPart
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select t.obj# , t.bo#, b.name, p.name pname, p.subname, b.owner#
      From   tabcompart$ t, obj$ b, obj$ p
      Where  b.obj#(+) = t.bo#
      And    p.obj#(+) = t.obj#
      And    p.obj#+b.obj# Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0010' ;
    ps1a Varchar2(65) := 'Orphaned TABCOMPART$ from OBJ$' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1528062' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8.1 and BELOW 8.1.7.1   Specifically: 8.1.7.0' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.1 9.0.1.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.1528062.8 - SPLIT PARTITION on composite range-hash partition' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' ORPHAN TABCOMPART$: OBJ='||c1.obj#||
            ' OBJ#Name='||c1.subname||' ('||c1.pname||')'||
            ' BO#='||c1.bo#||
            ' BO#name='||Owner(c1.owner#)||'.'||c1.name);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure ZeroTabSubPart
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    noTable EXCEPTION ;
    PRAGMA EXCEPTION_INIT(noTable, -942) ;
    Cursor sCur1 Is
      Select sp.obj#, sp.ts#, sp.pobj#, b.name, b.subname, b.owner#
      From   indsubpart$ sp, obj$ b
      Where  sp.file#  = 0
      And    sp.block# = 0
      And    b.obj#(+) = sp.pobj#
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0011' ;
    ps1a Varchar2(65) := 'INDSUBPART$ has file# = 0' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1614155 (If Also Orphan SEG$)' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8.1 and BELOW 9.2   Specifically: 8.1.7.2 9.0.1.0' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.3 9.0.1.1 9.2.0.1' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.1837529.8: OERI:KFTR2BZ_1/OERI:25012 from CREATE ' ;
    not2 Varchar2(80) :=
         '                sub-partitioned local INDEX ONLINE' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    def_obj    number   := 0 ;
    def_count  number   := 0 ;
    def_exists number   := 1 ;
    sqlstr  varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
    sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      Begin
        Execute Immediate sqlstr Into def_count ;
        Exception
          When noTable Then
            def_exists := 0 ;
      End ;
--
      For c1 in sCur1 Loop
        If ( def_exists = 0 ) Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line(' ORPHAN INDSUBPART$: OBJ#='||c1.obj#||
              ' POBJ#='||c1.pobj#||
              ' Index='||Owner(c1.Owner#)||'.'||c1.name||
              ' Partn='||c1.subname);
          Fatal := Fatal + 1 ;
        Else
          Begin
            Execute Immediate sqlstr1 Into def_obj Using c1.obj# ;
          Exception
            When NO_DATA_FOUND Then
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                End If;
                if (not2 Is Not Null) Then hout.put_line(not2); not2:=null;
                End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line(' ORPHAN INDSUBPART$: OBJ#='||c1.obj#||
                  ' POBJ#='||c1.pobj#||
                  ' Index='||Owner(c1.Owner#)||'.'||c1.name||
                  ' Partn='||c1.subname);
              Fatal := Fatal + 1 ;
          End ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure MissingSum$
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select t.obj#,o.owner#,o.name
      From   tab$ t, obj$ o, sum$ s
      Where  bitand(t.flags,262144) = 262144    /* Container table */
      And    o.obj#                 = t.obj#
      And    s.containerobj#(+)     = t.obj#
      And    s.containerobj# Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0012' ;
    ps1a Varchar2(65) := 'SUM$ entry missing for container table' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' TAB$ OBJ#='||c1.OBJ#||' '||Owner(c1.owner#)||'.'||
            c1.name);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure MissingDir$
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select o.obj# o_obj, o.owner# o_owner, o.name o_name, d.obj# d_obj,
             oa.grantee# oa_grantee, oa.privilege# oa_priv, u.name u_name
      from   obj$ o, dir$ d, objauth$ oa, user$ u
      where  o.obj# = d.obj# (+)
      and    o.obj# = oa.obj# (+)
      and    o.owner# = u.user#
      and    o.type# = 23
      and    d.obj# is null
      ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0013' ;
    ps1a Varchar2(65) := 'DIR$ entry missing for directory objects' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(' OBJ$ OBJ#='||c1.o_obj||' Owner='||c1.u_name||'.'||
             c1.o_name||' - Grantee('||c1.oa_grantee||') - Priv ('||
             c1.oa_priv||')');
        Fatal:=Fatal+1;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure DuplicateDataobj
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select * from
      (
        Select /*+ NO_MERGE */
               many.dataobj#,
               o.obj#,
               o.owner#,
               o.name,
               o.subname,
               o.type#,
               t.property
        From (
               Select dataobj#
               From   obj$
               Where  dataobj# is not null
               Group  By dataobj#
               Having Count('x') > 1
             ) many, obj$ o, tab$ t
        Where  many.dataobj# = o.dataobj#(+)
        And    o.type# (+)  != 3              /* Not a cluster        */
        And    t.obj#  (+)   = o.obj#
      )
      Where  Bitand(property, 1024)!=1024     /* Not a cluster table  */
      And    Bitand(property, 64)  !=64       /* Not an IOT           */
--    Or     property is null                 /* IOT Part's fall here */
      Order  By dataobj#, obj#
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0014' ;
    ps1a Varchar2(65) := 'Dup. dataobj#'||
                         Chr(10)||
                         'May be valid under the following:' ;
    ps1b Varchar2(80) := '* Using TTS' ;
    ps1c Varchar2(80) := '* Obj''s belong to different TS''s'||Chr(10) ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:2597763 (If Dup SubPart found)' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 10.1' ;
    fix1 Varchar2(80) :=
         'Fixed  : 9.2.0.7 10.1.0.2' ;
    not1 Varchar2(80) :=
         'Note.2597763.8: SPLIT of a COMPOSITE PARTITION (Dup dataobj#)' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    sub boolean := FALSE ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            hout.put_line ('    '||ps1b) ;
            hout.put_line ('    '||ps1c) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('DATAOBJ#='||c1.DATAOBJ#||' OBJ#='||c1.obj#||
            ' Name='||Owner(c1.owner#)||'.'||c1.name||' '||c1.subname||
            ' Type#='||c1.type#) ;
        If (c1.type#=34 /*table subpart*/) Then
          sub := TRUE ;
        End If;
        Fatal:=Fatal+1;
      End Loop ;
      If ( sub ) Then
        hout.put_line('Subpartition duplicates (type# 34) found') ;
      End If;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure ObjSynMissing
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select o.obj#, o.owner#, o.name
      From   obj$ o, syn$ s
      Where  o.type#    = 5
      And    o.obj#     = s.obj#(+)
      And    o.linkname Is Null          /* Not a remote object */
      And    s.obj#     Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0005' ;
    ps1a Varchar2(65) := 'SYN$ entry missing for OBJ$ type#=5' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ#='||c1.OBJ#||' Name='||Owner(c1.owner#)||'.'||
            c1.name);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure ObjSeqMissing
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select o.obj#, o.owner#, o.name
      From obj$ o, seq$ s
      Where o.type#    = 6
      And   o.obj#     = s.obj#(+)
      And   o.linkname is null            /* Not remote */
      And   s.obj#     is null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0006' ;
    ps1a Varchar2(65) := 'SEQ$ entry missing for OBJ$ type#=6' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ#='||c1.OBJ#||' Name='||Owner(c1.owner#)||'.'||
            c1.name);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedUndo
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
     select u.us#            u_us,
            u.name           u_name,
            u.ts#            u_ts,
        nvl(s.ts#,0)     s_ts,
        u.file#          u_file,
        nvl(s.file#,0)   s_file,
        u.block#         u_block,
        nvl(s.block#,0)  s_block,
        u.status$        u_status,
            nvl(s.type#,0)   s_type
     from   undo$            u,
            seg$             s
     where  u.ts#           = s.ts#    (+)
     and    u.file#         = s.file#  (+)
     and    u.block#        = s.block# (+)
     and    u.status$       > 1
     and    nvl(s.type#,0) != 1
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0015' ;
    ps1a Varchar2(65) := 'Orphaned Undo$ (no SEG$)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.270386.1 - ORA-600 [ktssdrp1] / [ktsiseginfo1] '||
         '/ [4042]: undo$ <-> seg$' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If ((c1.s_ts    != c1.u_ts)   Or
            (c1.s_file  != c1.u_file) Or
            (c1.s_block != c1.u_block))
        Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line('ORPHAN UNDO$: US#='||c1.u_us||
              ' NAME='||c1.u_name||
              ' RFILE/BLOCK='||c1.u_file||' '||c1.u_block||
              ' STATUS$='||c1.u_status);
          Fatal := Fatal + 1 ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedIndex
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    noTable EXCEPTION ;
    PRAGMA EXCEPTION_INIT(noTable, -942) ;
    Cursor sCur1 Is
      Select i.obj#, i.dataobj#, i.ts#, i.file#, i.block#, i.bo#, s.type#
      From   seg$ s, ind$ i
      Where  i.ts#                 = s.ts#(+)
      And    i.file#               = s.file#(+)
      And    i.block#              = s.block#(+)
      And    Bitand(i.flags,4096) != 4096  /* Exclude NOSEGMENT index */
      And    Nvl(s.type#,0)       != 6
      And    i.dataobj# Is Not Null        /* ie: A Physical object   */
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0016' ;
    ps1a Varchar2(65) := 'Orphaned IND$ (no SEG$)' ;
    bug1 Varchar2(80) :=
                         'Ref    : Bug:3655873/Bug:3082770 (Ongoing) '||
                         '- Tue Jun 14 14:11:24 CEST 2011' ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    def_obj    number   := 0 ;
    def_count  number   := 0 ;
    def_exists number   := 1 ;
    sqlstr  varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
    sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
    ind_flags number ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      Begin
        Execute Immediate sqlstr Into def_count ;
        Exception
          When noTable Then
            def_exists := 0 ;
      End ;
--
      For c1 in sCur1 Loop
        Begin
          If ( ObjectIsTemporary(c1.obj#)) Then
            Null ; -- this is ok
          Else
            Select o.flags Into ind_flags
            From   obj$ o
            Where obj# = c1.bo#
            ;
            If ( ind_flags != 2 ) Then                 /* 0x02 -> Global Temp */
              If ( def_exists = 0 ) Then
                If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
                End If;
                 If ( V ) Then
                  if (bug1 Is Not Null) Then hout.put_line(bug1);
                      bug1:=null; End If;
                  if (aff1 Is Not Null) Then hout.put_line(aff1);
                      aff1:=null; End If;
                  if (fix1 Is Not Null) Then hout.put_line(fix1);
                      fix1:=null; End If;
                  if (tag1 Is Not Null) Then hout.put_line(tag1);
                      tag1:=null; End If;
                  if (not1 Is Not Null) Then hout.put_line(not1);
                      not1:=null; End If;
                  hout.put(chr(10)); V := FALSE ;
                End If ;
                hout.put_line('ORPHAN IND$: OBJ='||c1.obj#||
                    ' DOBJ='||c1.dataobj#||
                    ' TS='||c1.TS#||
                    ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                    ' BO#='||c1.bo#||' SegType='||c1.type#);
                If ( c1.TS#=0 And c1.file#=0 And c1.block#=0 ) Then
                  hout.put_line('^- May be OK. Needs manual check');
                End If ;
                Fatal:=Fatal+1;
              Else
                Begin
                  Execute Immediate sqlstr1 Into def_obj Using c1.obj# ;
                Exception
                  When NO_DATA_FOUND Then
                    If (ps1 Is Not Null) Then
                      CursorRun := TRUE ;
                      hout.put_line (chr(10)||ps1||': '||ps1a) ;
                      ps1:=null;
                    End If;
                    If ( V ) Then
                      if (bug1 Is Not Null) Then hout.put_line(bug1);
                          bug1:=null; End If;
                      if (aff1 Is Not Null) Then hout.put_line(aff1);
                          aff1:=null; End If;
                      if (fix1 Is Not Null) Then hout.put_line(fix1);
                          fix1:=null; End If;
                      if (tag1 Is Not Null) Then hout.put_line(tag1);
                          tag1:=null; End If;
                      if (not1 Is Not Null) Then hout.put_line(not1);
                          not1:=null; End If;
                      hout.put(chr(10)); V := FALSE ;
                    End If ;
                    hout.put_line('ORPHAN IND$: OBJ='||c1.obj#||
                                   ' DOBJ='||c1.dataobj#||
                                   ' TS='||c1.TS#||
                                   ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                                   ' BO#='||c1.bo#||' SegType='||c1.type#);
                    If ( c1.TS#=0 And c1.file#=0 And c1.block#=0 ) Then
                      hout.put_line('^- May be OK. Needs manual check');
                    End If ;
                    Fatal := Fatal + 1 ;
                End ;
              End If ;
            End If ;
          End If ;
        Exception
          When NO_DATA_FOUND Then
            If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
            End If;
            If ( V ) Then
              if (bug1 Is Not Null) Then hout.put_line(bug1);
                  bug1:=null; End If;
              if (aff1 Is Not Null) Then hout.put_line(aff1);
                  aff1:=null; End If;
              if (fix1 Is Not Null) Then hout.put_line(fix1);
                  fix1:=null; End If;
              if (tag1 Is Not Null) Then hout.put_line(tag1);
                  tag1:=null; End If;
              if (not1 Is Not Null) Then hout.put_line(not1);
                  not1:=null; End If;
              hout.put(chr(10)); V := FALSE ;
            End If ;
            -- CursorRun := TRUE ;
            hout.put_line('ORPHAN IND$: OBJ='||c1.obj#||
                ' DOBJ='||c1.dataobj#||
                ' TS='||c1.TS#||
                ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                ' BO#='||c1.bo#||' SegType='||c1.type#);
            If ( c1.TS#=0 And c1.file#=0 And c1.block#=0) Then
              hout.put_line('^- May be OK. Needs manual check');
            End If;
            Fatal := Fatal + 1 ;
        End ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedIndexPartition
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    noTable EXCEPTION ;
    PRAGMA EXCEPTION_INIT(noTable, -942) ;
    Cursor sCur1 Is
      select i.obj#, i.ts#, i.file#, i.block#, i.bo#, s.type#
      from   seg$ s, indpart$ i
      where  i.ts#=s.ts#(+)
      and    i.file#=s.file#(+)
      and    i.block#=s.block#(+)
      and    i.dataobj# is not null   /* ie: A Physical object */
      and nvl(s.type#,0)!=6
      and not (i.ts#=0 and i.file#=0 and i.block#=0) /* TEMP */
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0017' ;
    ps1a Varchar2(65) := 'Orphaned INDPART$ (no SEG$)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    def_obj    number    := 0 ;
    def_count  number    := 0 ;
    def_exists number    := 1 ;
    sqlstr  varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
    sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
    noseg Boolean        := FALSE ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      Begin
        Execute Immediate sqlstr Into def_count ;
        Exception
          When noTable Then
            def_exists := 0 ;
      End ;
--
      For c1 in sCur1 Loop
        noseg := IndexIsNosegment(c1.bo#) ;
        If (def_exists = 0) Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line('ORPHAN INDPART$: OBJ='||c1.obj#||
              ' TS='||c1.TS#||
              ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
              ' BO#='||c1.bo#||' SegType='||c1.type#);
          Fatal := Fatal + 1 ;
        Else
          If (noseg Is Null OR noseg = FALSE) Then
            Begin
              Execute Immediate sqlstr1 into def_obj Using c1.obj# ;
              Exception
                When NO_DATA_FOUND Then
                  If (ps1 Is Not Null) Then
                      CursorRun := TRUE ;
                      hout.put_line (chr(10)||ps1||': '||ps1a) ;
                      ps1:=null;
                  End If;
                   If ( V ) Then
                    if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                        End If;
                    if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                        End If;
                    if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                        End If;
                    if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                        End If;
                    if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                        End If;
                    hout.put(chr(10)); V := FALSE ;
                  End If ;
                  hout.put_line('ORPHAN INDPART$: OBJ='||c1.obj#||
                      ' TS='||c1.TS#||
                      ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                      ' BO#='||c1.bo#||' SegType='||c1.type#);
                  Fatal := Fatal + 1 ;
            End ;
          End If ;
        End If ;
        If (noseg Is Null) Then
          hout.put_line('^- INDPART$ (BO#) has no IND$ entry');
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedIndexSubPartition
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    noTable EXCEPTION ;
    PRAGMA EXCEPTION_INIT(noTable, -942) ;
    Cursor sCur1 Is
    select i.obj#, i.ts#, i.file#, i.block#, i.pobj#, s.type#
          from seg$ s, indsubpart$ i
         where i.ts#=s.ts#(+)
           and i.file#=s.file#(+)
           and i.block#=s.block#(+)
           and i.dataobj# is not null   /* ie: A Physical object */
       and not (i.ts#=0 and i.file#=0 and i.block#=0) /* TEMP */
           and nvl(s.type#,0)!=6
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0018' ;
    ps1a Varchar2(65) := 'Orphaned INDSUBPART$ (no SEG$)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    def_obj    number    := 0 ;
    def_count  number    := 0 ;
    def_exists number    := 1 ;
    sqlstr  varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
    sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      Begin
        Execute Immediate sqlstr Into def_count ;
        Exception
          When noTable Then
            def_exists := 0 ;
      End ;
--
      For c1 in sCur1 Loop
        If (def_exists = 0) Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line('ORPHAN INDSUBPART$: OBJ='||c1.obj#||
              ' TS='||c1.TS#||
              ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
              ' POBJ#='||c1.pobj#||' SegType='||c1.type#);
          Fatal := Fatal + 1 ;
        Else
          Begin
            Execute Immediate sqlstr1 Into def_obj Using c1.obj# ;
          Exception
            When NO_DATA_FOUND Then
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                    End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                    End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                    End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                    End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                    End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line('ORPHAN INDSUBPART$: OBJ='||c1.obj#||
                  ' TS='||c1.TS#||
                  ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                  ' POBJ#='||c1.pobj#||' SegType='||c1.type#);
              Fatal := Fatal + 1 ;
          End ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedTable
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    noTable EXCEPTION ;
    PRAGMA EXCEPTION_INIT(noTable, -942) ;
    Cursor sCur1 Is
      select i.obj#, i.dataobj#, i.ts#, i.file#, i.block#, i.bobj#, s.type#,
             bitand(i.property,64) iot
      from   seg$ s, tab$ i
      where  i.ts#                  = s.ts#(+)
      and    i.file#                = s.file#(+)
      and    i.block#               = s.block#(+)
      and    nvl(s.type#,0)        != 5
      and    bitand(i.property,64) != 64 /*(So that we exclude iot's) */
      and    i.dataobj# is not null   /* ie: A Physical object */
      /* and not (i.ts#=0 and i.file#=0 and i.block#=0) /* TEMP */
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0019' ;
    ps1a Varchar2(65) := 'Orphaned TAB$ (no SEG$)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    def_obj    number   := 0 ;
    def_count  number   := 0 ;
    def_exists number   := 1 ;
    sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
    sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      Begin
        Execute Immediate sqlstr Into def_count ;
      Exception
        When noTable Then
          def_exists := 0 ;
      End ;
--
      For c1 in sCur1 Loop
        If (ObjectIsTemporary(c1.obj#)) Then
          Null ; -- this is ok
        Else
          If ( c1.iot=64 And c1.dataobj#=0 And c1.ts#=0 and c1.block#=0) Then
            Null ; -- this is a truncated IOT (See 4701060)
          Else
            If (def_exists=0) Then
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                    End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                    End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                    End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                    End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                    End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line('ORPHAN TAB$: OBJ='||c1.obj#||
                  ' DOBJ='||c1.dataobj#||
                  ' TS='||c1.TS#||
                  ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                  ' BOBJ#='||c1.bobj#||' SegType='||c1.type#);
              If (c1.TS#=0 and c1.file#=0 and c1.block#=0) Then
                hout.put_line('^- May be OK. Needs manual check');
              End If ;
              Fatal := Fatal + 1 ;
            Else
              Begin
                Execute Immediate sqlstr1 Into def_obj Using c1.obj# ;
              Exception
                When NO_DATA_FOUND Then
                  If (ps1 Is Not Null) Then
                      CursorRun := TRUE ;
                      hout.put_line (chr(10)||ps1||': '||ps1a) ;
                      ps1:=null;
                  End If;
                   If ( V ) Then
                    if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                        End If;
                    if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                        End If;
                    if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                        End If;
                    if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                        End If;
                    if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                        End If;
                    hout.put(chr(10)); V := FALSE ;
                  End If ;
                  hout.put_line('ORPHAN TAB$: OBJ='||c1.obj#||
                      ' DOBJ='||c1.dataobj#||
                      ' TS='||c1.TS#||
                      ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                      ' BOBJ#='||c1.bobj#||' SegType='||c1.type#);
                  If (c1.TS#=0 and c1.file#=0 and c1.block#=0) Then
                    hout.put_line('^- May be OK. Needs manual check');
                  End If ;
                  Fatal := Fatal + 1 ;
              End ;
            End If ;
          End If ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedTablePartition
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    noTable EXCEPTION ;
    PRAGMA EXCEPTION_INIT(noTable, -942) ;
    Cursor sCur1 Is
        select i.obj#, i.ts#, i.file#, i.block#, i.bo#, s.type#
          from seg$ s, tabpart$ i, tab$ t
         where i.ts#=s.ts#(+)
           and i.file#=s.file#(+)
           and i.block#=s.block#(+)
           and i.dataobj# is not null   /* ie: A Physical object */
           and i.bo# = t.obj#
           and not (i.ts#=0 and i.file#=0 and i.block#=0) /* TEMP */
           and nvl(s.type#,0)!=5
           and bitand(t.property,64)!=64 /*(So that we exclude iot's) */
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0020' ;
    ps1a Varchar2(65) := 'Orphaned TABPART$ (no SEG$)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    def_obj    number   := 0 ;
    def_count  number   := 0 ;
    def_exists number   := 1 ;
    sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
    sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      Begin
        Execute Immediate sqlstr Into def_count ;
        Exception
          When noTable Then
            def_exists := 0 ;
      End ;
--
      For c1 in sCur1 Loop
        If (def_exists = 0) Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line('ORPHAN TABPART$: OBJ='||c1.obj#||
              ' TS='||c1.TS#||
              ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
              ' BO#='||c1.bo#||' SegType='||c1.type#);
          If (c1.TS#=0 and c1.file#=0 and c1.block#=0) Then
            hout.put_line('^- May be OK. Needs manual check');
          End If ;
          Fatal:=Fatal+1;
        Else
          Begin
            Execute Immediate sqlstr1 Into def_obj Using c1.obj# ;
          Exception
            When NO_DATA_FOUND Then
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                    End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                    End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                    End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                    End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                    End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line('ORPHAN TABPART$: OBJ='||c1.obj#||
                  ' TS='||c1.TS#||
                  ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                  ' BO#='||c1.bo#||' SegType='||c1.type#);
              If (c1.TS#=0 and c1.file#=0 and c1.block#=0) Then
                hout.put_line('^- May be OK. Needs manual check');
              End If ;
              Fatal:=Fatal+1;
          End ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedTableSubPartition
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    noTable EXCEPTION ;
    PRAGMA EXCEPTION_INIT(noTable, -942) ;

Cursor sCur1 Is
        select tsp.obj#, tsp.ts#, tsp.file#, tsp.block#, tsp.pobj#, s.type#
          from obj$ o, tabcompart$ tcp, tabsubpart$ tsp, seg$ s
         where o.obj#     = tcp.obj#
           and tcp.obj#   = tsp.pobj#
           and tsp.ts#    = s.ts#     (+)
           and tsp.file#  = s.file#   (+)
           and tsp.block# = s.block#  (+)
           and s.file# is null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0021' ;
    ps1a Varchar2(65) := 'Orphaned TABSUBPART$ (no SEG$)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    def_obj    number   := 0 ;
    def_count  number   := 0 ;
    def_exists number   := 1 ;
    sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
    sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
    Begin
      Execute Immediate sqlstr Into def_count ;
    Exception
      When noTable Then
        def_exists := 0 ;
    End ;
--
      For c1 in sCur1 Loop
        If (def_exists = 0) Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line('ORPHAN TABSUBPART$: OBJ='||c1.obj#||
              ' TS='||c1.TS#||
              ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
              ' POBJ#='||c1.pobj#||' SegType='||c1.type#);
          Fatal := Fatal + 1 ;
        Else
          Begin
            Execute Immediate sqlstr1 Into def_obj Using c1.obj# ;
          Exception
            When NO_DATA_FOUND Then
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                    End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                    End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                    End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                    End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                    End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line('ORPHAN TABSUBPART$: OBJ='||c1.obj#||
                  ' TS='||c1.TS#||
                  ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
                  ' POBJ#='||c1.pobj#||' SegType='||c1.type#);
              Fatal := Fatal + 1 ;
          End ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure MissingPartCol
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select tp.bo#, tp.obj#, tp.ts#, tp.file#, tp.block#, o.type#
      From   tabpart$ tp, partcol$ pc, obj$ o
      Where  tp.bo#   = pc.obj# (+)
      And    tp.obj#  = o.obj#
      And    pc.obj# Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0022' ;
    ps1a Varchar2(65) := 'Missing TabPart Column (no PARTCOL$ info)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Drop Table -> ORA-600 [kkpodDictPcol1], [1403], [0]' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
          hout.put_line('MISSING PARTCOL$: OBJ='||c1.bo#||
              ' DOBJ='||c1.obj#||
              ' TS='||c1.ts#||
              ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
              ' SegType='||c1.type#);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedSeg$
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select 'TYPE2 UNDO' typ, s.ts#, s.file#, s.block#
      From   seg$ s, undo$ u
      Where  s.ts#    = u.ts#(+)
      And    s.file#  = u.file#(+)
      And    s.block# = u.block#(+)
      And    s.type#  = 10
      -- And u.file# Is Null
      And    Decode(u.status$,1,null,u.status$) Is Null
      UNION ALL
      Select 'UNDO' typ, s.ts#, s.file#, s.block#
      From   seg$ s, undo$ i
      Where  s.ts#    = i.ts#(+)
      And    s.file#  = i.file#(+)
      And    s.block# = i.block#(+)
      And    s.type#  = 1
      -- And i.file# Is Null
      And    Decode(i.status$,1,null,i.status$) Is Null
      UNION ALL
      Select 'DATA' typ, s.ts#, s.file#, s.block#
      From   seg$ s,
      ( Select a.ts#,a.file#,a.block# From tab$ a
        UNION ALL
        Select b.ts#,b.file#,b.block# From clu$ b
        UNION ALL
        Select c.ts#,c.file#,c.block# From tabpart$ c
        UNION ALL
        Select d.ts#,d.file#,d.block# From tabsubpart$ d
      ) i
      Where s.ts#    = i.ts#(+)
      And   s.file#  = i.file#(+)
      And   s.block# = i.block#(+)
      And   s.type#  = 5
      And   i.file# Is Null
      UNION ALL
      Select 'INDEX' typ, s.ts#, s.file#, s.block#
      From seg$ s,
      ( Select a.ts#,a.file#,a.block# From ind$ a
        UNION ALL
        Select b.ts#,b.file#,b.block# From indpart$ b
        UNION ALL
        Select d.ts#,d.file#,d.block# From indsubpart$ d
      ) i
      Where  s.ts#    = i.ts#(+)
      And    s.file#  = i.file#(+)
      And    s.block# = i.block#(+)
      And    s.type#  = 6
      And    i.file# Is Null
      UNION ALL
      Select 'LOB' typ, s.ts#, s.file#, s.block#
      From   seg$ s, lob$ i --, sys_objects so
      Where  s.ts#    = i.ts#(+)
      And    s.file#  = i.file#(+)
      And    s.block# = i.block#(+)
      And    s.type#  = 8
      And    i.file# Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0023' ;
    ps1a Varchar2(65) := 'Orphaned SEG$ Entry' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    so_type Number ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If ( c1.typ = 'LOB' ) Then
          Begin
            Select so.object_type_id Into so_type
            From   sys_objects so
            Where  so.ts_number    = c1.ts#
            And    so.header_file  = c1.file#
            And    so.header_block = c1.block# ;
            If ( so_type Not In (40, 41) ) Then     /* Object Found */
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                    End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                    End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                    End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                    End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                    End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line('ORPHAN SEG$: SegType='||c1.typ||
                  ' TS='||c1.TS#||
                  ' RFILE/BLOCK='||c1.file#||' '||c1.block#);
              Fatal := Fatal + 1 ;
            End If ;
          Exception
            When NO_DATA_FOUND Then
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                    End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                    End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                    End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                    End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                    End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line('ORPHAN SEG$: SegType='||c1.typ||
                  ' TS='||c1.TS#||
                  ' RFILE/BLOCK='||c1.file#||' '||c1.block#);
              Fatal := Fatal + 1 ;
          End ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanedIndPartObj#
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select i.obj#, i.ts#, i.file#, i.block#, i.bo#
      From   obj$ o, indpart$ i
      Where  o.obj#(+) = i.obj#
      And    o.obj# Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0024' ;
    ps1a Varchar2(65) := 'Orphaned Index Partition Obj# (no OBJ$)' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:5040222' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 11.1 Specifically: 10.1.0.5 10.2.0.2' ;
    fix1 Varchar2(80) :=
         'Fixed  : 10.2.0.3 11.1.0.6' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.5040222.8: OERI[4823] from drop partition table after' ;
    not2 Varchar2(80) :=
         '                merge with update indexes' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('ORPHAN INDPART$: OBJ#='||c1.obj#||' - no OBJ$ row');
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure DuplicateBlockUse
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select ts#,file#,block#,count('x') CNT, min(typ) mintyp
      From
      (
        Select 'UNDO$' typ, u.ts#, u.file#, u.block# from undo$ u
        Where Decode(u.status$,1,null,u.status$) Is Not Null
        UNION ALL
        Select 'TAB$', a.ts#,a.file#,a.block# From tab$ a
        UNION ALL
        Select 'CLU$', b.ts#,b.file#,b.block# From clu$ b
        UNION ALL
        Select 'TABPART$', c.ts#,c.file#,c.block# From tabpart$ c
        UNION ALL
        Select 'TABSUBPART$', d.ts#,d.file#,d.block# From tabsubpart$ d
        UNION ALL
        Select 'IND$', a.ts#,a.file#,a.block# From ind$ a
        UNION ALL
        Select 'INDPART$', b.ts#,b.file#,b.block# From indpart$ b
        UNION ALL
        Select 'INDSUBPART$', d.ts#,d.file#,d.block# From indsubpart$ d
        UNION ALL
        Select 'LOB$' , i.ts#, i.file#, i.block# From lob$ i
        UNION ALL
        Select 'LOBFRAG$' , i.ts#, i.file#, i.block# From lobfrag$ i
        --  UNION ALL
        --  select 'RECYCLEBIN$' , i.ts#, i.file#, i.block# From recyclebin$ i
      )
      Where  block#    != 0
      Group  By ts#, file#, block#
      Having Count('x') > 1
      And    Min(typ)  != 'CLU$'  /* CLUSTER can have multiple entries */
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0025' ;
    ps1a Varchar2(65) := 'Block has multiple dictionary entries' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('MULTI DICT REF: TS='||c1.TS#||
            ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
            ' cnt='||c1.cnt);
        DictAt(c1.ts#, c1.file#, c1.block#);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure HighObjectIds
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select max(obj#) maxobj, max(dataobj#) maxdobj From obj$
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0026' ;
    ps1a Varchar2(65) := 'High Objects IDS exist' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:970640' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8.1.5 and BELOW 8.1.6' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.6.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.76746.1: Script to check DB Corr due to Bug.970640' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (c1.maxobj>2000000000) or (c1.maxdobj>2000000000) Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line('HIGH OBJECT NUMBERS EXIST: max(OBJ)='||c1.maxobj||
              ' max(dataobj#)='||c1.maxdobj);
          Fatal := Fatal + 1 ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure PQsequence
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select max_value, cycle_flag, last_number
      From   DBA_SEQUENCES
      Where  sequence_owner = 'SYS'
      And    sequence_name  = 'ORA_TQ_BASE$'
      And    cycle_flag    != 'Y'
      And    last_number    > 1000000
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0007' ;
    ps1a Varchar2(65) := 'Parallel Query internal sequence exhaustion' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:725220' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 8.0.6' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.0.6.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.66450.1: PQ internal sequence exceeds 4294967' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('ORA_TQ_BASE$ is not CYCLIC - '||
            To_char(c1.max_value-c1.last_number)||' values left');
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure TruncatedCluster
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
    select /*+ ORDERED */
        t.obj#, u.name owner, o.name, t.dataobj# td, c.dataobj# cd
      from clu$ c, tab$ t, obj$ o, user$ u
     where t.ts# = c.ts#
       and   t.file# = c.file#
       and   t.block# = c.block#
       and   t.dataobj# != c.dataobj#
       and   t.obj# = o. obj#
       and   o.owner# = u.user#
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0027' ;
    ps1a Varchar2(65) := 'Clustered Tables with bad DATAOBJ#' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1283521' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8.0 and BELOW 8.1.7' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.109134.1: Bad Cluster DATAOBJ# - Confirmation and Patching' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('Bad TAB$ entry: TAB OBJ='||c1.obj#||
            ' NAME='||c1.owner||'.'||c1.name||
            ' Tab DOBJ='||c1.td||' != '||c1.cd) ;
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure FetUet
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select ts#
      From   ts$
      Where  online$   != 3   /* Not INVALID        */
      And    bitmapped  = 0   /* Dictionary Managed */
    ;
    Cursor sCur2 (ts In Number) Is
               Select relfile#, blocks
               From   file$
               Where  ts#      = ts
               And    status$ != 1
               ;
    Cursor sCur3 (ts In Number, fil In Number, len In Number) Is
               Select block#, length, 'FET$' typ
               From   fet$
               Where  ts#   = ts
               And    file# = fil
               UNION  ALL
               select block#, length, 'UET$' typ
               from   uet$
               where  ts#   = ts
               And    file# = fil
               Order  By 1
               ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0028' ;
    ps1a Varchar2(65) := 'FET$ <-> UET$ Corruption ' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    BlkExpected Number       ;
    prev        sCur3%Rowtype;
    relfile     Number       ;
    blocks1     Number       ;
    blocks2     Number       ;
    len         Number       ;
    typ         Varchar2(4)  ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        For c2 in sCur2 (c1.ts#) Loop
          BlkExpected := 2 ;
          prev.typ := Null ; prev.block# := Null ; prev.length := Null ;
          For c3 in sCur3 (c1.ts#, c2.relfile#, c2.blocks) Loop
            If ( c3.block# != BlkExpected ) Then
              If (ps1 Is Not Null) Then
                  CursorRun := TRUE ;
                  hout.put_line (chr(10)||ps1||': '||ps1a||'TS# = '||c1.ts#||
                      ' - rFil = '||c2.relfile#) ;
                  ps1:=null;
              End If;
               If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                    End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                    End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                    End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                    End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                    End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
            End If ;
            Case
              When ( c3.block# = BlkExpected ) Then
                Null ;
              When ( c3.block# < BlkExpected ) Then
                hout.put_line('OVERLAP: TS#='||c1.ts#||' RFILE='||c2.relfile#||
                    ' ('||prev.typ||' '||prev.block#||' '||prev.length||
                    ') overlaps ('||
                    c3.typ||' '||c3.block#||' '||c3.length||')');
                Fatal := Fatal + 1 ;
              When ( c3.block# > BlkExpected ) Then
                hout.put_line('GAP    : TS#='||c1.ts#||' RFILE='||c2.relfile#||
                    ' ('||prev.typ||' '||prev.block#||' '||prev.length||
                    ') overlaps ('||
                    c3.typ||' '||c3.block#||' '||c3.length||')');
                Fatal := Fatal + 1 ;
            End Case ;
            prev := c3 ;
            BlkExpected := c3.block# + c3.length ;
          End Loop ;
          If ( BlkExpected-1 != c2.blocks ) Then
            If (ps1 Is Not Null) Then
                CursorRun := TRUE ;
                hout.put_line (chr(10)||ps1||': '||ps1a||'TS# = '||c1.ts#||
                    ' - rFil = '||c2.relfile#) ;
                ps1:=null;
            End If;
            If ( V ) Then
              if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                  End If;
              if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                  End If;
              if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                  End If;
              if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                  End If;
              if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                  End If;
              hout.put(chr(10)); V := FALSE ;
            End If ;
            -- c1.ts#, c2.relfile#, c2.blocks
            If (BlkExpected-1>len) then
              hout.put_line(' EXTENT past end of file: TS#='||c1.ts#||' RFILE='
                  ||c2.relfile#||' ('||prev.typ||' '||prev.block#||' '||
                  prev.length||') goes past end of file ('||c2.blocks||
                  ' blocks)');
            Else
              hout.put_line(' EXTENT too short: TS#='||c1.ts#||' RFILE='||
              c2.relfile#||' ('||prev.typ||' '||prev.block#||' '||prev.length||
              ') does not reach end of file ('||c2.blocks||' blocks)');
            End If ;
          End If ;
        End Loop ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure Uet0Check
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select ts#, segfile#, segblock#, file#, block#
      From   uet$
      Where  ext# = 0
      And   (file# != segfile# Or block# != segblock#)
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0029' ;
    ps1a Varchar2(65) := 'EXTENT 0 not at start of segment' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('TS#='||c1.ts#||
            ' '||c1.segfile#||','||c1.segblock#||' != '||
            c1.file#||','||c1.block#);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure ExtentlessSeg
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select s.ts#, s.file#, s.block#, s.type#
      From   seg$ s, uet$ u
      Where  s.ts#                      = u.ts#(+)
      And    s.file#                    = u.segfile#(+)
      And    s.block#                   = u.segblock#(+)
      And    bitand(NVL(s.spare1,0), 1) = 0 /* Not locally managed */
      And    u.ext#(+)                  = 0
      And    u.ts# Is Null                  /* no UET$ entry       */
      Order  By s.ts#, s.file#, s.block#
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0008' ;
    ps1a Varchar2(65) := 'SEG$ entry has no UET$ entries (Dictionary managed)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    tmp1 Varchar2(16) := Null ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        tmp1 := Null ;
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        If ( c1.type# = 9 ) Then
          tmp1 := ' (May Be Ok)' ;
        End If ;
        hout.put_line('SEG$ has no UET$ entry: TS#='||c1.TS#||' RFILE#='||
            c1.file#||' BLK#='||c1.block#||' TYPE#='||c1.type#||tmp1);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure SeglessUET
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select u.ts#, u.segfile#, u.segblock#, Count('x') cnt, Min(ext#) minext#
      From   seg$ s, uet$ u
      Where  s.ts#(+)    = u.ts#
      And    s.file#(+)  = u.segfile#
      And    s.block#(+) = u.segblock#
      And    s.ts# Is Null              /* no SEG$ entry */
      Group  By u.ts#, u.segfile#, u.segblock#
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0009' ;
    ps1a Varchar2(65) := 'UET$ entry has no SEG$ entries (Dictionary managed)' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('UET$ has no SEG$ entry: TS#='||c1.TS#||' SegFILE#='||
            c1.segfile#||' SegBLK#='||c1.segblock#||' Count='||
            c1.cnt||' MinExt#='||c1.minext#);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadInd$
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select o.obj# OBJ#, u.name OWNER, o.name NAME
      from   user$ u, obj$ o, ind$ i
      where  u.user# = o.owner#
      and    o.type# = 1                  /* INDEX */
      and    o.obj#  = i.obj#(+)
      and    i.obj# is null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0030' ;
    ps1a Varchar2(65) := 'OBJ$ INDEX entry has no IND$ entry' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('INDEX has no IND$ entry: Obj='||c1.obj#||' '||
            c1.owner||'.'||c1.name);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadTab$
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select o.obj# OBJ#, u.name OWNER, o.name NAME
      From   user$ u, obj$ o, tab$ i
      Where  u.user# = o.owner#
      And    o.name != 'DR$DBO'
      And    o.type# = 2             /* TABLE */
      And    o.obj#  = i.obj#(+)
      And    i.obj#     Is Null
      And    o.linkname Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0031' ;
    ps1a Varchar2(65) := 'OBJ$ TABLE entry has no TAB$ entry' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('TABLE has no TAB$ entry: Obj='||c1.obj#||' '||
            c1.owner||'.'||c1.name);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadIcolDepCnt
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select i.obj# , nvl(i.spare1,i.intcols) expect, ic.cnt got
      from ind$ i,
      (select obj#, count(*) cnt from icoldep$ group by obj# ) ic
      where ic.obj#=i.obj#
      and ic.cnt!=nvl(i.spare1,i.intcols)
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0032' ;
    ps1a Varchar2(65) := 'ICOLDEP$ count!=IND$ expected num dependencies' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:5217913' ;
    aff1 Varchar2(80) :=
         'Affects: All Vers >= 9.2.0.4 <= 10.2.0.5' ;
    fix1 Varchar2(80) :=
         'Fixed  : 11.1.0.7' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ#='||c1.OBJ#||' '||ObjName(c1.obj#)||
            ' IND$ expects '||c1.expect||' ICOLDEP$ has '||c1.got);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure WarnIcolDep
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select adt.obj#,adt.icobj#, adt.intcol#,adt.name
      from
      ( select c.obj#, ic.obj# icobj#, c.intcol#, c.name
       from col$ c , icoldep$ ic
       where c.type#=121 /*index on ADT*/
        and c.obj#=ic.bo#
        and c.intcol#=ic.intcol#
      ) adt,
      (select c.obj#, c.intcol#, c.name , ic.obj# icobj#
        from col$ c , icoldep$ ic
        where bitand(c.property,33)=33        /* index on ADT attribute */
         and c.obj#=ic.bo#
         and c.intcol#=ic.intcol#
      ) adtattr
      where adt.obj#=adtattr.obj#             /* same table */
        and adt.icobj#=adtattr.icobj#         /* same index */
        and adt.intcol#+1 = adtattr.intcol#   /* likely same ADT/attr */
      order by 1,2
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0010' ;
    ps1a Varchar2(65) := 'ICOLDEP$ may reference ADT and its attributes' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:5217913' ;
    aff1 Varchar2(80) :=
         'Affects: All Vers >= 9.2.0.4 <= 10.2.0.5' ;
    fix1 Varchar2(80) :=
         'Fixed  : 11.1.0.7' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('Index OBJ#='||c1.ICOBJ#||' '||ObjName(c1.icobj#)||
            ' intcol#='||c1.intcol#||'='||c1.name);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OnlineRebuild$
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select o.obj# OBJ#, u.name OWNER, o.name NAME,
             o.dataobj# O_ID, i.dataobj# I_ID
      From   user$ u, obj$ o, ind$ i
      Where  u.user#     = o.owner#
      And    o.type#     = 1             /* INDEX */
      And    o.obj#      = i.obj#
      And    o.dataobj# != i.dataobj#
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0033' ;
    ps1a Varchar2(65) := 'OBJ$.DATAOBJ# != IND.DATAOBJ#' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.125149.1: ALTER INDEX .. REBUILD ONLINE can corrupt index' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(c1.owner||'.'||c1.name||' OBJ$.DATAOBJ#='||c1.o_id||
            'IND$.DATAOBJ#='||c1.i_id);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure DropForceType
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select u.name owner, o.name name , a.name attr
      From   user$ u, obj$ o, type$ t, attribute$ a, type$ att
      Where  u.user#                    = o.owner#
      And    o.oid$                     = t.toid
      And    o.type#                   != 10     -- must not be invalid
      And    Bitand(t.properties, 2048) = 0      -- not system-generated
      And    t.toid                     = a.toid
      And    t.version#                 = a.version#
      And    a.attr_toid                = att.toid(+)
      And    a.attr_version#            = att.version#(+)
      And    att.toid Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0034' ;
    ps1a Varchar2(65) := 'Bad ATTRIBUTE$.ATTR_TOID entries' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1584155' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8 and BELOW 10.1 Specifically: 8.1.7.4 9.2.0.2' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.5 9.2.0.3 10.1.0.2' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.1584155.8: DROP FORCE/RECREATE TYPE with DEPENDENCIES corrupts';
    not2 Varchar2(80) :=
         '                dictionary information' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line(c1.owner||'.'||c1.name||' ATTR_NAME='||c1.attr);
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure TrgAfterUpgrade
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select Count('x') cnt from trigger$
      where  sys_evts Is Null or nttrigcol Is Null
      Having Count('x') > 0
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0035' ;
    ps1a Varchar2(65) := 'TRIGGER$ has NULL entries - Count = ' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a||c1.cnt) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure FailedInitJVMRun
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select obj#, type#, name
      From   obj$
      Where  type#=0
      And    name!='_NEXT_OBJECT'
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0036' ;
    ps1a Varchar2(65) := 'Bad OBJ$ entry with TYPE#=0' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1365707' ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ$ OBJ#='||c1.OBJ#||' TYPE#=0 NAME='||c1.name);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure TypeReusedAfterDrop
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select o.obj#, owner#, name
      From   obj$ o, view$ v
      Where  o.type#              = 4
      And    v.obj#               = o.obj#
      And    Bitand(v.property,1) = 0
      And    o.oid$ Is Not Null
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0037' ;
    ps1a Varchar2(65) := 'OBJ$.OID$ set for a VIEW' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1842429' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8 and BELOW 9.0.1' ;
    fix1 Varchar2(80) :=
         'Fixed  : 9.0.1.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.1842429.8: Dictionary corruption / ORA-600 [kkdodoid1] ' ;
    not2 Varchar2(80) :=
         '                possible after DROP TYPE' ;
    not3 Varchar2(80) :=
         '@ Support Only: Note.157540.1: Bug:1842429 / OERI [kkdodoid1] ' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          if (not3 Is Not Null) Then hout.put_line(not3); not3:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ$ OBJ#='||c1.OBJ#||' Owner='||Owner(c1.owner#)||
            ' NAME='||c1.name);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure Idgen1$TTS
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
     select increment$ from seq$ s , obj$ o
      where o.name='IDGEN1$' and owner#=0
        and s.obj#=o.obj#
        and increment$>50
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0011' ;
    ps1a Varchar2(65) := 'Sequence IDGEN1$ (INCREMENT_BY) too high' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1375026' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8 and BELOW 9.0 Specifically: 8.1.7.1' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.2 9.0.1.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.1375026.8: ORA-600 [13302] possible after a transportable' ;
    not2 Varchar2(80) :=
         '                tablespace has been plugged in ' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure DroppedFuncIdx
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select distinct u.name owner, o.name tab
      from   user$ u, obj$ o, col$ c
      where  o.type#                  = 2
      and    c.col#                   = 0
      and    Bitand(32768,c.property) = 32768
      and    o.obj#                   = c.obj#
      and    u.user#                  = o.owner#
      and    u.user#                 != 0
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0012' ;
    ps1a Varchar2(65) := 'Table with Dropped Func Index' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1805146' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=8.1 and BELOW 9.2 Specifically: 8.1.7.2 9.0.1.2' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.3 9.0.1.3 9.2.0.1' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.148740.1: ALERT: Export Of Table With Dropped Functional' ;
    not2 Varchar2(80) :=
         '               Index May Cause IMP-20 On Import ' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('Table='||c1.owner||'.'||c1.tab);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadOwner
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select obj#, type#, owner#, name
      From   obj$
      Where  owner# not in (Select user# From user$)
      And    type# != 10
    ;

nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0038' ;
    ps1a Varchar2(65) := 'OBJ$.OWNER# not in USER$' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1359472' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 9.0   Specifically: 8.1.7.1' ;
    fix1 Varchar2(80) :=
         'Fixed  : 8.1.7.2 9.0.1.0' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         '@Support Only: Note.333181.1: OBJ$.OWNER# not in USER$. Drop' ;
    not2 Varchar2(80) :=
         '               tablespace returns ORA-1549' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ$ OBJ#='||c1.OBJ#||' TYPE='||c1.type#||' NAME='||
            c1.name||' Owner#='||c1.OWNER#);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure UpgCheckc0801070
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select option#, Count('x')
      From   STMT_AUDIT_OPTION_MAP
      Where  option# = 229
      And    name    = 'ON COMMIT REFRESH'
      Group  By option#
      Having Count('x') > 0
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0013' ;
    ps1a Varchar2(65) := 'option# in STMT_AUDIT_OPTION_MAP(ON COMMIT REFRESH)' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:6636804' ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('-- Please run the following:') ;
        hout.put_line('SQL> update STMT_AUDIT_OPTION_MAP set option#=234') ;
        hout.put_line('     where name =''ON COMMIT REFRESH'' ;') ;
        hout.put_line('SQL> commit ;') ;
        Fatal:=Fatal+1;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadPublicObjects
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select obj#,name,type#
      From   obj$
      Where  owner#=1
      And    type# not in (5,10)
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0014' ;
    ps1a Varchar2(65) := 'Objects owned by PUBLIC' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:1762570' ;
    aff1 Varchar2(80) :=
         'Affects: Vers >=7' ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.1762570.8: It is possible to create objects OWNED by PUBLIC' ;
    not2 Varchar2(80) :=
         '                This may cause ORA-600[15261] / ORA-4050 / ORA-4043' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          if (not2 Is Not Null) Then hout.put_line(not2); not2:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ$ OBJ#='||c1.OBJ#||' TYPE='||c1.type#||
            ' NAME='||c1.name);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadSegFreelist
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select s.ts#, s.file#, s.block#, type#, s.lists, s.groups,
             bitand(l.property, 2048) bitp2048
      From   seg$ s, lob$ l
      Where  s.ts#      = l.ts#(+)
      And    s.file#    = l.file#(+)
      And    s.block#   = l.block#(+)
      And    ( s.lists  = 1 Or  s.groups            =    1 )
      -- And    bitand(nvl(l.property(+),0), 2048) != 2048
    ;
    -- OLD:
    --  Select ts#,file#,block#,type#,lists,groups
    --  From   seg$
    --  Where  lists=1 Or groups=1
    -- ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0015' ;
    ps1a Varchar2(65) := 'SEG$ bad LISTS/GROUPS (==1)' ;
    ps1b Varchar2(80) := 'May be Ok for LOBSEGMENT/SECUREFILE' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If ( c1.bitp2048 != 2048 ) Then
          If (ps1 Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              if ( nCatV > 1100000000 ) Then
                hout.put_line (ps1b) ;
              End If ;
              ps1:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line('Bad SEG$ lists/groups : TS#='||c1.TS#||' RFILE#='||
              c1.file#||' BLK#='||c1.block#||' TYPE#='||c1.type#||
              ' Lists='||c1.lists||' Groups='||c1.groups) ;
          Warn := Warn + 1 ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadCol#
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select o.obj# , Max(intcol#) maxi, Max(col#) maxc
      From   sys.col$ o
      Group  By o.obj#
      Having Max(intcol#)>1000 Or max(col#)>999
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0039' ;
    ps1a Varchar2(65) := 'COL$ (INTCOL#/COL#) too high' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:2212987' ;
    aff1 Varchar2(80) :=
         'Affects: Vers BELOW 10.1 Specifically: 9.2.0.6' ;
    fix1 Varchar2(80) :=
         'Fixed  : 9.2.0.8 10.1.0.2' ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note.2212987.8: Dictionary corruption can occur '||
         'as function index allowed' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ#='||c1.obj#||' max(intcol#)'||c1.maxi||
            ' max(col#)='||c1.maxc);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
--------------------------------------------------------------------------------
--
  Procedure BadDepends
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select o.obj#          dobj        ,
             p.obj#          pobj        ,
             d.p_timestamp   p_timestamp ,
             p.stime         p_stime     ,
             o.type#         o_type      ,
             p.type#         p_type
      From   sys.obj$        o           ,
             sys.dependency$ d           ,
             sys.obj$        p
      Where  p_obj#   = p.obj# (+)
      And    d_obj#   = o.obj#
      And    o.status = 1                    /*dependent is valid*/
      And    o.subname is null                /*!Old TYPE version*/
      And    bitand(d.property, 1) = 1          /*Hard dependency*/
      And    p.status = 1                       /*parent is valid*/
      And    p.stime !=d.p_timestamp /*parent timestamp not match*/
      Order  By 2,1
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0016' ;
    ps1a Varchar2(65) := 'Dependency$ p_timestamp mismatch for VALID objects' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    to_chk Varchar2 (4) ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        If ( (c1.o_type = 5) and (c1.p_type = 29) ) Then
          to_chk := '[W]'  ;
        Else
          to_chk := '[E]' ;
        End If ;
        hout.put_line(to_chk||' - P_OBJ#='||c1.pobj||' D_OBJ#='||c1.dobj);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure CheckDual
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select dummy From dual
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0017' ;
    ps1a Varchar2(65) := 'DUAL has more than one row' ;
    ps1b Varchar2(80) := 'DUAL does not contain ''X''' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    n    Number       := 0 ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        n := n + 1 ;
        If ( n > 1 ) Then
          If (ps1a Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1a) ;
              ps1a:=null;
          End If;
           If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          Warn := Warn + 1 ;
        End If ;
        If ( Nvl(c1.dummy,'Z') != 'X' ) Then
          If (ps1b Is Not Null) Then
              CursorRun := TRUE ;
              hout.put_line (chr(10)||ps1||': '||ps1b) ;
              ps1b:=null;
          End If;
          Warn := Warn + 1 ;
        End If ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure ObjectNames
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
    select username, object_type,
           Substr(owner||'.'||object_name,1,62) Name
    from   dba_objects, dba_users
    where  object_name = username
    and   (owner=username Or owner='PUBLIC')
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0018' ;
    ps1a Varchar2(65) := 'OBJECT name clashes with SCHEMA name' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:2894111' ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('Schema='||c1.username||' Object='||c1.name||' ('||
            c1.object_type||')');
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadCboHiLo
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select obj#,intcol#,lowval,hival from hist_head$ where lowval>hival
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0019' ;
    ps1a Varchar2(65) := 'HIST_HEAD$.LOWVAL > HIVAL' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ# '||c1.obj#||' INTCOL#='||c1.intcol#);
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure ChkIotTs
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select o.owner#, o.obj# , o.name , t.ts#, t.file#, t.block#
      From   sys.obj$ o, sys.tab$ t
      Where  Bitand(t.property,64) = 64 /* Marked as an IOT */
      And    ts#                  != 0
      And    o.obj#                = t.obj#
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0020' ;
    ps1a Varchar2(65) := 'IOT Tab$ has TS#!=0' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ#='||c1.obj#||' ('||Owner(c1.owner#)||'.'||
            c1.name||') '||' TS#='||c1.ts#||' f='||c1.file#||' b='||c1.block#) ;
        Warn := Warn + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure NoSegmentIndex
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select i.obj#, i.dataobj#, i.ts#, i.file#, i.block#, i.bo#, s.type#
      from   seg$ s, ind$ i
      where  i.ts#                = s.ts#(+)
      and    i.file#              = s.file#(+)
      and    i.block#             = s.block#(+)
      and    Bitand(i.flags,4096) = 4096  /* Exclude NOSEGMENT index */
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKW-0021' ;
    ps1a Varchar2(65) := 'NOSEGMENT IND$ exists' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) :=
         'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If ( nF = 0) Then
        sFr := InitsFr ;
      End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        If (ps1 Is Not Null) Then
            CursorRun := TRUE ;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=null;
        End If;
         If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('NOSEGMENT IND$: OBJ='||c1.obj#||
            ' DOBJ='||c1.dataobj#||
            ' TS='||c1.TS#||
            ' RFILE/BLOCK='||c1.file#||' '||c1.block#||
            ' BO#='||c1.bo#||' SegType='||c1.type#);
        If (c1.type# Is Not Null) Then
          hout.put_line('^- PROBLEM: NOSEGMENT Index has a segment attached');
        End If ;
        Warn := Warn + 1 ;
        if (c1.TS#!=0 or c1.file#!=0 or c1.block#!=0) then
          hout.put_line('^- Index has ts#/file#/block# set') ;
        end if ;
        CheckIndPart (c1.obj#) ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure BadNextObject
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select no.dataobj#, mx.maxobj#
      From   obj$ no , (select max(obj#) maxobj# from obj$) mx
      Where  no.type#=0 And no.name='_NEXT_OBJECT'
        and  mx.maxobj#>no.dataobj#
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0040' ;
    ps1a Varchar2(65) := 'OBJ$ _NEXT_OBJECT entry too low' ;
    bug1 Varchar2(80) := 'Ref    : Bug:10104492' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ$ _NEXT_OBJECT DATAOBJ#='||c1.dataOBJ#||
                ' MAX OBJ#='||c1.maxobj#);
        Fatal := Fatal + 1 ;
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure OrphanIndopt
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select i.obj#, i.bind#, Count(*) cnt
      From   sys.indop$ i
      Where  i.property != 4
      Group  By i.obj#, i.bind#
      Having Count(*) > 1
    ;
    nFr  Number ;
    ps1  Varchar2(10) := 'HCKE-0041' ;
    ps1a Varchar2(65) := 'Binding w/ multiple dictionary entries' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:2161360' ;
    aff1 Varchar2(80) := 'Affects: Vers BELOW 10.1 - '||
         'Specifically: 9.2.0.1' ;
    fix1 Varchar2(80) :=
         'Fixed  : 10.1.0.2' ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note:2161360.8 - DROP of OPERATOR corrupts dictionary';
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ# '||c1.obj#||' - BIND# '||c1.bind#||
                      '('||c1.cnt||')'
                     );
--
        Fatal := Fatal + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure UpgFlgBitTmp
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select s.user#, s.ts#, s.file#, s.block#
      From seg$ s
      Where Bitand(s.spare1,513) = 513
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKE-0042' ;
    ps1a Varchar2(80) := 'Segment Known != Temporary after upgrade' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug.2569255' ;
    aff1 Varchar2(80) := 'Affects: Vers >=9.0 and BELOW 10.1 - '||
         'Specifically: 9.2.0.2' ;
    fix1 Varchar2(80) :=
         'Fixed  : 9.2.0.3 10.1.0.2' ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note:2569255.8 - OERI:KCBGTCR_5 dropping segment upgrade from 8i' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('USER#: '||c1.user#||' - TS# '||c1.ts#||' ('||c1.file#||
                      '/'||c1.block#||')'
        );
--
        Fatal := Fatal + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure RenCharView
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select u.name uname, o.name oname
      From   obj$ o, user$ u
      Where  o.type#= 4
      And    o.spare1 = 0
      And    o.owner# = u.user#
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKW-0022' ;
    ps1a Varchar2(80) := 'Renamed VIEW w/ CHAR columns' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:2909084' ;
    aff1 Varchar2(80) := 'Affects: Vers >=8 and BELOW 10.1 - '||
         'Specifically: 8.1.7.4 9.2.0.3' ;
    fix1 Varchar2(80) :=
         'Fixed: 8.1.7.5 9.2.0.4 10.1.0.2' ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note: 2909084.8 - RENAME of a VIEW with CHAR column / wrong results' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('VIEW: '||c1.uname||'.'||c1.oname);
--
        Warn  := Warn  + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure Upg9iTab$
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select To_char(spare6), Count('x') nTot
      From   tab$
      Where  To_char(spare6) = '00-000-00'
      Group  By To_char(spare6)
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKW-0023' ;
    ps1a Varchar2(80) := 'TAB$ contains corrupt data after upgrade to 9i' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:3091612' ;
    aff1 Varchar2(80) := 'Affects: Vers >=9.0 and BELOW 10.1 - '||
         'Specifically: 9.2.0.4' ;
    fix1 Varchar2(80) :=
         'Fixed: 9.2.0.5 10.1.0.2' ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note: 3091612.8 - TAB$.SPARE6: corrupt data after upgrade to 9i' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('Total number of entries wrong: '||c1.nTot);
--
        Warn  := Warn  + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure Upg9iTsInd
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select i.obj#, i.ts#, i.file#, i.block#, i.bo#
      From   ind$ i
      Where  ts# != 0
      And    bo# In (Select obj#
                     From   tab$
                     Where  Bitand(property, 12582912) != 0)
                     -- global           temporary table (0x00400000)
                     -- session-specific temporary table (0x00800000)
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKW-0024' ;
    ps1a Varchar2(80) := 'Corrupt IND$ data for Global Temp Table Idx' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:3238525' ;
    aff1 Varchar2(80) := 'Affects: Vers >=9.2 and BELOW 10.1'||
         'Specifically: 9.2.0.3 9.2.0.5' ;
    fix1 Varchar2(80) :=
         'Fixed: 9.2.0.6 10.1.0.2' ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note: 3238525.8 - Corrupt IND$ data after upgrade' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ#='||c1.obj#||
        ' TS#='||c1.ts#||' '||c1.file#||' '||c1.block#);
--
        Warn  := Warn  + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure Upg10gInd$
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select To_char(spare6), Count('x') nTot
      From   ind$
      Where  To_char(spare6) = '00-000-00'
      Group  By To_char(spare6)
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKW-0025' ;
    ps1a Varchar2(80) := 'IND$ contains corrupt data after upgrade to 10g' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:4134141' ;
    aff1 Varchar2(80) := 'Affects: Vers >=10.1 and BELOW 10.2'||
         'Specifically: 10.1.0.4' ;
    fix1 Varchar2(80) :=
         'Fixed: 10.1.0.5 10.2.0.1' ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note: 842957.1 - EXPDP Fails With ORA-1801 During Schema Export' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('Total number of entries wrong: '||c1.nTot);
--
        Warn  := Warn  + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure DroppedROTS
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select t.ts#, t.name, f.file#
      From   ts$ t, file$ f
      Where  t.ts# = f.ts# (+)
      And    t.online$ = 4
      And    f.file# Is Null
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKE-0043' ;
    ps1a Varchar2(80) :=
         'Dictionary inconsistency for dropped RO tablespace' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:3455402' ;
    aff1 Varchar2(80) := 'Affects: Vers BELOW 10.2 - '||
         'Specifically: 9.2.0.4 9.2.0.5' ;
    fix1 Varchar2(80) :=
         'Fixed: 9.2.0.6 10.1.0.4 10.2.0.1' ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note: 3455402.8 - Corr: Concurrent DROP / ALTER TS READ ONLY' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('TS='||c1.ts#||'('||c1.name||')');
--
        Fatal := Fatal + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure ChrLenSmtcs
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      Select obj#, name, property, spare3, length
      From   col$
      Where  Bitand(property,8388608)!=0
      And    type#=23
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKW-0026' ;
    ps1a Varchar2(80) := 'NLS_LENGTH_SEMANTICS / RAW after upgrade' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:4638550' ;
    aff1 Varchar2(80) := 'Affects: Vers BELOW 11.1 - '||
         'Specifically: 10.2.0.2' ;
    fix1 Varchar2(80) :=
         'Fixed: 10.2.0.3 11.1.0.6' ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) :=
         'Note: 4638550.8 - OERI[dmlsrvColLenChk_2:dty] on upgrade from 9.2' ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ#='||c1.obj#);
--
        Warn  := Warn  + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure FilBlkZero
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    noTable EXCEPTION ;
    PRAGMA EXCEPTION_INIT(noTable, -942) ;
    Cursor sCur1 Is
      Select t_i.typ, t_i.ts#, t_i.file#, t_i.block#, t_i.obj#
      From
      (
        Select 'TABLE' typ, t.ts#, t.file#, t.block#, t.obj# from tab$ t
        Union All
        Select 'INDEX' typ, i.ts#, i.file#, i.block#, i.obj# from ind$ i
      ) t_i   ,
        ts$ t ,
        obj$ o
        Where t_i.ts#=t.ts#
        And   t.name not in ('SYSTEM','SYSAUX')
        And   t_i.file#  = 0
        And   t_i.block# = 0
        And   t_i.obj#   = o.obj#
        And   o.flags   != 2                  /* 0x02 -> Global Temp */
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKE-0044' ;
    ps1a Varchar2(80) := 'Object has zeroed file/block Information' ;
    bug1 Varchar2(80) := Null ;
    aff1 Varchar2(80) := Null ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
    def_obj    number   := 0 ;
    def_count  number   := 0 ;
    def_exists number   := 1 ;
    sqlstr  varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
    sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      Begin
        Execute Immediate sqlstr Into def_count ;
        Exception
          When noTable Then
            def_exists := 0 ;
      End ;
      For c1 in sCur1 Loop
        If ( def_exists = 0 ) Then
          CursorRun:=TRUE;
          If (ps1 Is Not Null) Then
            CursorRun:=TRUE;
            hout.put_line (chr(10)||ps1||': '||ps1a) ;
            ps1:=Null;
          End If ;
          If ( V ) Then
            if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
            if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
            if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
            if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
            if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
            hout.put(chr(10)); V := FALSE ;
          End If ;
          hout.put_line(c1.typ||' - OBJ#='||c1.obj#||' TS#='||c1.ts#);
--
          Fatal := Fatal + 1 ;
        Else
          Begin
            Execute Immediate sqlstr1 Into def_obj Using c1.obj# ;
          Exception
            When NO_DATA_FOUND Then
              If (ps1 Is Not Null) Then
                CursorRun:=TRUE;
                hout.put_line (chr(10)||ps1||': '||ps1a) ;
                ps1:=Null;
              End If ;
              If ( V ) Then
                if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null;
                End If;
                if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null;
                End If;
                if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null;
                End If;
                if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null;
                End If;
                if (not1 Is Not Null) Then hout.put_line(not1); not1:=null;
                End If;
                hout.put(chr(10)); V := FALSE ;
              End If ;
              hout.put_line(c1.typ||' - OBJ#='||c1.obj#||' TS#='||c1.ts#);
--
              Fatal := Fatal + 1 ;
          End ;
        End If ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
  Procedure DbmsSchemaCopy
           (nF      In Number  Default 0,
            VerChk  In Number  Default 5,
            Verbose In Boolean Default FALSE)
  Is
    Cursor sCur1 Is
      select o.obj#, u.name owner, o.name object
      from   obj$ o, user$ u
      where  o.owner# = u.user#
      and    o.type# in (4,5,6,7,8,9,11)
      and    o.subname='CLONE_USE'
    ;
    nFr  Number ;
    ps1  Varchar2(80) := 'HCKE-0045' ;
    ps1a Varchar2(80) := '"DBMS_SCHEMA_COPY" - Failed Execution' ;
    bug1 Varchar2(80) :=
         'Ref    : Bug:13383874' ;
    aff1 Varchar2(80) := 'Affects: 10gR2' ||
         'Specifically: (unresolved: 33)' ;
    fix1 Varchar2(80) := Null ;
    tag1 Varchar2(80) := 'CORR/DIC HCHECK '||ps1 ;
    not1 Varchar2(80) := Null ;
    CursorRun Boolean := FALSE ; V Boolean := Verbose ;
--
    Begin
      If (nF = 0) Then sFr := InitsFr ; End If ;
      nFr := hcheck.CatV2nCatV ( sFr(nF), VerChk );
      ChecknCatVnFR (nCatV, nFR, bRun) ;
      If ( bRun = FALSE ) Then return ; End If ;
      For c1 in sCur1 Loop
        CursorRun:=TRUE;
        hout.put_line (chr(10)||ps1||': '||ps1a) ;
        If ( V ) Then
          if (bug1 Is Not Null) Then hout.put_line(bug1); bug1:=null; End If;
          if (aff1 Is Not Null) Then hout.put_line(aff1); aff1:=null; End If;
          if (fix1 Is Not Null) Then hout.put_line(fix1); fix1:=null; End If;
          if (tag1 Is Not Null) Then hout.put_line(tag1); tag1:=null; End If;
          if (not1 Is Not Null) Then hout.put_line(not1); not1:=null; End If;
          hout.put(chr(10)); V := FALSE ;
        End If ;
        hout.put_line('OBJ#='||c1.obj#||' - '||c1.owner||'.'||c1.object);
--
        Fatal := Fatal + 1 ;
--
      End Loop ;
      If ( CursorRun ) Then hout.put(chr(10)) ; End If ;
    End;
--
-- Main
--
  Procedure Full (Verbose In Boolean Default FALSE,
                  RunAll  In Boolean Default FALSE,
                  VerChk  In Number  Default 5) Is
    FnIdx       Number := 0 ;
    nvc         Number ;
    stmt        Varchar2(80) := Null ;
    sV          Varchar2 (6) := 'FALSE' ;
  Begin
    Fatal  := 0 ;                    /* Number Of Fatal Errors */
    Warn   := 0 ;                    /* Number Of Warnings     */
--
-- List Of Procedure Names
--
    sFn (1) := 'SynLastDDLTim'             ; /*  1 */
    sFn (2) := 'LobNotInObj'               ; /*  2 */
    sFn (3) := 'MissingOIDOnObjCol'        ; /*  3 */
    sFn (4) := 'SourceNotInObj'            ; /*  4 */
    sFn (5) := 'IndIndparMismatch'         ; /*  5 */
    sFn (6) := 'InvCorrAudit'              ; /*  6 */
    sFn (7) := 'OversizedFiles'            ; /*  7 */
    sFn (8) := 'TinyFiles'                 ; /*  8 */
    sFn (9) := 'PoorDefaultStorage'        ; /*  9 */
    sFn(10) := 'PoorStorage'               ; /* 10 */
    sFn(11) := 'MissTabSubPart'            ; /* 11 */
    sFn(12) := 'PartSubPartMismatch'       ; /* 12 */
    sFn(13) := 'TabPartCountMismatch'      ; /* 13 */
    sFn(14) := 'OrphanedTabComPart'        ; /* 14 */
    sFn(15) := 'ZeroTabSubPart'            ; /* 15 */
    sFn(16) := 'MissingSum$'               ; /* 16 */
    sFn(17) := 'MissingDir$'               ; /* 17 */
    sFn(18) := 'DuplicateDataobj'          ; /* 18 */
    sFn(19) := 'ObjSynMissing'             ; /* 19 */
    sFn(20) := 'ObjSeqMissing'             ; /* 20 */
    sFn(21) := 'OrphanedUndo'              ; /* 22 */
    sFn(22) := 'OrphanedIndex'             ; /* 21 */
    sFn(23) := 'OrphanedIndexPartition'    ; /* 23 */
    sFn(24) := 'OrphanedIndexSubPartition' ; /* 24 */
    sFn(25) := 'OrphanedTable'             ; /* 25 */
    sFn(26) := 'OrphanedTablePartition'    ; /* 26 */
    sFn(27) := 'OrphanedTableSubPartition' ; /* 27 */
    sFn(28) := 'MissingPartCol'            ; /* 28 */
    sFn(29) := 'OrphanedSeg$'              ; /* 29 */
    sFn(30) := 'OrphanedIndPartObj#'       ; /* 30 */
    sFn(31) := 'DuplicateBlockUse'         ; /* 31 */
    sFn(32) := 'HighObjectIds'             ; /* 32 */
    sFn(33) := 'PQsequence'                ; /* 33 */
    sFn(34) := 'TruncatedCluster'          ; /* 34 */
    sFn(35) := 'FetUet'                    ; /* 35 */
    sFn(36) := 'Uet0Check'                 ; /* 36 */
    sFn(37) := 'ExtentlessSeg'             ; /* 37 */
    sFn(38) := 'SeglessUET'                ; /* 38 */
    sFn(39) := 'BadInd$'                   ; /* 39 */
    sFn(40) := 'BadTab$'                   ; /* 40 */
    sFn(41) := 'BadIcolDepCnt'             ; /* 41 */
    sFn(42) := 'WarnIcolDep'               ; /* 42 */
    sFn(43) := 'OnlineRebuild$'            ; /* 43 */
    sFn(44) := 'DropForceType'             ; /* 44 */
    sFn(45) := 'TrgAfterUpgrade'           ; /* 45 */
    sFn(46) := 'FailedInitJVMRun'          ; /* 46 */
    sFn(47) := 'TypeReusedAfterDrop'       ; /* 47 */
    sFn(48) := 'Idgen1$TTS'                ; /* 48 */
    sFn(49) := 'DroppedFuncIdx'            ; /* 49 */
    sFn(50) := 'BadOwner'                  ; /* 50 */
    sFn(51) := 'UpgCheckc0801070'          ; /* 51 */
    sFn(52) := 'BadPublicObjects'          ; /* 52 */
    sFn(53) := 'BadSegFreelist'            ; /* 53 */
    sFn(54) := 'BadCol#'                   ; /* 54 */
    sFn(55) := 'BadDepends'                ; /* 55 */
    sFn(56) := 'CheckDual'                 ; /* 56 */
    sFn(57) := 'ObjectNames'               ; /* 57 */
    sFn(58) := 'BadCboHiLo'                ; /* 58 */
    sFn(59) := 'ChkIotTs'                  ; /* 59 */
    sFn(60) := 'NoSegmentIndex'            ; /* 60 */
    sFn(61) := 'BadNextObject'             ; /* 61 */
    sFn(62) := 'OrphanIndopt'              ; /* 62 */
    sFn(63) := 'UpgFlgBitTmp'              ; /* 63 */
    sFn(64) := 'RenCharView'               ; /* 64 */
    sFn(65) := 'Upg9iTab$'                 ; /* 65 */
    sFn(66) := 'Upg9iTsInd'                ; /* 66 */
    sFn(67) := 'Upg10gInd$'                ; /* 67 */
    sFn(68) := 'DroppedROTS'               ; /* 68 */
    sFn(69) := 'ChrLenSmtcs'               ; /* 69 */
    sFn(70) := 'FilBlkZero'                ; /* 70 */
    sFn(71) := 'DbmsSchemaCopy'            ; /* 71 */
--
    sFr    := InitsFr ;
--
--  number of fields in the release to check against
--  can never be > 5 or < 1
--
    nvc := VerChk ;

If ( VerChk > 5 Or VerChk < 1 ) Then
      nvc := 5 ;
    End If ;
--
-- Get Catalog Version (Both String and Number)
--
    If ( RunAll ) Then
      CatV := '0.0.0.0.0' ;
      nCatV := 0 ;
    Else
      Select version Into CatV From dba_registry Where comp_id='CATALOG' ;
      nCatV := hcheck.CatV2nCatV ( CatV, nvc ) ;
    End If ;
    hout.put_line('H.Check Version '||Ver);
    hout.put_line('---------------------------------------') ;
    hout.put_line('Catalog Version '||Lpad(CatV,10,' ')||' '||
        Lpad( '('||To_char(nCatV)||')', 12, ' ')
    ) ;
    hout.put_line('---------------------------------------') ;
--
     If ( Verbose ) Then
      hout.put_line('Running in Verbose mode ...') ;
      sV := 'TRUE' ;
    End If ;
--
    hout.put(chr(10));
    hout.put_line('                                   Catalog   '||
        '    Fixed           ') ;
    hout.put_line('Procedure Name                     Version   '||
        ' Vs Release      Run') ;
    hout.put_line('------------------------------ ... ----------'||
        ' -- ----------   ---') ;
--
-- Call All Defined Procedures
--
    For FnIdx in 1..nFunc Loop
      stmt := 'Begin hcheck.'||
              sFn(FnIdx)||' '||'('||
                FnIdx||', '||
                nvc||', '||
                sV||
              ')'||' ; End ;' ;

hout.put(Rpad('.- '||sFn(FnIdx), 30, ' ')||' ... ') ;
      Execute Immediate stmt ;
    End Loop ;
--
    hout.put_line(chr(10)||'Found '||Fatal||' potential problem(s) and '||
                  warn||' warning(s)');
    hout.new_line;

If (Fatal>0 or Warn>0) Then
      hout.put_line('Contact Oracle Support with the output');
      hout.put_line('to check if the above needs attention or not');
    End If;
  End ;
End hcheck ;
/

set serveroutput on size 1000000
exec hcheck.Full ;

5.hcheck2.sql

REM
REM ======================================================================
REM hcheck8i.sql    Version 2.00          Tue Mar  1 11:13:40 CET 2011
REM
REM Purpose:
REM    To provide a single package which looks for common data dictionary
REM    problems.
REM     Note that this version has not been checked with locally managed
REM     tablespaces and may give spurious output if these are in use.
REM     This script is for use mainly under the guidance of Oracle Support.
REM
REM Usage:
REM     set serverout on
REM     execute hcheck.full;
REM
REM     Output is to the hOut package to allow output to be redirected
REM     as required
REM   
REM     See <Note:101466.1> for details of using this and other h* packages
REM
REM Depends on:
REM    hOut
REM
REM Notes:
REM     Must be installed in SYS schema
REM    This package is intended for use in Oracle 8.1 through 11.1
REM      This package will NOT work in 8.0 or earlier.
REM     In all cases any output reporting "problems" should be
REM      passed by an experienced Oracle Support analyst to confirm
REM      if any action is required.
REM
REM CAUTION
REM   The sample program in this article is provided for educational
REM   purposes only and is NOT supported by Oracle Support Services.  
REM   It has been tested internally, however, and works as documented.  
REM   We do not guarantee that it will work for you, so be sure to test
REM   it in your environment before relying on it.
REM
REM ======================================================================
REM

create or replace package hcheck as
  procedure Full;
end hcheck;
/
show errors
create or replace package body hcheck as
 --
  Ver    VARCHAR2(10)  := '8i-11/2.00';
  Warn  NUMBER  :=0;
  Fatal NUMBER  :=0;
 --
  Function Owner( uid number ) return varchar2 is
    r varchar2(30):=null;
  begin
    select name into r from user$ where user#=uid;
    return(r);
  exception
    when no_data_found then
    return('*UnknownOwnerID='||uid||'*');
  end;
 --
  Function ObjName( objid number ) return varchar2 is
    r varchar2(40):=null;
    own number;
  begin
    select name , owner# into r,own from obj$ where obj#=objid;
    return(owner(own)||'.'||r);
  exception
    when no_data_found then
    return('*UnknownObjID='||objid||'*');
  end;
 --
  procedure OversizedFiles is
   Cursor cBigFile is
        select f.ts# TS, f.relfile# RFILE, f.file# AFILE, v.name NAME, f.blocks
          from ts$ ts, file$ f, v$datafile v
         where ts.ts#                = f.ts#
           and v.file#               = f.file#
           and f.blocks              > 4194303
           and bitand(ts.flags,256) != 256
         order by f.ts#, f.relfile#
        ;
   tag varchar2(80):=chr(10)||
     'Problem: Oversized File - See Note:107591.1 (Bug:568232 , Bug:925105)';
  begin
   For R in cBigFile
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OVERSIZED FILE ('||r.blocks||' blocks) TS='||R.TS||
            ' RFILE='||r.RFILE||
            ' ABS='||r.AFILE||' Name='||r.NAME);
     Fatal:=Fatal+1;
   End Loop;
  end;
 --
  function ObjectIsTemporary( o number ) return boolean
  -- Return TRUE if object is a TEMPORARY object
  -- Return NULL if object does not exist
  -- Return FALSE if object is not temporary
  is
    Cursor cIsTemp is
    select bitand(nvl(flags,0), 2) IsTemp from obj$ where obj#=o
    ;
    ret boolean:=NULL;
  begin
    FOR R in cIsTemp LOOP -- For loop just to keep cursor closed
      if R.IsTemp=2 then ret:=TRUE; else ret:=FALSE; end if;
    END LOOP;
    return RET;
  end;
 --
  procedure OrphanedIndex is
  noTable EXCEPTION ;
  PRAGMA EXCEPTION_INIT(noTable, -942) ;
--
   Cursor cOrphanInd is
        select i.obj#, i.dataobj#, i.ts#, i.file#, i.block#, i.bo#, s.type#
          from seg$ s, ind$ i
         where i.ts#=s.ts#(+)
           and i.file#=s.file#(+)
           and i.block#=s.block#(+)
           and i.dataobj# is not null   /* ie: A Physical object */
           -- and not (i.file#=0 and i.block#=0) /* Covered by IF in loop */
           and bitand(i.flags,4096)!=4096  /* Exclude NOSEGMENT index */
           and nvl(s.type#,0)!=6
        ;
--
  def_obj    number   := 0 ;
  def_count  number   := 0 ;
  def_exists number   := 1 ;
  sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
  sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
--
   tag varchar2(80):=chr(10)||
    'Problem: Orphaned IND$ (no SEG$) - See Note:65987.1 (Bug:624613/3655873)';
   ind_flags number ;
  Begin
  Begin
--
    Execute Immediate sqlstr Into def_count ;
    Exception
      When noTable Then
        def_exists := 0 ;
    End ;
--
   For R in cOrphanInd
   Loop
     Begin
       if (ObjectIsTemporary(R.obj#)) then
          null; -- This is ok
       else
         select o.flags
           into ind_flags
           from obj$ o
           where obj#=R.bo# ;
         if (ind_flags != 2) /* 0x02 -> Global Temp */
         then
           if (def_exists = 0) then
             if (tag is not null) then hout.put_line(tag); tag:=null; end if;
             hout.put_line(' ORPHAN IND$: OBJ='||R.obj#||
                            ' DOBJ='||r.dataobj#||
                            ' TS='||r.TS#||
                            ' RFILE/BLOCK='||r.file#||' '||r.block#||
                            ' BO#='||r.bo#||' SegType='||R.type#);
               if (r.TS#=0 and r.file#=0 and r.block#=0) then
                 hout.put_line(' ^- May be OK. Needs manual check');
               end if ;
             Fatal:=Fatal+1;
           else
              Begin
                Execute Immediate sqlstr1 Into def_obj Using R.obj# ;
              Exception
                When NO_DATA_FOUND Then
                  if (tag is not null) then hout.put_line(tag); tag:=null; end if;
                    hout.put_line(' ORPHAN IND$: OBJ='||R.obj#||
                                   ' DOBJ='||r.dataobj#||
                                   ' TS='||r.TS#||
                                   ' RFILE/BLOCK='||r.file#||' '||r.block#||
                                   ' BO#='||r.bo#||' SegType='||R.type#);
                      if (r.TS#=0 and r.file#=0 and r.block#=0) then
                        hout.put_line(' ^- May be OK. Needs manual check');
                      end if ;
                    Fatal:=Fatal+1;
             End ;
           end if;
         end if;
       end if;
       Exception
         When NO_DATA_FOUND
         then
           hout.put_line(' ORPHAN IND$: OBJ='||R.obj#||
                            ' DOBJ='||r.dataobj#||
                            ' TS='||r.TS#||
                            ' RFILE/BLOCK='||r.file#||' '||r.block#||
                            ' BO#='||r.bo#||' SegType='||R.type#);
           if (r.TS#=0 and r.file#=0 and r.block#=0)
           then
             hout.put_line(' ^- May be OK. Needs manual check');
           end if;
           Fatal:=Fatal+1;
     End ;
   End Loop;
  End;
 --
  function IndexIsNosegment( o number ) return boolean is
   Cursor cX is
    select bitand(flags,4096) noseg from ind$ where obj#=o;
   ret boolean:=null;
  begin
   For C in cX
   loop
     if C.noseg=4096 then
    ret:=true;
     else
    ret:=false;
     end if;
   end loop;
   return ret;    /* true/false or NULL if not found */
  end;
 --
  procedure OrphanedUndo is
   Cursor cOrphanUndo is
--
     select u.us#            u_us,
            u.name           u_name,
            u.ts#            u_ts,
        nvl(s.ts#,0)     s_ts,
        u.file#          u_file,
        nvl(s.file#,0)   s_file,
        u.block#         u_block,
        nvl(s.block#,0)  s_block,
        u.status$        u_status,
            nvl(s.type#,0)   s_type
     from   undo$            u,
            seg$             s
     where  u.ts#           = s.ts#    (+)
     and    u.file#         = s.file#  (+)
     and    u.block#        = s.block# (+)
     and    u.status$       > 1
     and    nvl(s.type#,0) != 1
     ;

tag varchar2(80):=chr(10)||'Problem: Orphaned Undo$ (no SEG$) - See '||
                     'Note:270386.1';

begin
   For R in cOrphanUndo
   Loop
     If ((R.s_ts    != R.u_ts)   Or
         (R.s_file  != R.u_file) Or
     (R.s_block != R.u_block))
     Then
       if (tag is not null) then hout.put_line(tag); tag:=null; end if;

hout.put_line(' ORPHAN UNDO$: US#='||R.u_us||
            ' NAME='||R.u_name||
            ' RFILE/BLOCK='||R.u_file||' '||R.u_block||
            ' STATUS$='||R.u_status);
       Fatal:=Fatal+1;
     End if ;
   End Loop;
  End;
 --
  procedure OrphanedIndexPartition is
--
  noTable EXCEPTION ;
  PRAGMA EXCEPTION_INIT(noTable, -942) ;
--
  def_obj    number   := 0 ;
  def_count  number   := 0 ;
  def_exists number   := 1 ;
--
   Cursor cOrphanInd is
    select i.obj#, i.ts#, i.file#, i.block#, i.bo#, s.type#
          from seg$ s, indpart$ i
         where i.ts#=s.ts#(+)
           and i.file#=s.file#(+)
           and i.block#=s.block#(+)
           and i.dataobj# is not null   /* ie: A Physical object */
       and not (i.ts#=0 and i.file#=0 and i.block#=0) /* TEMP */
           and nvl(s.type#,0)!=6
        ;
   sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
   sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
   tag varchar2(80):=chr(10)||
     'Problem: Orphaned Index Partition (no SEG$) - '||
     'See Note:65987.1 (Bug:624613)';
   noseg boolean:=null;
  begin
    Begin
--
    Execute Immediate sqlstr Into def_count ;
    Exception
      When noTable Then
        def_exists := 0 ;
    End ;
--
   For R in cOrphanInd
   Loop
     noseg:=IndexIsNosegment(R.bo#);
     if (def_exists = 0) then
       begin
           if (tag is not null) then hout.put_line(tag); tag:=null; end if;
           hout.put_line(' ORPHAN INDPART$: OBJ='||R.obj#||
                ' TS='||r.TS#||
                ' RFILE/BLOCK='||r.file#||' '||r.block#||
                ' BO#='||r.bo#||' SegType='||R.type#);
           Fatal:=Fatal+1;
       end ;
     else
     if (noseg is null OR noseg = false) then
       begin
         execute immediate sqlstr1 into def_obj Using R.obj# ;
         exception when NO_DATA_FOUND then
           if (tag is not null) then hout.put_line(tag); tag:=null; end if;
           hout.put_line(' ORPHAN INDPART$: OBJ='||R.obj#||
                ' TS='||r.TS#||
                ' RFILE/BLOCK='||r.file#||' '||r.block#||
                ' BO#='||r.bo#||' SegType='||R.type#);
           Fatal:=Fatal+1;
       end ;
     end if;
     end if;
     if noseg is null then
       hout.put_line(' ^- INDPART$ . BO# has no IND$ entry ??');
     end if;
   End Loop;
  End;
 --
  procedure OrphanedIndexSubPartition is
  noTable EXCEPTION ;
  PRAGMA EXCEPTION_INIT(noTable, -942) ;
--
  def_obj    number   := 0 ;
  def_count  number   := 0 ;
  def_exists number   := 1 ;
--
   Cursor cOrphanInd is
    select i.obj#, i.ts#, i.file#, i.block#, i.pobj#, s.type#
          from seg$ s, indsubpart$ i
         where i.ts#=s.ts#(+)
           and i.file#=s.file#(+)
           and i.block#=s.block#(+)
           and i.dataobj# is not null   /* ie: A Physical object */
       and not (i.ts#=0 and i.file#=0 and i.block#=0) /* TEMP */
           and nvl(s.type#,0)!=6
        ;
   sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
   sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
   tag varchar2(80):=chr(10)||
     'Problem: Orphaned Index SubPartition (no SEG$) - '||
     'See xxxxx';
  Begin
    Begin
      Execute Immediate sqlstr Into def_count ;
      Exception
        When noTable Then
          def_exists := 0 ;
    End ;
--
    For R in cOrphanInd Loop
      Begin
        if (def_exists = 0) then
          if (tag is not null) then hout.put_line(tag); tag:=null; end if;
          --
          hout.put_line(' ORPHAN INDSUBPART$: OBJ='||R.obj#||
                    ' TS='||r.TS#||
                    ' RFILE/BLOCK='||r.file#||' '||r.block#||
                    ' POBJ#='||r.pobj#||' SegType='||R.type#);
          -- Fatal:=Fatal+1;
        else
          Begin
            execute immediate sqlstr1 into def_obj Using R.obj# ;
            exception when NO_DATA_FOUND then
              if (tag is not null) then hout.put_line(tag); tag:=null; end if;
                hout.put_line(' ORPHAN INDSUBPART$: OBJ='||R.obj#||
                    ' TS='||r.TS#||
                    ' RFILE/BLOCK='||r.file#||' '||r.block#||
                    ' POBJ#='||r.pobj#||' SegType='||R.type#);
                -- Fatal:=Fatal+1;
          End ;
        End if ;
      End ;
    End Loop;
  End ;
--
  procedure OrphanedTable is
--
  noTable EXCEPTION ;
  PRAGMA EXCEPTION_INIT(noTable, -942) ;
--
  def_obj    number   := 0 ;
  def_count  number   := 0 ;
  def_exists number   := 1 ;
--
  Cursor cOrphanTab is
        select i.obj#, i.dataobj#, i.ts#, i.file#, i.block#, i.bobj#, s.type#,
                bitand(i.property,64) iot
          from seg$ s, tab$ i
         where i.ts#=s.ts#(+)
           and i.file#=s.file#(+)
           and i.block#=s.block#(+)
           and i.dataobj# is not null   /* ie: A Physical object */
           /* and not (i.ts#=0 and i.file#=0 and i.block#=0) /* TEMP */
           and nvl(s.type#,0)!=5
           and bitand(i.property,64)!=64 /*(So that we exclude iot's) */
        ;
  sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
  sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;

tag varchar2(80):=chr(10)||
    'Problem: Orphaned TAB$ (no SEG$)';
--
--
  Begin
--
-- 11gR2 introduces Deferred Segment Creation feature.
-- need to check against sys.deferred_stg$ before reporting segment failure.
--
    Begin
--
    Execute Immediate sqlstr Into def_count ;
    Exception
      When noTable Then
        def_exists := 0 ;
    End ;
--
    For R in cOrphanTab
    Loop
      if (ObjectIsTemporary(R.obj#)) then
        null; -- This is ok
      else
        if (r.iot=64 and r.dataobj#=0 and r.ts#=0 and r.file#=0 and r.block#=0)
        then
          null; -- this is a truncated IOT - see 4701060
        else
          if (def_exists = 0) then
            if (tag is not null) then hout.put_line(tag); tag:=null; end if;
            hout.put_line(' ORPHAN TAB$: OBJ='||R.obj#||
                          ' DOBJ='||r.dataobj#||
                          ' TS='||r.TS#||
                          ' RFILE/BLOCK='||r.file#||' '||r.block#||
                          ' BOBJ#='||r.bobj#||' SegType='||R.type#);
            if (r.TS#=0 and r.file#=0 and r.block#=0) then
              hout.put_line(' ^- May be OK. Needs manual check');
            end if;
            Fatal:=Fatal+1;
          else
            Begin
              Execute Immediate sqlstr1 Into def_obj Using R.obj# ;
            Exception
              When NO_DATA_FOUND Then
                if (tag is not null) then hout.put_line(tag); tag:=null; end if;
                hout.put_line(' ORPHAN TAB$: OBJ='||R.obj#||
                              ' DOBJ='||r.dataobj#||
                              ' TS='||r.TS#||
                              ' RFILE/BLOCK='||r.file#||' '||r.block#||
                              ' BOBJ#='||r.bobj#||' SegType='||R.type#);
                if (r.TS#=0 and r.file#=0 and r.block#=0) then
                  hout.put_line(' ^- May be OK. Needs manual check');
                end if;
                Fatal:=Fatal+1;
            End ;
--
          end if;
        end if;
      end if;
    End Loop;
  End;
 --
  procedure OrphanedTablePartition is
  noTable EXCEPTION ;
  PRAGMA EXCEPTION_INIT(noTable, -942) ;
--
   def_obj    number   := 0 ;
   def_count  number   := 0 ;
   def_exists number   := 1 ;
--
   Cursor cOrphanTabPart is
        select i.obj#, i.ts#, i.file#, i.block#, i.bo#, s.type#
          from seg$ s, tabpart$ i, tab$ t
         where i.ts#=s.ts#(+)
           and i.file#=s.file#(+)
           and i.block#=s.block#(+)
           and i.dataobj# is not null   /* ie: A Physical object */
           and i.bo# = t.obj#
           and not (i.ts#=0 and i.file#=0 and i.block#=0) /* TEMP */
           and nvl(s.type#,0)!=5
           and bitand(t.property,64)!=64 /*(So that we exclude iot's) */
        ;
   sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
   sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
   tag varchar2(80):=chr(10)||
     'Problem: Orphaned Table Partition (no SEG$) - (Cause unknown)';
  begin
    Begin
--
    Execute Immediate sqlstr Into def_count ;
    Exception
      When noTable Then
        def_exists := 0 ;
    End ;
--
   For R in cOrphanTabPart
   Loop
   begin
   if (def_exists = 0) then
       if (tag is not null) then hout.put_line(tag); tag:=null; end if;
       hout.put_line(' ORPHAN TABPART$: OBJ='||R.obj#||
                     ' TS='||r.TS#||
                     ' RFILE/BLOCK='||r.file#||' '||r.block#||
                     ' BO#='||r.bo#||' SegType='||R.type#);
       if (r.TS#=0 and r.file#=0 and r.block#=0) then
         hout.put_line(' ^- May be OK. Needs manual check');
       end if;
       Fatal:=Fatal+1;
   else
     begin
     Execute Immediate sqlstr1 Into def_obj Using R.obj# ;
     Exception
       When NO_DATA_FOUND Then
       if (tag is not null) then hout.put_line(tag); tag:=null; end if;
       hout.put_line(' ORPHAN TABPART$: OBJ='||R.obj#||
                     ' TS='||r.TS#||
                     ' RFILE/BLOCK='||r.file#||' '||r.block#||
                     ' BO#='||r.bo#||' SegType='||R.type#);
       if (r.TS#=0 and r.file#=0 and r.block#=0) then
         hout.put_line(' ^- May be OK. Needs manual check');
       end if;
       Fatal:=Fatal+1;
    end;
   end if ;
   end ;
   End Loop;
  End;
 --
  procedure OrphanedTableSubPartition is
  noTable EXCEPTION ;
  PRAGMA EXCEPTION_INIT(noTable, -942) ;
--
  def_obj    number   := 0 ;
  def_count  number   := 0 ;
  def_exists number   := 1 ;
--
   Cursor cOrphanTabSubPart is
        select tsp.obj#, tsp.ts#, tsp.file#, tsp.block#, tsp.pobj#, s.type#
          from obj$ o, tabcompart$ tcp, tabsubpart$ tsp, seg$ s
         where o.obj#     = tcp.obj#
           and tcp.obj#   = tsp.pobj#
           and tsp.ts#    = s.ts#     (+)
           and tsp.file#  = s.file#   (+)
           and tsp.block# = s.block#  (+)
           and s.file# is null
        ;
   sqlstr varchar2(80) := 'Select Count(''x'') From deferred_stg$' ;
   sqlstr1 varchar2(80) := 'Select obj# From deferred_stg$ Where obj# = :obj' ;
   tag varchar2(80):=chr(10)||
     'Problem: Orphaned Table SubPartition (no SEG$) - (Cause unknown)';
  begin
    Begin
--
    Execute Immediate sqlstr Into def_count ;
    Exception
      When noTable Then
        def_exists := 0 ;
    End ;
--
   For R in cOrphanTabSubPart
   Loop
   begin
     if (def_exists = 0) then
         if (tag is not null) then hout.put_line(tag); tag:=null; end if;
         hout.put_line(' ORPHAN TABSUBPART$: OBJ='||R.obj#||
                ' TS='||r.TS#||
                ' RFILE/BLOCK='||r.file#||' '||r.block#||
                ' POBJ#='||r.pobj#||' SegType='||R.type#);
         Fatal:=Fatal+1;
     else
       begin
       execute immediate sqlstr1 Into def_obj Using R.obj# ;
       Exception
         When NO_DATA_FOUND Then
           if (tag is not null) then hout.put_line(tag); tag:=null; end if;
           hout.put_line(' ORPHAN TABSUBPART$: OBJ='||R.obj#||
                  ' TS='||r.TS#||
                  ' RFILE/BLOCK='||r.file#||' '||r.block#||
                  ' POBJ#='||r.pobj#||' SegType='||R.type#);
           Fatal:=Fatal+1;
       end ;
     end if ;
   end ;
   End Loop;
  End;
 --
  procedure OrphanedTabComPart is
   Cursor cOrphanTCP is
    select t.obj# , t.bo#, b.name, p.name pname, p.subname, b.owner#
          from tabcompart$ t, obj$ b, obj$ p
         where b.obj#(+)=t.bo#
           and p.obj#(+)=t.obj# and p.obj#+b.obj# is null
        ;
   tag varchar2(80):=chr(10)||
     'Problem: Orphaned TabComPart$ from OBJ$ - (see Bug:1528062)';
  begin
   For R in cOrphanTCP
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' ORPHAN TABCOMPART$: OBJ='||R.obj#||
            ' OBJ#Name='||r.subname||' ('||r.pname||')'||
            ' BO#='||R.bo#||
            ' BO#name='||Owner(R.owner#)||'.'||R.name);
     Fatal:=Fatal+1;
   End Loop;
  End;
 --
  procedure ZeroTabSubPart is
   Cursor cZero is
    select sp.obj#, sp.ts#, sp.pobj#, b.name, b.subname, b.owner#
          from indsubpart$ sp, obj$ b
         where sp.file#=0 and sp.block#=0
             and b.obj#(+)=sp.pobj#
        ;
   tag varchar2(80):=chr(10)||
     'Problem: IndSubPart$ has File#=0'||
     '(see Bug:1614155 if also Orphan SEG$)';
  begin
   For R in cZero
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' ORPHAN INDSUBPART$: OBJ#='||R.obj#||
            ' POBJ#='||R.pobj#||
            ' Index='||Owner(R.Owner#)||'.'||R.name||
            ' Partn='||R.subname);
     Fatal:=Fatal+1;
   End Loop;
  End;
 --
  procedure MissingPartCol is
-- Drop table will return:
-- ORA-00600: internal error code, arguments: [kkpodDictPcol1], [1403], [0]
   Cursor cOrphanColObj is
        select tp.bo#, tp.obj#, tp.ts#, tp.file#, tp.block#, o.type#
          from tabpart$ tp, partcol$ pc, obj$ o
         where tp.bo# = pc.obj# (+)
           and tp.obj# = o.obj#
           and pc.obj# is null
        ;
   tag varchar2(80):=chr(10)||
     'Problem: Missing TabPart Column (no PARTCOL$ info)';
  begin
   For R in cOrphanColObj
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' MISSING PARTCOL$: OBJ='||R.bo#||
                   ' DOBJ='||R.obj#||
                   ' TS='||R.ts#||
                   ' RFILE/BLOCK='||R.file#||' '||R.block#||
                   ' SegType='||R.type#);
     Fatal:=Fatal+1;
   End Loop;
  End;
 --
  procedure OrphanedSeg$ is
   Cursor cOrphanSeg is
    select 'TYPE2 UNDO' typ, s.ts#, s.file#, s.block#
          from seg$ s, undo$ u
         where s.ts#=u.ts#(+)
           and s.file#=u.file#(+)
           and s.block#=u.block#(+)
           and s.type#=10
       -- and u.file# is null
       and decode(u.status$,1,null,u.status$) is null
    UNION ALL
    select 'UNDO' typ, s.ts#, s.file#, s.block#
          from seg$ s, undo$ i
         where s.ts#=i.ts#(+)
           and s.file#=i.file#(+)
           and s.block#=i.block#(+)
           and s.type#=1
       -- and i.file# is null
       and decode(i.status$,1,null,i.status$) is null
    UNION ALL
    select 'DATA' typ, s.ts#, s.file#, s.block#
          from seg$ s,
        (select a.ts#,a.file#,a.block# from tab$ a
         union all
         select b.ts#,b.file#,b.block# from clu$ b
         union all
         select c.ts#,c.file#,c.block# from tabpart$ c
         union all
         select d.ts#,d.file#,d.block# from tabsubpart$ d
        ) i
         where s.ts#=i.ts#(+)
           and s.file#=i.file#(+)
           and s.block#=i.block#(+)
           and s.type#=5
       and i.file# is null
    UNION ALL
    select 'INDEX' typ, s.ts#, s.file#, s.block#
          from seg$ s,
        (select a.ts#,a.file#,a.block# from ind$ a
         union all
         select b.ts#,b.file#,b.block# from indpart$ b
         union all
         select d.ts#,d.file#,d.block# from indsubpart$ d
        ) i
         where s.ts#=i.ts#(+)
           and s.file#=i.file#(+)
           and s.block#=i.block#(+)
           and s.type#=6
       and i.file# is null
    UNION ALL
        select 'LOB' typ, s.ts#, s.file#, s.block#
          from seg$ s, lob$ i --, sys_objects so
         where s.ts#=i.ts#(+)
           and s.file#=i.file#(+)
           and s.block#=i.block#(+)
           and s.type#=8
           and i.file# is null
        ;
   tag varchar2(80):=chr(10)||
     'Problem: Orphaned SEG$ Entry';
   so_type number ;
  begin
    For R in cOrphanSeg
    Loop
      If (R.typ = 'LOB')
      then
        Begin
          select so.object_type_id into so_type
            from sys_objects so
           where so.ts_number    = R.ts#
             and so.header_file  = R.file#
             and so.header_block = R.block# ;
          if ( so_type not in (40, 41) )      /* Object Found */
          then
            if (tag is not null) then hout.put_line(tag); tag:=null; end if;
            hout.put_line(' ORPHAN SEG$: SegType='||R.typ||
               ' TS='||r.TS#||
               ' RFILE/BLOCK='||r.file#||' '||r.block#);
            Fatal:=Fatal+1;
          End If ;
        Exception
          When NO_DATA_FOUND                 /* Object *Not Found */
          then
            if (tag is not null) then hout.put_line(tag); tag:=null; end if;
            hout.put_line(' ORPHAN SEG$: SegType='||R.typ||
               ' TS='||r.TS#||
               ' RFILE/BLOCK='||r.file#||' '||r.block#);
            Fatal:=Fatal+1;
        End ;
      End If ;
    End Loop;
  End;
 --
  procedure DictAt( ts number, fi number, bl number ) is
   Cursor cDictAt is
     select typ, ts#,file#,block#,count('x') CNT
      from (
    select 'UNDO$' typ, u.ts#, u.file#, u.block# from undo$ u
         where decode(u.status$,1,null,u.status$) is null
    UNION ALL
    select 'TAB$', a.ts#,a.file#,a.block# from tab$ a
    UNION ALL
    select 'CLU$', b.ts#,b.file#,b.block# from clu$ b
    UNION ALL
    select 'TABPART$', c.ts#,c.file#,c.block# from tabpart$ c
    UNION ALL
    select 'TABSUBPART$', d.ts#,d.file#,d.block# from tabsubpart$ d
    UNION ALL
    select 'IND$', a.ts#,a.file#,a.block# from ind$ a
    UNION ALL
    select 'INDPART$', b.ts#,b.file#,b.block# from indpart$ b
    UNION ALL
    select 'INDSUBPART$', d.ts#,d.file#,d.block# from indsubpart$ d
    UNION ALL
    select 'LOB$' , i.ts#, i.file#, i.block# from lob$ i
    UNION ALL
    select 'LOBFRAG$' , i.ts#, i.file#, i.block# from lobfrag$ i
--    UNION ALL
--    select 'RECYCLEBIN$' , i.ts#, i.file#, i.block# from recyclebin$ i
       )
       where ts#= TS and file# = FI and block#= BL
       group by typ, ts#,file#,block#
      ;
  begin
   For R in cDictAt
   Loop
     hout.put_line('^  '||R.typ||' has '||R.cnt||' rows');
   End Loop;
  End;
 --
  procedure DuplicateBlockUse is
   Cursor cDuplicateBlock is
     select ts#,file#,block#,count('x') CNT, min(typ) mintyp
      from (
    select 'UNDO$' typ, u.ts#, u.file#, u.block# from undo$ u
         where decode(u.status$,1,null,u.status$) is null
    UNION ALL
    select 'TAB$', a.ts#,a.file#,a.block# from tab$ a
    UNION ALL
    select 'CLU$', b.ts#,b.file#,b.block# from clu$ b
    UNION ALL
    select 'TABPART$', c.ts#,c.file#,c.block# from tabpart$ c
    UNION ALL
    select 'TABSUBPART$', d.ts#,d.file#,d.block# from tabsubpart$ d
    UNION ALL
    select 'IND$', a.ts#,a.file#,a.block# from ind$ a
    UNION ALL
    select 'INDPART$', b.ts#,b.file#,b.block# from indpart$ b
    UNION ALL
    select 'INDSUBPART$', d.ts#,d.file#,d.block# from indsubpart$ d
    UNION ALL
    select 'LOB$' , i.ts#, i.file#, i.block# from lob$ i
    UNION ALL
    select 'LOBFRAG$' , i.ts#, i.file#, i.block# from lobfrag$ i
--    UNION ALL
--    select 'RECYCLEBIN$' , i.ts#, i.file#, i.block# from recyclebin$ i
       )
       where block#!=0
       group by ts#,file#,block#
       having count('x') > 1
      and min(typ)!='CLU$'     /* CLUSTER can have multiple entries */
      ;
   tag varchar2(80):=chr(10)||
     'Problem: Block has multiple dictionary entries';
  begin
   For R in cDuplicateBlock
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' MULTI DICT REF: TS='||r.TS#||
            ' RFILE/BLOCK='||r.file#||' '||r.block#||
            ' cnt='||R.cnt);
     DictAt(R.ts#, R.file#, R.block#);
     Fatal:=Fatal+1;
   End Loop;
  End;
 --
  procedure OrphanedIndPartObj# is
   Cursor cOrphanInd is
    select i.obj#, i.ts#, i.file#, i.block#, i.bo#
          from obj$ o, indpart$ i
         where o.obj#(+)=i.obj# and o.obj# is null
        ;
   tag varchar2(80):=chr(10)||
     'Problem: Orphaned Index Partition Obj# (no OBJ$) - '||
     'See Bug:5040222';
   noseg boolean:=null;
  begin
   For R in cOrphanInd
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' ORPHAN INDPART$: OBJ#='||R.obj#||' - no OBJ$ row');
     Fatal:=Fatal+1;
   End Loop;
  End;
 --
  procedure TruncatedCluster is
   Cursor cBadCluster is
       select /*+ ORDERED */
        t.obj#, u.name owner, o.name, t.dataobj# td, c.dataobj# cd
      from clu$ c, tab$ t, obj$ o, user$ u
     where t.ts# = c.ts#
       and   t.file# = c.file#
       and   t.block# = c.block#
       and   t.dataobj# != c.dataobj#
       and   t.obj# = o. obj#
       and   o.owner# = u.user#
   ;
   tag varchar2(80):=chr(10)||
     'Problem: Clustered Tables with bad DATAOBJ# - '||
     'See Note:109134.1 (Bug:1283521)';
  begin
   For R in cBadCluster
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' Bad TAB$ entry: TAB OBJ='||R.obj#||
            ' NAME='||r.owner||'.'||r.name||
            ' Tab DOBJ='||r.td||' != '||r.cd
     );
     Fatal:=Fatal+1;
   End Loop;
  End;
 --
  procedure HighObjectIds is
   Cursor cHighObject is
    select max(obj#) maxobj, max(dataobj#) maxdobj from obj$
   ;
   tag varchar2(80):=chr(10)||
     'Problem: High Objects IDS exist - See Note:76746.1 (Bug:970640)';
  begin
   For R in cHighObject
   Loop
     if (r.maxobj>2000000000) or (r.maxdobj>2000000000) then
       hout.put_line(tag);
       hout.put_line(' HIGH OBJECT NUMBERS EXIST: max(OBJ)='||r.maxobj||
            ' max(dataobj#)='||r.maxdobj);
       Fatal:=Fatal+1;
     end if;
   End Loop;
  End;
 --
  procedure PQsequence is
   Cursor cPQ is
    SELECT max_value, cycle_flag, last_number
          FROM DBA_SEQUENCES
         WHERE sequence_owner='SYS' and sequence_name='ORA_TQ_BASE$'
   ;
   tag varchar2(80):=chr(10)||
     'Problem: PQ Sequence needs fixing - See Note:66450.1 (Bug:725220)';
  begin
   For R in cPQ
   Loop
     if (R.cycle_flag!='Y' and R.last_number>1000000) then
       if (tag is not null) then hout.put_line(tag); tag:=null; end if;
       hout.put_line(' ORA_TQ_BASE$ is not CYCLIC - '||
            To_char(R.max_value-R.last_number)||' values left');
       Fatal:=Fatal+1;
     end if;
   End Loop;
  End;
 --
  procedure PoorDefaultStorage is
   Cursor cPoorStorage is
    select * from dba_tablespaces
     where (initial_extent<1024*1024 or contents='TEMPORARY')
       and next_extent<65536
       and min_extlen<65536
       and pct_increase<5
       and max_extents>3000
    ;
   tag varchar2(80):=chr(10)||
        'Warning: Poor Default Storage Clauses (see Note:50380.1)';
  begin
   For R in cPoorStorage
   Loop
     if (tag is not null) then
    hout.put_line(tag); tag:=null;
    hout.put_line('  '||rpad('Tablespace',30)||rpad('Init',10)||
        rpad('Next',10)||rpad('Min',10)||rpad('Pct',4)||
        'MaxExtents'
    ); tag:=null;
     end if;
     hout.put_line('  '||rpad(R.tablespace_name,30)
            ||rpad(r.initial_extent,10)
            ||rpad(r.next_extent,10)
            ||rpad(r.min_extlen,10)
            ||rpad(r.pct_increase,4)
            ||r.max_extents );
     Warn:=Warn+1;
   End Loop;
  End;
 --
  procedure PoorStorage is
   Cursor cPoorStorage is
    select * from dba_segments
     where (initial_extent<65535
       and next_extent<65536
       and pct_increase<5
       and max_extents>3000
       and extents>500)
      or extents>3000
    ;
   tag varchar2(80):=chr(10)||
    'Warning: Poor Storage Clauses (see Note:50380.1)';
  begin
   For R in cPoorStorage
   Loop
     if (tag is not null) then
    hout.put_line(tag);
    tag:=null;
    hout.put_line('  '||rpad('Segment',50)||rpad('Next',10)||
        rpad('Exts',7)||rpad('Pct',4)||
        'MaxExtents'
    );
     end if;
     hout.put_line('  '||
    rpad(R.segment_type||' '||R.owner||'.'||R.segment_name,50)
            ||rpad(r.next_extent,10)
            ||rpad(r.extents,7)
            ||rpad(r.pct_increase,4)
            ||r.max_extents );
     Warn:=Warn+1;
   End Loop;
  End;
 --
  procedure FetUet(ts number, fil number, len number) is
   Cursor cMap(ts number,fil number) is
     select block#,length,'FET$' typ
     from fet$ where ts#=TS and file#=FIL
      UNION ALL
     select block#,length,'UET$' typ
     from uet$ where ts#=TS and file#=FIL
     order by 1
   ;
   BlkExpected number;
   prev cMap%Rowtype;
   tag varchar2(80):=chr(10)||
     'Problem: Fet/Uet corruption in TS#='||TS||' RFile='||FIL;
  begin
   BlkExpected:=2;
   For R in cMap(TS,FIL)
   Loop
     if (R.block#!=BlkExpected) then
        if (tag is not null) then hout.put_line(tag); tag:=null; end if;
           if R.block#<BlkExpected then
          hout.put_line(' OVERLAP: TS#='||TS||' RFILE='||FIL||
            ' ('||prev.typ||' '||prev.block#||' '||prev.length||
            ') overlaps ('||
            R.typ||' '||R.block#||' '||R.length||')');
    else
           hout.put_line(' GAP:     TS#='||TS||' RFILE='||FIL||
            ' ('||prev.typ||' '||prev.block#||' '||prev.length||
            ') gap-to ('||
            R.typ||' '||R.block#||' '||R.length||')');
    end if;
        Fatal:=Fatal+1;
     end if;
     prev:=R;
     BlkExpected:=R.block#+R.length;
   End Loop;
   -- hout.put_line(' Check expect='||BlkExpected||' len='||len);
   if ( BlkExpected-1!=len ) then
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     if (BlkExpected-1>len) then
        hout.put_line(' EXTENT past end of file: TS#='||TS||' RFILE='||FIL||
        ' ('||prev.typ||' '||prev.block#||' '||prev.length||
        ') goes past end of file ('||len||' blocks)');
     else
        hout.put_line(' EXTENT too short: TS#='||TS||' RFILE='||FIL||
        ' ('||prev.typ||' '||prev.block#||' '||prev.length||
        ') does not reach end of file ('||len||' blocks)');
     end if;
     Fatal:=Fatal+1;
   end if;
  End;
 --
  procedure FetUet(ts number) is
   Cursor cFiles(ts number) is
    select relfile#,blocks from file$
     where ts#=TS and status$!=1     /*!=invalid*/
   ;
  begin
   For R in cFiles(ts)
   Loop
     FetUet(TS,R.relfile#,R.blocks);
   End Loop;
  End;
 --
 -- Each first extent should have SEGFILE,BLOCK = FILE,BLOCK
 --
  procedure Uet0Check is
   Cursor cUet0OK is  
     Select * from uet$
      where ext# = 0
        and (file# != segfile# or block# != segblock# )
   ;
   tag varchar2(80):=chr(10)||
     'Problem: Uet extent 0 corrupt';
  begin
   For R in cUet0OK
   Loop
        hout.put_line(' EXTENT 0 not at start of segment: TS#='||R.TS#||
            ' '||R.segfile#||','||R.segblock#||' != '||
            R.file#||','||R.block#);
       Fatal:=Fatal+1;
   End Loop;
  end;
 --
  procedure ExtentlessSeg is
   Cursor cExtentlessSeg is  
       select s.* from seg$ s, uet$ u
    where s.ts#=u.ts#(+)
      and s.file#=u.segfile#(+)
      and s.block#=u.segblock#(+)
      and bitand(NVL(s.spare1,0), 1) = 0 /* Not locally managed */
      and u.ext#(+)=0
      and u.ts# IS NULL              /* no UET$ entry */
     order by s.ts#,s.file#,s.block#
    ;
   tag varchar2(80):=chr(10)||
     'Problem:  SEG$ entry has no UET$ entries (Dictionary managed)';
   sawType9 boolean:=FALSE;
  begin
   For R in cExtentlessSeg
   Loop
        hout.put_line(' SEG$ has no UET$ entry: TS#='||R.TS#||' RFILE#='||
            R.file#||' BLK#='||R.block#||' TYPE#='||r.type#);
    if (r.type#=9) then
      sawType9:=TRUE;
    end if;
       Fatal:=Fatal+1;
   End Loop;
   if SawType9 then
        hout.put_line(' NB: TYPE#=9 is special and may be OK' );
   end if;
  end;
 --
  procedure SeglessUET is
   Cursor cSeglessUET is  
       select u.ts#, u.segfile#, u.segblock#, count('x') cnt, min(ext#) minext#
     from seg$ s, uet$ u
    where s.ts#(+)=u.ts#
      and s.file#(+)=u.segfile#
      and s.block#(+)=u.segblock#
      and s.ts# IS NULL              /* no SEG$ entry */
     group by u.ts#,u.segfile#,u.segblock#
    ;
   tag varchar2(80):=chr(10)||
     'Problem:  UET$ entry has no SEG$ entries (Dictionary managed)';
  begin
   For R in cSeglessUET
   Loop
        hout.put_line(' UET$ has no SEG$ entry: TS#='||R.TS#||' SegFILE#='||
            R.segfile#||' SegBLK#='||R.segblock#||' Count='||
            r.cnt||' MinExt#='||R.minext#);
       Fatal:=Fatal+1;
   End Loop;
  end;
 --
  procedure FetUet is
   Cursor cTS is
    select ts# from ts$
     where online$!=3     /* !=Invalid*/
       and bitmapped=0    /* dictionary managed */
   ;
  begin
   For R in cTS
   Loop
     FetUet(R.TS#);
   End Loop;
  End;
 --
  procedure BadInd$ is
   Cursor cBadInd is
       select o.obj# OBJ#, u.name OWNER, o.name NAME
         from user$ u, obj$ o, ind$ i
    where u.user#=o.owner#
      and o.type#=1 /* INDEX */
      and o.obj#=i.obj#(+)
      and i.obj# is null;
   tag varchar2(80):=chr(10)||
     'Problem:  OBJ$ INDEX entry has no IND$ entry';
  begin
   For R in cBadInd
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     if (R.name='I_OBJAUTH1') then
    tag:=' (Possibly Bug:273956)';
     end if;
     hout.put_line(' INDEX has no IND$ entry: Obj='||R.obj#||' '||
            R.owner||'.'||R.name||tag);
     tag:=null;
     Fatal:=Fatal+1;
   End Loop;
  end;
 --
  procedure BadTab$ is
   Cursor cBadTab is
       select o.obj# OBJ#, u.name OWNER, o.name NAME
         from user$ u, obj$ o, tab$ i
    where u.user#=o.owner#
      and o.type#=2 /* TABLE */
      and o.linkname is null
      and o.obj#=i.obj#(+)
      and i.obj# is null;
   tag varchar2(80):=chr(10)||
     'Problem:  OBJ$ TABLE entry has no TAB$ entry';
  begin
   For R in cBadTab
   Loop
     if (R.name!='DR$DBO') then
      if (tag is not null) then hout.put_line(tag); tag:=null; end if;
      hout.put_line(' TABLE has no TAB$ entry: Obj='||R.obj#||' '||
            R.owner||'.'||R.name);
     end if;
     Fatal:=Fatal+1;
   End Loop;
  end;
 --
  procedure OnlineRebuild$ is
   Cursor cBadInd is
       select o.obj# OBJ#, u.name OWNER, o.name NAME, o.dataobj# O_ID,
        i.dataobj# I_ID
         from user$ u, obj$ o, ind$ i
    where u.user#=o.owner#
      and o.type#=1 /* INDEX */
      and o.obj#=i.obj#
         and o.dataobj# != i.dataobj#
   ;
   tag varchar2(80):=chr(10)||
     'Problem:  OBJ$.DATAOBJ# != IND.DATAOBJ# (See Note:125149.1)';
  begin
   For R in cBadInd
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' '||R.owner||'.'||R.name||' OBJ$.DATAOBJ#='||R.o_id||
            'IND$.DATAOBJ#='||R.i_id);
     Fatal:=Fatal+1;
   End Loop;
  end;
 --
  procedure bug1584155 is
   Cursor cbug1584155 is
     select u.name owner, o.name name , a.name attr
      from user$ u, obj$ o, type$ t, attribute$ a, type$ att
      where u.user#=o.owner#
      and o.oid$ = t.toid
      and o.type# <> 10 -- must not be invalid
      and bitand(t.properties, 2048) = 0 -- not system-generated
      and t.toid = a.toid
      and t.version# = a.version#
      and a.attr_toid = att.toid(+)
      and a.attr_version# = att.version#(+)
      and att.toid is null
    ;
   tag varchar2(80):=chr(10)||
     'Problem:  Bad ATTRIBUTE$.ATTR_TOID entries Bug:1584155';
  begin
   For R in cbug1584155
   Loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' '||R.owner||'.'||R.name||' ATTR_NAME='||R.attr);
     Fatal:=Fatal+1;
   End Loop;
  end;
 --
  Function IsLastPartition( o number ) return boolean is
    n number;
  begin
    select partcnt into n from partobj$ where obj#=o;
    if n>1 then return(false); else return(true); end if;
  end;
 --
  procedure bug1360714_Composite is
   Cursor cbadtab is
    select o.obj# part_obj#,
          o.owner#, o.name, o.subname, p.subpartcnt, p.bo# table_obj#
       from obj$ o, tabcompart$ p
       where o.type#=19        /* PARTITION */
         and o.obj#=p.obj#        /* Has subpartitions */
         and p.subpartcnt=0     /* Has No entries in tabsubpart$ */
   ;
   Cursor cbadidx is
      select o.obj# part_obj#,
          o.owner#, o.name, o.subname, p.subpartcnt, p.bo# index_obj#
       from obj$ o, indcompart$ p
       where o.type#=20        /* INDEX PARTITION */
         and o.obj#=p.obj#        /* Has subpartitions */
         and p.subpartcnt=0     /* Has No entries in indsubpart$ */
   ;
   tag varchar2(80):=chr(10)||
     'Problem:  Missing TABSUBPART$ entry/s - possibly Bug:1360714';
   showmsg boolean:=false;
  Begin
   for R in Cbadtab
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' TABLE '||Owner(R.owner#)||'.'||R.name||
           ' Partition '||R.subname||
           ' PartObj#='||r.part_obj#||' TabObj#='||R.table_obj#);
     if IsLastPartition( R.table_obj# ) then
         hout.put_line(' ^^ PARTOBJ$.PARTCNT<=1 - non standard corruption');
     end if;
     Fatal:=Fatal+1;
   end loop;
   for I in Cbadidx
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' INDEX '||Owner(I.owner#)||'.'||I.name||
           ' Partition '||I.subname||
           ' PartObj#='||I.part_obj#||' IndObj#='||I.index_obj#);
     if IsLastPartition( I.index_obj# ) then
         hout.put_line(' ^^ PARTOBJ$.PARTCNT<=1 - non standard corruption');
     end if;
     Fatal:=Fatal+1;
     showmsg:=true;
   end loop;
   if showmsg then
     hout.put_line('There are probably orphaned SEG$ entry/s with this');
   end if;
  End;
--
  procedure bug7509714_Composite is
   Cursor cPartSubpart is
     select po.obj# obj#, u.name owner, o.name name, decode(o.type#, 1, 'INDEX', 'TABLE') type,
       decode(po.parttype, 1, 'RANGE', 2, 'HASH', 3, 'SYSTEM', 4, 'LIST',
       'UNKNOWN') part,
       decode(mod(po.spare2, 256), 0, 'NONE', 2, 'HASH', 3, 'SYSTEM', 4,
       'LIST', 'UNKNOWN') subpart
     from   partobj$ po, obj$ o, user$ u
     where  po.obj#    = o.obj#
     and    o.owner#   = u.user#
     and    po.spare2 != 0
     and    o.type#    = 1 -- Index
     and    decode(po.parttype, 1, 'RANGE', 2, 'HASH', 3, 'SYSTEM', 4, 'LIST',
       'UNKNOWN') != decode(mod(po.spare2, 256), 0, 'NONE', 2, 'HASH', 3,
       'SYSTEM', 4, 'LIST', 'UNKNOWN') ;
   tag varchar2(80):=chr(10)||
     'Warning:  TABPART/TABSUBPART method mismatch - may hit Bug:7509714';
  Begin
   for R in cPartSubpart
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(
       rpad(' INDEX '||R.owner||'.'||R.name,62,' ') ||
       ' (OBJ '||R.obj#||')'
     ) ;
     Warn:=Warn+1 ;
   End Loop ;
  End ;
 --
  procedure bug1362374_trigger is
   Cursor ctrig is
    select count('x') cnt from trigger$
     where sys_evts IS NULL
        or nttrigcol IS NULL
     having count('x') > 0;
   tag varchar2(80):=chr(10)||
     'Problem:  NULL SYS_EVTS/NTTRIGCOL - Bug:1362374 / Note:131528.1';
  Begin
   for R in CTrig
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' TRIGGER$ has '||R.cnt||' NULL entries');
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure TinyFiles is
   Cursor ctiny is
    select file#, ts#, blocks from file$
     where status$=2 and blocks<=1;
   tag varchar2(80):=chr(10)||
     'Problem:  Tiny File size in FILE$ - Bug:1646512 ?';
  Begin
   for R in CTiny
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' FILE$ FILE#='||R.file#||' has BLOCKS='||R.blocks);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure bug1365707_badobj is
   Cursor cBad is
    select obj#, type#, name from obj$
     where type#=0 and name!='_NEXT_OBJECT';
   tag varchar2(80):=chr(10)||
     'Problem:  Bad OBJ$ entry with TYPE#=0 - see Bug:1365707';
  Begin
   for R in CBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ$ OBJ#='||R.OBJ#||' TYPE#=0 NAME='||R.name);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure bug1842429_badview is
   Cursor cBad is
    select o.obj#, owner#, name from obj$ o, view$ v
     where o.type#=4
       and o.oid$ is not null
       and v.obj#=o.obj#
           and bitand(v.property,1)=0
   ;
   tag varchar2(80):=chr(10)||
     'Problem:  OBJ$.OID$ set for a VIEW - see Note:157540.1 / Bug:1842429';
  Begin
   for R in CBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ$ OBJ#='||R.OBJ#||' Owner='||Owner(R.owner#)||
            ' NAME='||R.name);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure TabPartCountMismatch is
   Cursor cPartObj is
    select o.obj#, o.owner#, o.name,
        t.property, p.partcnt, bitand(p.spare2,255) comp
      from obj$ o, tab$ t, partobj$ p
     where o.type#=2         /* table */
       and o.dataobj# is null
       and o.obj#=t.obj#
       and bitand(t.property,32)=32    /* partitioned table */
       and o.obj#=p.obj#(+)
   ;
   tag varchar2(80):=chr(10)||'Problem:  OBJ$-PARTOBJ$-<TABPART$ mismatch';
   cnt number;
  Begin
   for R in cPartObj
   loop
-- no partitions
     if R.partcnt is null then
       if (tag is not null) then hout.put_line(tag); tag:=null; end if;
       hout.put_line(' OBJ$ has no PARTOBJ$ OBJ#='||R.OBJ#||' NAME='||R.name);
       Fatal:=Fatal+1;
     else
       if (R.comp=0 /*not composite*/) then
         select count('x') into cnt from tabpart$ where bo#=R.obj#;
-- partcnt = 1048575 for interval partitioning tables
         if ( R.partcnt != cnt and R.partcnt != 1048575 ) then
           if (tag is not null) then hout.put_line(tag); tag:=null; end if;
           hout.put_line(' PARTOBJ$ PARTCNT!=num TABPART$ rows OBJ#='||R.OBJ#||
        ' NAME='||R.name||' PARTCNT='||R.partcnt||' CNT='||cnt);
           Fatal:=Fatal+1;
         end if;
     -- Check OBJ$ for the tabpart$ rows match up
     for Pobj in (select o.obj#,o.name,o.subname,o.type# , o.owner#
            from obj$ o, tabpart$ p
               where o.obj#=p.obj#
             and p.bo#=R.obj#)
     loop
           if Pobj.name!=R.name
        OR Pobj.type#!=19
        OR Pobj.owner#!=R.owner#
       then
             if (tag is not null) then hout.put_line(tag); tag:=null; end if;
             hout.put_line(
        ' TABPART$-OBJ$ mismatch (Bug:1273906)'||
        ' OBJ#='||Pobj.obj#||
        ' #'||Pobj.owner#||'.'||Pobj.name||' '||Pobj.subname);
             if Pobj.name!=R.name then
               hout.put_line(
        '  - Table Name ('||R.name||') != '||
        ' Partition Name ('||Pobj.name||')' );
         end if ;
             if Pobj.owner#!=R.owner# then
               hout.put_line(
        '  - Table Owner# ('||R.owner#||') != '||
        ' Partition Onwer# ('||Pobj.owner#||')' );
         end if ;
             if Pobj.type#!=19 then
               hout.put_line(
        '  - Partition Type# ('||Pobj.type#||')!=19' );
         end if ;
             Fatal:=Fatal+1;
           end if;
     end loop;
       elsif (R.comp=2 /*hash composite*/) then
         select count('x') into cnt from tabcompart$ where bo#=R.obj#;
         if ( R.partcnt != cnt and R.partcnt != 1048575 ) then
--       if R.partcnt!=cnt then
           if (tag is not null) then hout.put_line(tag); tag:=null; end if;
           hout.put_line(' PARTOBJ$ PARTCNT!=num TABCOMPART$ rows OBJ#='||
        R.OBJ#||
        ' NAME='||R.name||' PARTCNT='||R.partcnt||' CNT='||cnt);
           Fatal:=Fatal+1;
         end if;
       end if;
     end if;
   end loop;
  End;
 --
  procedure MissingSum$ is
   Cursor cBad is
    select t.obj#,o.owner#,o.name
          from tab$ t, obj$ o, sum$ s
         where bitand(t.flags,262144)=262144     /* Container table */
          and o.obj#=t.obj#
           and s.containerobj#(+)=t.obj#
       and s.containerobj# is null
    ;
   tag varchar2(80):=chr(10)||
    'Problem:  SUM$ entry missing for container table';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' TAB$ OBJ#='||R.OBJ#||' '||Owner(R.owner#)||'.'||R.name);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure MissingDir$ is
   Cursor cBad is
        select o.obj# o_obj, o.owner# o_owner, o.name o_name, d.obj# d_obj,
               oa.grantee# oa_grantee, oa.privilege# oa_priv, u.name u_name
        from   obj$ o, dir$ d, objauth$ oa, user$ u
        where  o.obj# = d.obj# (+)
        and    o.obj# = oa.obj# (+)
        and    o.owner# = u.user#
        and    o.type# = 23
        and    d.obj# is null ;
   tag varchar2(80):=chr(10)||
    'Problem:  DIR$ entry missing for Directory Objects';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ$ OBJ#='||R.o_obj||' Owner='||R.u_name||'.'||
       R.o_name||' - Grantee('||R.oa_grantee||') - Priv ('||
       R.oa_priv||')');
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure BadSegFreelist is
   Cursor cBad is
    select ts#,file#,block#,type#,lists,groups
      from seg$
         where lists=1 or groups=1;
   tag varchar2(80):=chr(10)||
    'Problem:  SEG$ bad LISTS/GROUPS (==1) - See Tar:2470806.1';
   tag2 varchar2(80):=
    'May be Ok for LOBSEGMENT/SECUREFILE in release 11gR1+' ;
-- select SEGMENT_TYPE, SEGMENT_SUBTYPE
-- from   sys_dba_segs
-- where  tablespace_id = R.TS#
-- and    header_file   = R.RFILE#
-- and    header_block  = R.BLK# ;
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     if (tag2 is not null) then hout.put_line(tag2); tag2:=null; end if;
     hout.put_line(' Bad SEG$ lists/groups : TS#='||R.TS#||' RFILE#='||
            R.file#||' BLK#='||R.block#||' TYPE#='||r.type#||
            ' Lists='||R.lists||' Groups='||R.groups);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure Bug1805146DroppedFuncIdx is
    Cursor cBad is
      select distinct u.name owner, o.name tab
        from user$ u, obj$ o, col$ c
      where o.type#=2
        and c.col#=0
        and bitand(32768,c.property)=32768
        and o.obj#=c.obj#
        and u.user#=o.owner#
        and u.user#!=0;
   tag varchar2(80):=chr(10)||
    'Problem:  Table with Dropped Func Index '||
    ' - Bug:1805146 / Note:148740.1';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' Table='||R.owner||'.'||R.tab);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure BadPublicObjects is
   Cursor cPub is
    select obj#,name,type# from obj$
         where owner#=1 and type# not in (5,10);
   tag varchar2(80):=chr(10)||
    'Problem:  Objects owned by PUBLIC - Bug:1762570';
  Begin
   for R in cPub
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ$ OBJ#='||R.OBJ#||' TYPE='||R.type#||' NAME='||R.name);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure Bug1375026Seq is
   Cursor cSeq is
     select increment$ from seq$ s , obj$ o
      where o.name='IDGEN1$' and owner#=0
        and s.obj#=o.obj#
        and increment$>50;
   tag varchar2(80):=chr(10)||
    'Problem:  Sequence IDGEN1$ INCREMENT_BY too high - Bug:1375026';
  Begin
   for R in cSeq
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure Bug1359472BadOwner is
   Cursor cBad is
    select obj#, type#, owner#, name from obj$
     where owner# not in (select user# from user$)
       and type# != 10;
   tag varchar2(80):=chr(10)||
    'Problem:  OBJ$.OWNER# not in USER$ - See Note:333181.1 (Bug:1359472)';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ$ OBJ#='||R.OBJ#||' TYPE='||R.type#||' NAME='||R.name
        ||' Owner#='||R.OWNER#);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure Bug6310840audit is
   Cursor cBad is
        select decode(aud.user#,
                      0, 'ANY CLIENT',
                      client.name)     username ,
               proxy.name              proxyname,
               prv.name                privilege,
               decode(aud.success,
                      1, 'BY SESSION',
                      2, 'BY ACCESS' ,
                      'NOT SET')       success  ,
               decode(aud.failure,
                      1, 'BY SESSION',
                      2, 'BY ACCESS' ,
                      'NOT SET')       failure
          from sys.user$               client   ,
               sys.user$               proxy    ,
               system_privilege_map    prv      ,
               sys.audit$              aud
         where aud.option# = -prv.privilege
           and aud.user#   = client.user#
           and aud.user#  != 1               /* PUBLIC */
           and aud.proxy#  = proxy.user# (+)
           and aud.proxy# is null
   ;
   tag varchar2(80):=chr(10)||
    'Problem:  INV/CORR audit$ entry - Note:455565.1 (Bug 6351123 / Bug 6310840)';
   variant varchar2(30) ;
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     if (R.username = 'ANY CLIENT')
     then
       variant := 'Corrupted -' ;
     else
       variant := 'Invalid   -' ;
     end if;
     hout.put_line(variant||' USER#='''||R.username||''' OPTION='''||
                   R.privilege||''' SUCCESS='''||R.success||''' FAILURE='''||
                   R.failure||'''');
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure Bug2371453synonym is
   Cursor cBad is
     select distinct o.obj#, o.owner#, o.name
       from obj$ o , idl_ub1$ i
      where type#=5
        and ctime!=mtime
        and i.obj#=o.obj#    /* Has IDL information */
     ;
   tag varchar2(80):=chr(10)||
    'Warning:  Synonym LAST_DDL_TIME!=CREATED - May hit Bug:2371453';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ#='||R.OBJ#||' Name='||Owner(R.owner#)||'.'||R.name);
     Warn:=Warn+1;
   end loop;
  End;
 --
  procedure ObjSynMissing is
   Cursor cBad is
     select o.obj#, o.owner#, o.name
       from obj$ o , syn$ s
      where o.type#=5
        and o.obj#=s.obj#(+)    
    and o.linkname is null /* Not a remote object */
    and s.obj# is null
     ;
   tag varchar2(80):=chr(10)||
    'Warning:  SYN$ entry missing for OBJ$ type#=5';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ#='||R.OBJ#||' Name='||Owner(R.owner#)||'.'||R.name);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure CheckDual is
   Cursor cBad is
     select dummy from dual;
   tag varchar2(80):=chr(10)||
    'Fatal:  DUAL is unusual';
   n number:=0;
  Begin
   for R in cBad
   loop
     n:=n+1;
     if (n>1) then
       hout.put_line(chr(10)||'DUAL has more than one row');
       Fatal:=Fatal+1;
       exit;
     end if;
     if (nvl(R.dummy,'Z')!='X') then
       hout.put_line(chr(10)||'DUAL . DUMMY does not contain "X"');
       Fatal:=Fatal+1;
     end if;
   end loop;
  End;
 --
  procedure Bug2728624badOid is
    Cursor cBad is
      select o.obj#, o.type#, o.owner#, o.name, c.col#, c.intcol#, c.name cname, t.property, bitand(t.property,4096) bp4096
      from   obj$ o, col$ c, coltype$ ct, oid$ oi, tab$ t
      where  o.obj#     = ct.obj#
      and    ct.obj#    = c.obj#
      and    ct.col#    = c.col#
      and    ct.intcol# = c.intcol#
      and    oi.oid$(+) = ct.toid
      and    o.obj#     = t.obj#(+)
      and    c.name  like 'SYS_NC%'
      and    oi.oid$ is null ;
    tag varchar2(80):=chr(10)||
    'Problem:  Column type is OBJECT with missing OID$ - Bug:2728624 ?';
  Begin
   for R in cBad
   loop
     if (R.bp4096 is Null or R.bp4096=0)
     then
       if (tag is not null) then hout.put_line(tag); tag:=null; end if;
       hout.put_line(' OBJ#='||R.OBJ#||' Name='||Owner(R.owner#)||'.'||R.name||
          ' IntCol#('||R.intcol#||')='||R.cname||' TabProp='||R.property);
       hout.put_line(' ^ May be Ok ('||R.bp4096||')') ;
       Warn:=Warn+1;
     else
       if (tag is not null) then hout.put_line(tag); tag:=null; end if;
       hout.put_line(' OBJ#='||R.OBJ#||' Name='||Owner(R.owner#)||'.'||R.name||
          ' IntCol#='||R.intcol#||'='||R.cname||' TabProp='||R.property||' ('||R.bp4096||')');
       Fatal:=Fatal+1;
     end if ;
   end loop;
  End;
 --
  procedure Bug3532977source is
   Cursor cBad is
    select count('x') cnt, count(distinct s.obj#) nobj
      from source$ s, obj$ o
     where s.obj#=o.obj#(+)
      and o.obj# is null
     having count('x') > 0
      ;
   tag varchar2(80):=chr(10)||
    'Problem:  SOURCE$ for OBJ# not in OBJ$ - Bug:3532977 ?';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' SOURCE$ has '||R.cnt||
    ' rows for '||R.nobj||' OBJ# values not in OBJ$');
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure Bug2405258lob is
   Cursor cBad is
    select l.obj#, l.lobj#
      from lob$ l, obj$ o
     where l.lobj#=o.obj#(+)
      and o.obj# is null
     ;
   tag varchar2(80):=chr(10)||
    'Problem:  LOB$ . LOBJ# not in OBJ$ - Bug:2405258 ?';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' LOB$.LOBJ# has no OBJ$ entry for LOBJ#='||R.lobj#||
    ' (OBJ#='||R.obj#||')');
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure UpgCheckc0801070 is
   tag varchar2(80):=chr(10)||
    'Problem:  option# in STMT_AUDIT_OPTION_MAP(ON COMMIT REFRESH) - '||
    'Bug:6636804 ';
   bug6636804 number ;
  Begin
   Select count('x') into bug6636804 from STMT_AUDIT_OPTION_MAP
   where  option# = 229
   and    name    = 'ON COMMIT REFRESH';

if ( bug6636804 > 0 )
   then
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;

hout.put_line('-- Please run the following:') ;
     hout.put_line('SQL> update STMT_AUDIT_OPTION_MAP set option#=234') ;
     hout.put_line('     where name =''ON COMMIT REFRESH'' ;') ;
     hout.put_line('SQL> commit ;') ;

Fatal:=Fatal+1;

end if ;
  End;
 --
  procedure Bug3753873indpname is
   Cursor cBad is
    select io.obj# io, io.name ionam, ipo.obj# ipo, ipo.name iponam
     from obj$ io , indpart$ ip,  obj$ ipo
    where ipo.type#=20  /* IND PART */
      and ip.obj#=ipo.obj#
      and io.obj#(+)=ip.bo#
      and nvl(io.name,'"')!=ipo.name
    ;
   tag varchar2(80):=chr(10)||
    'Problem:  OBJ$.NAME mismatch for INDEX v INDEX PARTITION - Bug:3753873 ?';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' Ind Part OBJ$.OBJ# '||R.ipo||' '||R.iponam||
        '!='||R.ionam||' OBJ#='||R.io);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure BadCboHiLo is
   Cursor cBad is
    select obj#,intcol#,lowval,hival
     from hist_head$ where lowval>hival
    ;
   tag varchar2(80):=chr(10)||'Problem:  HIST_HEAD$.LOWVAL > HIVAL !';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ# '||R.obj#||' INTCOL#='||R.intcol#);
     Warn:=Warn+1;
   end loop;
  End;
 --
  procedure ObjectNames is
   Cursor cBad is
    select username, object_type,
        substr(owner||'.'||object_name,1,62) Name
        from dba_objects, dba_users
         where object_name=username
          and (owner=username OR owner='PUBLIC')
    ;
   tag varchar2(80):=chr(10)||
    'Warning:  OBJECT name clashes with SCHEMA name - Bug:2894111 etc..';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' Schema='||R.username||' Object='||R.name||' ('||
        R.object_type||')');
     Warn:=Warn+1;
   end loop;
  End;
 --
  procedure BadDepends is
   Cursor cBad is
        select o.obj#          dobj        ,
               p.obj#          pobj        ,
               d.p_timestamp   p_timestamp ,
               p.stime         p_stime     ,
               o.type#         o_type      ,
               p.type#         p_type
          from sys.obj$        o           ,
               sys.dependency$ d           ,
               sys.obj$        p
         where p_obj#   = p.obj# (+)
           and d_obj#   = o.obj#
           and o.status = 1                    /*dependent is valid*/
           and p.status = 1                       /*parent is valid*/
           and p.stime !=d.p_timestamp /*parent timestamp not match*/
          order by 2,1
        ;
   tag varchar2(80):=chr(10)||
    'Problem:  Dependency$ p_timestamp mismatch for VALID objects';
   tag2 varchar2(80):=
    'May be Ok - needs checking, (Warning: [W], Error: [E]).'||chr(10) ;
   to_chk varchar2 (4) ;
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     if (tag2 is not null) then hout.put_line(tag2); tag2:=null; end if;
     if ( (R.o_type = 5) and (R.p_type = 29) )
     then
       to_chk := '[W]'  ;
       Warn   := Warn+1 ;
     else
       to_chk := '[E]' ;
       Fatal  := Fatal+1 ;
     end if ;
     hout.put_line(' '||to_chk||' - P_OBJ#='||R.pobj||' D_OBJ#='||R.dobj);
   end loop;
  End;
 --
  procedure BadCol# is
   Cursor cBad is
    select o.obj# , max(intcol#) maxi, max(col#) maxc
        from sys.col$ o
         group by o.obj#
        having max(intcol#)>1000 or max(col#)>999
    ;
   tag varchar2(80):=chr(10)||
    'Problem:  COL$ intcol#/col# too high (bug 2212987)';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ#='||R.obj#||' max(intcol#)'||R.maxi||
        ' max(col#)='||R.maxc);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure ChkIotTS is
   Cursor cBad is
    select o.owner#, o.obj# , o.name , t.ts#, t.file#, t.block#
        from sys.obj$ o, sys.tab$ t
     where bitand(t.property,64)=64    /* Marked as an IOT */
       and ts#!=0
       and o.obj#=t.obj#
    ;
   tag varchar2(80):=chr(10)||
    'Problem:  IOT tab$ has TS#!=0 ?? May be OK - needs checking';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(
    ' OBJ#='||R.obj#||' ('||Owner(R.owner#)||'.'||r.name||') '||
        ' TS#='||R.ts#||' f='||R.file#||' b='||r.block#
     );
     Warn:=Warn+1;
   end loop;
  End;
 --
  procedure DuplicateDataobj is
   Cursor cBad is
        select * from
        (
        select /*+ NO_MERGE */ many.dataobj#, o.obj#, o.owner#,
                o.name, o.subname,
                o.type#, t.property
          from ( select dataobj#
                   from obj$
                  where dataobj# is not null
                  group by dataobj#
                 having count('x')>1) many, obj$ o, tab$ t
         where many.dataobj# = o.dataobj#(+)
           and o.type# (+)  != 3                       /* Not a cluster */
           and t.obj#  (+)   = o.obj#
        )
        where bitand(property, 1024)!=1024      /* Not a cluster table  */
        and   bitand(property, 64)!=64          /* Not an IOT           */
--       or property is null                    /* IOT Part's fall here */
        order by dataobj#, obj#
   ;
   tag1 varchar2(80):=chr(10)||
    'Problem:  Duplicate DATAOBJ#, may be valid under the following:';
   tag2 varchar2(80):=chr(10)||
    '          - Using Transportable Tablespaces' ;
   tag3 varchar2(80):=chr(10)||
    '          - OBJ''s belong to different tablespaces' ;
   sub boolean:=false;
  Begin
   for R in cBad
   loop
     if (tag1 is not null) then
        hout.put_line(tag1);
        hout.put_line(tag2);
        hout.put_line(tag3);
        tag1:=null;
        tag2:=null;
        tag3:=null;
     end if;
     hout.put_line(' DATAOBJ#='||R.DATAOBJ#||' OBJ#='||R.obj#||
    ' Name='||Owner(R.owner#)||'.'||R.name||' '||R.subname||
        ' Type#='||R.type#);
     if (R.type#=34 /*table subpart*/) then
    sub:=true;
     end if;
     Fatal:=Fatal+1;
   end loop;
   if sub then
     hout.put_line(' Subpartition duplicates could be caused by bug:2597763');
   end if;
  End;
 --
  procedure ObjSeqMissing is
   Cursor cBad is
     select o.obj#, o.owner#, o.name
       from obj$ o , seq$ s
      where o.type#=6
        and o.obj#=s.obj#(+)    
    and o.linkname is null    /* Not remote */
    and s.obj# is null
     ;
   tag varchar2(80):=chr(10)||
    'Warning:  SEQ$ entry missing for OBJ$ type#=6';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ#='||R.OBJ#||' Name='||Owner(R.owner#)||'.'||R.name);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure badIcolDepCnt is
   Cursor cBad is
    select i.obj# , nvl(i.spare1,i.intcols) expect, ic.cnt got
      from ind$ i,
       (select obj#, count('x') cnt from icoldep$ group by obj# ) ic
     where ic.obj#=i.obj#
      and ic.cnt!=nvl(i.spare1,i.intcols)
    ;
   tag varchar2(80):=chr(10)||
    'Error:  ICOLDEP$ count!=IND$ expected num dependencies - bug 5217913';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' OBJ#='||R.OBJ#||' '||ObjName(R.obj#)||
    ' IND$ expects '||R.expect||' ICOLDEP$ has '||R.got);
     Fatal:=Fatal+1;
   end loop;
  End;
 --
  procedure warnIcoldep is
   Cursor cBad is
    select adt.obj#,adt.icobj#, adt.intcol#,adt.name
    from
    ( select c.obj#, ic.obj# icobj#, c.intcol#, c.name
     from col$ c , icoldep$ ic
     where c.type#=121 /*index on ADT*/
      and c.obj#=ic.bo#
      and c.intcol#=ic.intcol#
    ) adt,
    (select c.obj#, c.intcol#, c.name , ic.obj# icobj#
      from col$ c , icoldep$ ic
      where bitand(c.property,33)=33        /* index on ADT attribute */
       and c.obj#=ic.bo#
       and c.intcol#=ic.intcol#
    ) adtattr
    where adt.obj#=adtattr.obj#             /* same table */
      and adt.icobj#=adtattr.icobj#         /* same index */
      and adt.intcol#+1 = adtattr.intcol#   /* likely same ADT/attr */
    order by 1,2
    ;
   tag varchar2(80):=chr(10)||
    'Warning:  ICOLDEP$ may reference ADT and its attributes'||
    ' - see bug 5217913';
  Begin
   for R in cBad
   loop
     if (tag is not null) then hout.put_line(tag); tag:=null; end if;
     hout.put_line(' Index OBJ#='||R.ICOBJ#||' '||ObjName(R.icobj#)||
    ' intcol#='||R.intcol#||'='||R.name);
     Warn:=Warn+1;
   end loop;
  End;
 --
  procedure NosegmentIndex is
   Cursor cWarn is
    select i.obj#, i.dataobj#, i.ts#, i.file#, i.block#, i.bo#, s.type#
          from seg$ s, ind$ i
         where i.ts#=s.ts#(+)
           and i.file#=s.file#(+)
           and i.block#=s.block#(+)
       and bitand(i.flags,4096)=4096  /* Exclude NOSEGMENT index */
        ;
   tag varchar2(80):=chr(10)||
    'Warning: NOSEGMENT IND$ exists (these are allowed but care needed)';
   --
   Procedure CheckIndPart( o number ) is
    Cursor Cchk is
    select  i.obj#, i.dataobj#, i.ts#, i.file#, i.block#
          from indpart$ i
     where i.bo#=o
       and (i.file#!=0 OR i.block#!=0);
   begin
    For R in Cchk Loop
     hout.put_line(' ^- PROBLEM: Child INDPART$ with FILE/BLK (bug 4683380)');
     hout.put_line(' ^- ( OBJ='||R.obj#|| ' DOBJ='||r.dataobj#||
        ' TS='||r.TS#||
        ' RFILE/BLOCK='||r.file#||' '||r.block#||')' );
     Fatal:=Fatal+1;
    end loop;
   end;
  begin
   For R in cWarn
   Loop
       if (tag is not null) then hout.put_line(tag); tag:=null; end if;
       hout.put_line(' NOSEGMENT IND$: OBJ='||R.obj#||
            ' DOBJ='||r.dataobj#||
            ' TS='||r.TS#||
            ' RFILE/BLOCK='||r.file#||' '||r.block#||
            ' BO#='||r.bo#||' SegType='||R.type#);
       if (R.type# is not null) then
    hout.put_line(' ^- PROBLEM: NOSEGMENT Index has a segment attached ?');
        Fatal:=Fatal+1;
       else
        Warn:=Warn+1;
       end if;
       if (r.TS#!=0 or r.file#!=0 or r.block#!=0) then
    hout.put_line(' ^- Index has ts#/file#/block# set ???');
       end if;
       CheckIndPart(R.obj#);
   End Loop;
  End;
 --
  procedure Full is
  begin
    Fatal := 0 ;
        Warn  := 0 ;
        hout.put_line('HCheck Version '||Ver);
       --
    OversizedFiles;
    TinyFiles;
      TabPartCountMismatch;
      bug1360714_Composite;
    bug7509714_Composite;
    OrphanedTabComPart;
      ZeroTabSubPart;
      MissingSum$;
    MissingDir$;
    DuplicateDataobj;
      ObjSynMissing ;
      ObjSeqMissing ;
    --
    OrphanedIndex;
    OrphanedUndo;
    OrphanedIndexPartition;
    OrphanedIndexSubPartition;
    OrphanedTable;
    OrphanedTablePartition;
    OrphanedTableSubPartition;
    MissingPartCol;
    OrphanedSeg$;
    OrphanedIndPartObj#;
    DuplicateBlockUse;
    HighObjectIds;
    PQsequence;
    TruncatedCluster;
    FetUet;
      Uet0Check;
    ExtentlessSeg;
    SeglessUET;
      BadInd$;
      BadTab$;
    BadIcolDepCnt;
    warnIcolDep;
      OnlineRebuild$;
    bug1584155;
      bug1362374_trigger;
      bug1365707_badobj;
      bug1842429_badview;
    Bug1375026Seq;
      Bug1805146DroppedFuncIdx;
      Bug1359472BadOwner;
      Bug6310840audit;
    Bug2728624badOid;
    Bug3532977source;
    Bug2405258lob;
    UpgCheckc0801070;
    Bug3753873indpname;
    --
      BadPublicObjects;
      BadSegFreelist;
    BadCol#;
    BadDepends;
    --
    CheckDual;
      Bug2371453synonym;
      PoorDefaultStorage;
      PoorStorage;
    ObjectNames;
      BadCboHiLo;
    ChkIotTs;
    NoSegmentIndex;
    --
    hout.new_line;
    hout.put_line(chr(10)||'Found '||Fatal||' potential problems and '||
    warn||' warnings');
    hout.new_line;
    if (Fatal>0 or Warn>0) then
      hout.put_line('Contact Oracle Support with the output');
      hout.put_line('to check if the above needs attention or not');
       end if;
  end;
end hcheck;
/
show errors
REM
set serverout on
execute hcheck.full
REM ======================================================================

Oracle数据字典一致性鉴别相关推荐

  1. Oracle数据字典

    Oracle数据字典 前三条比较常用,可以列出数据库中有哪些表,查找某张表的所有字段,列出所有的视图. 1. USER_TABLEs(=TABS) 用户的所有表的信息. 2.USER_TAB_COLU ...

  2. oracle查看字典结构体,Oracle数据字典的实操

    以下的文章主要是介绍Oracle sqlplus命令中用户有效地利用Oracle数据字典的方案,我们大家都知道Oracle数据字典作为数据库的重要的组成部分之一,是随着数据库的产生而产生, 随着数据库 ...

  3. oracle数据字典表与视图

    oracle数据字典表与视图 数据字典是数据的数据,也就是元数据.描述了数据库的物理与逻辑存储与相应的信息.模式中对象的定义信息,安全信息,完整性约束信息,和部分的性能监控信息等.数据字典表 与视图存 ...

  4. 《Oracle数据库管理与维护实战》——2.11 Oracle数据字典

    本节书摘来自异步社区出版社<Oracle数据库管理与维护实战>一书中的第2章,第2.11节,作者: 何伟娜 , 常建功,更多章节内容可以访问云栖社区"异步社区"公众号查 ...

  5. Oracle 数据字典表 -- SYS.COL$

    一. 数据字典表SYS.COL$ 说明 Oracle 的数据字典分两类,一个数据字典表,另一个是数据字典视图. 数据字典表里的数据是Oracle系统存放的系统数据,而普通表存放的是用户的数据.为了方便 ...

  6. Oracle数据字典中查看约束信息/约束相关笔记

    1.我们创建的对象可以从"USER_"开通的视图中查看.如果在模式中创建了10张表,那么从USER_TABLES中查询将返回10行,每一行是关于一张表的特性信息 USER_TABL ...

  7. Oracle数据字典全解 (1)

    Oracle数据字典全解 2011-08-18 20:59:41|  分类: Oracle |  标签:oracle   |字号 订阅 一.概念: 1.数据字典(data dictionary)是 O ...

  8. Oracle数据字典使用

    Oracle数据字典使用 一.数据字典 二.数据字典相关查询 1. 查询用户 2.查询 表空间 (拥有DBA权限的用户才能查询) 3.查询数据库对象(拥有DBA权限的用户才能查询) 4.查询表.[^1 ...

  9. oracle通过数据字典查看序列,oracle数据字典,oracle字典

    oracle数据字典,oracle字典 一.数据字典 数据字典是oracle存放有关数据库信息的地方,几乎所有的系统信息和对象信息都可在数据字典中进行查询.数据字典是oracle数据库系统的信息核心, ...

最新文章

  1. 多晴转云h_晴转多云图标和多云图标的区别 求专业人员解释并给图
  2. Blend_ControlTemplate(Z)
  3. protobuf3在php中的使用
  4. liunx(3)-内核模块编写与系统调用
  5. 075_JSON.parse()
  6. hadoop的同类技术_Hadoop 气数已尽:逃离复杂性,拥抱云计算
  7. ACM程序设计选修课——1030: Hungar的时尚球场(水题+耐心)
  8. [未来的购碟指南]送给那些以后想收藏真人电影DVD的菜鸟们
  9. MYSQL获取同时关注了某两个(或者N个)用户的用户
  10. 【数据结构笔记29】最小生成树问题:Prim算法与Kruskal算法
  11. html图片上下高度不一样,【已解决】HTML图片横向布局中第一张图片和其他图片高度不一致...
  12. 深度学习 + OpenCV,Python实现实时视频目标检测
  13. c语言编程屏保动画实例,用C语言自己动手制作炫彩电脑屏保
  14. fgo最新服务器,如何看fgo是什么服务器 | 手游网游页游攻略大全
  15. 要如何实现pdf图片提取?可以试试这些方法
  16. PAT 1013 数素数
  17. 如何关闭WPS文字的选项卡显示方式?如何实现多窗口显示?
  18. 推荐三个开发C程序的工具(适用各种场合)
  19. 一个Python的列表参数是如何搞垮一个网站的
  20. 每日学习参考答案(1000-1021)

热门文章

  1. 科学计算机复利现值怎么计算公式,复利现值计算公式
  2. 【WPF】Xaml用户控件(Usercontrol)绑定属性/事件
  3. Python压缩解压--lzma
  4. BGP Dampening Cyrus
  5. 甲骨文大数据利器:内存数据库和一体机
  6. RFC1661中文 ppp协议
  7. Hilt的使用(动态模块)四
  8. mac终端里新建html文件,mac命令行终端怎么创建文件 mac命令行终端创建文件教程...
  9. 小白安装cadence virtuoso
  10. 安卓手机微信数据导出方法 -- adb备份(无需root)