MINI MINI MANI MO

Path : /opt/oracle/product/18c/dbhomeXE/ord/im/admin/
File Upload :
Current File : //opt/oracle/product/18c/dbhomeXE/ord/im/admin/imvalid.sql

Rem
Rem $Header: ordim/admin/imvalid.sql /main/46 2017/08/18 16:02:11 smavris Exp $
Rem 
Rem imvalid.sql
Rem
Rem Copyright (c) 1998, 2017, Oracle and/or its affiliates. 
Rem All rights reserved.
Rem
Rem    NAME
Rem      imvalid.sql - Multimedia validation procedure
Rem
Rem    DESCRIPTION
Rem      This procedure checks the installation of Multimedia
Rem      components and prints the status.
Rem
Rem    NOTES
Rem      This procedure should be created in SYS.
Rem      Before running this procedure, user must be connected
Rem      AS SYSDBA.
Rem     
Rem    BEGIN SQL_FILE_METADATA 
Rem    SQL_SOURCE_FILE: ordim/admin/imvalid.sql 
Rem    SQL_SHIPPED_FILE: ord/im/admin/imvalid.sql
Rem    SQL_PHASE: 
Rem    SQL_STARTUP_MODE: NORMAL
Rem    SQL_IGNORABLE_ERRORS: NONE 
Rem    SQL_CALLING_FILE: ordim/admin/catim.sql;ordim/admin/imupend.sql
Rem    END SQL_FILE_METADATA
Rem
Rem    MODIFIED   (MM/DD/YY)
Rem    smavris     08-18-18 - Don't invalidate ORDIM if DICOM repos documents
Rem                           aren't loaded
Rem    smavris     11-10-15 - Handle duplicate registered XML schemas
Rem    smavris     09-11-15 - Don't check registry$error, check only in imupend
Rem    smavris     12-08-14 - Don't execute validation script in migrate mode -
Rem                           upgrade speed up

@@?/rdbms/admin/sqlsessstart.sql



REM This procedure tests the Multimedia components installation
CREATE OR REPLACE PROCEDURE SYS.validate_ordim 
authid current_user
IS
 l_null char(1);
 b_valid       boolean := TRUE;           -- keep track installation status 
                                          -- TRUE: valid (default), 
                                          -- FALSE: invalid
 l_num_objects integer     :=0;
 l_num_classes integer     :=0;
 l_num_schemas integer     :=0;
 l_num_docs    integer     :=0;
 l_num_roles   integer     :=0;
 l_num_errors  number      :=0;
 err_code NUMBER;
 err_msg  VARCHAR2(100);
 l_prevDbVer varchar2(40);
 l_status  varchar2(100);
 l_dsql_block varchar2(500);
 l_sdo_status varchar2(20) := NULL;
 b_upgradeMode boolean     := FALSE;

BEGIN
  -- Now check whether Multimedia objects are created
  begin
    select count(*) into l_num_objects from sys.obj$ o, sys.user$ u
      where u.name = 'ORDSYS' 
        and u.user# = o.owner#
        and o.type# = 13
        and o.name in 
            ( 'ORDIMAGE', 'ORDAUDIO', 'ORDDOC', 'ORDVIDEO', 'ORDDICOM',
              'SI_COLOR', 'SI_STILLIMAGE', 'SI_AVERAGECOLOR',
              'SI_COLORHISTOGRAM', 'SI_POSITIONALCOLOR', 'SI_TEXTURE',
              'SI_FEATURELIST'
            )
    ;
    
    if ( l_num_objects != 12 ) then
      b_valid := FALSE;
      dbms_output.put_line('ORDIM created ' || l_num_objects || ' objects.');
      dbms_output.put_line('The following objects are not created:');
    
      for r in (
      (
        select 'ORDIMAGE' name from sys.dual
        union
        select 'ORDAUDIO' name from sys.dual
        union
        select 'ORDDOC' name from sys.dual
        union
        select 'ORDVIDEO' name from sys.dual
        union
        select 'ORDDICOM' name from sys.dual
        union
        select 'SI_COLOR' name from sys.dual
        union
        select 'SI_STILLIMAGE' name from sys.dual
        union
        select 'SI_AVERAGECOLOR' name from sys.dual
        union
        select 'SI_COLORHISTOGRAM' name from sys.dual
        union
        select 'SI_POSITIONALCOLOR' name from sys.dual
        union
        select 'SI_TEXTURE' name from sys.dual
        union
        select 'SI_FEATURELIST' name from sys.dual
      )
      minus
      (
        select o.name from sys.obj$ o, sys.user$ u
        where u.name = 'ORDSYS' 
          and u.user# = o.owner#
          and o.type# = 13
          and o.name in 
              ( 'ORDIMAGE', 'ORDAUDIO', 'ORDDOC', 'ORDVIDEO', 'ORDDICOM',
                'SI_COLOR', 'SI_STILLIMAGE', 'SI_AVERAGECOLOR',
                'SI_COLORHISTOGRAM', 'SI_POSITIONALCOLOR', 'SI_TEXTURE',
                'SI_FEATURELIST'
              )
      ) ) loop
        dbms_output.put_line(r.name);
      end loop;

    end if;

  exception
    WHEN NO_DATA_FOUND THEN
      b_valid := FALSE;
      dbms_output.put_line('ORDIM objects are not created.');

    WHEN OTHERS THEN
      b_valid := FALSE;
      err_code := SQLCODE;
      err_msg  := SUBSTR(SQLERRM, 1 , 100); 
      DBMS_OUTPUT.put_line('In validate_ordim OTHER EXCEPTION happens: Error code ' || err_code || ': ' || err_msg);
  end;

  -- Now check whether Multimedia java classes are loaded
  -- The following jars are checked:
  --  mlibwrapper_jai.jar, jai_codec.jar, jai_core.jar, ordimimg.jar
  --  ordimdcm.jar, ordimann.jar 
  begin
    select count(*) into l_num_classes
      from sys.obj$ o, sys.user$ u, sys.javasnm$ j
      where u.name = 'ORDSYS'
        and u.user# = o.owner# 
        and o.type# = 29
        and j.short(+) = o.name
        and nvl(j.longdbcs, o.name) in
            ( 'javax/media/jai/JAI', 'com/sun/media/jai/codec/ImageCodec',
              'com/sun/medialib/mlib/mediaLibImage', 'oracle/ord/media/img/PropsAdapter',
              'oracle/ord/dicom/attr/DicomAttrTag',
              'oracle/ord/media/annotator/servclt/AnnCltInServer'
            )
    ;
    
    if ( l_num_classes != 6 ) then
      b_valid := FALSE;
      dbms_output.put_line('The following ORDIM Java libs are not loaded correctly:');
    
      for r in (
      (
        select 'javax/media/jai/JAI' name, 'jai_core.jar' jar from sys.dual
        union
        select 'com/sun/media/jai/codec/ImageCodec' name, 'jai_codec.jar' jar from sys.dual
        union
        select 'com/sun/medialib/mlib/mediaLibImage' name, 'mlibwrapper_jai.jar' jar from sys.dual
        union
        select 'oracle/ord/media/img/PropsAdapter' name, 'ordimimg.jar' jar from sys.dual
        union
        select 'oracle/ord/dicom/attr/DicomAttrTag' name, 'ordimdcm.jar' jar from sys.dual
        union
        select 'oracle/ord/media/annotator/servclt/AnnCltInServer' name, 'ordimann.jar' jar from sys.dual
      )
      minus
      (
        select nvl(j.longdbcs, o.name) name,
          decode( nvl(j.longdbcs, o.name) , 'javax/media/jai/JAI', 'jai_core.jar',
                    'com/sun/media/jai/codec/ImageCodec', 'jai_codec.jar',
                    'com/sun/medialib/mlib/mediaLibImage', 'mlibwrapper_jai.jar',
                    'oracle/ord/media/img/PropsAdapter', 'ordimimg.jar',
                    'oracle/ord/dicom/attr/DicomAttrTag', 'ordimdcm.jar',
                    'oracle/ord/media/annotator/servclt/AnnCltInServer', 'ordimann.jar') jar
          from sys.obj$ o, sys.user$ u, sys.javasnm$ j
          where u.name = 'ORDSYS'
            and u.user# = o.owner# 
            and o.type# = 29
            and j.short(+) = o.name
            and nvl(j.longdbcs, o.name) in
                ( 'javax/media/jai/JAI', 'com/sun/media/jai/codec/ImageCodec',
                  'com/sun/medialib/mlib/mediaLibImage', 'oracle/ord/media/img/PropsAdapter',
                  'oracle/ord/dicom/attr/DicomAttrTag',
                  'oracle/ord/media/annotator/servclt/AnnCltInServer'
                )
      ) ) loop
        dbms_output.put_line(r.jar);
      end loop;
    end if;

  exception
    WHEN NO_DATA_FOUND THEN
      b_valid := FALSE;
      dbms_output.put_line('ORDIM java classes are not loaded.');

    WHEN OTHERS THEN
      b_valid := FALSE;
      err_code := SQLCODE;
      err_msg  := SUBSTR(SQLERRM, 1 , 100); 
      DBMS_OUTPUT.put_line('In validate_ordim OTHER EXCEPTION happens: Error code ' || err_code || ': ' || err_msg);
  end;
  

  -- Now check whether there are invalid objects
  BEGIN
    SELECT NULL INTO l_null  FROM sys.dba_invalid_objects
    WHERE 
          (owner = 'ORDSYS' 
        OR owner = 'ORDPLUGINS' 
        OR owner = 'SI_INFORMTN_SCHEMA'
        OR owner = 'ORDDATA')
       AND rownum <= 1;

    -- invalid objects found
    b_valid := FALSE;

    FOR ob IN (SELECT o.object_name, o.status, o.object_type 
               FROM sys.dba_invalid_objects o
        WHERE 
              (o.owner = 'ORDSYS' 
            OR o.owner = 'ORDPLUGINS' 
            OR o.owner = 'SI_INFORMTN_SCHEMA'
            OR o.owner = 'ORDDATA')
            AND rownum < 20) LOOP
      dbms_output.put_line ('ORDIM INVALID OBJECTS: ' || ob.object_name || ' - ' || ob.status || ' - ' || ob.object_type);
    END LOOP;

  EXCEPTION                                                                      
    WHEN NO_DATA_FOUND THEN
      -- no valid objects, don't need to do anything
      null;

    WHEN OTHERS THEN
      b_valid := FALSE;
      err_code := SQLCODE;
      err_msg  := SUBSTR(SQLERRM, 1 , 100); 
      DBMS_OUTPUT.put_line('In validate_ordim OTHER EXCEPTION happens: Error code ' || err_code || ': ' || err_msg);
  END; 

  -- Now check whether XML schemas are registered
  begin
    select count(*) into l_num_schemas from sys.all_xml_schemas 
      where owner = 'ORDSYS' 
        and schema_url in 
            (
             'http://xmlns.oracle.com/ord/meta/ordimage',
             'http://xmlns.oracle.com/ord/meta/exif',
             'http://xmlns.oracle.com/ord/meta/iptc',
             'http://xmlns.oracle.com/ord/meta/xmp',
             'http://xmlns.oracle.com/ord/meta/dicomImage',
             'http://xmlns.oracle.com/ord/dicom/rpdatatype_1_0',
             'http://xmlns.oracle.com/ord/dicom/datatype_1_0',
             'http://xmlns.oracle.com/ord/dicom/mddatatype_1_0',
             'http://xmlns.oracle.com/ord/dicom/anonymity_1_0',
             'http://xmlns.oracle.com/ord/dicom/attributeTag_1_0',
             'http://xmlns.oracle.com/ord/dicom/constraint_1_0',
             'http://xmlns.oracle.com/ord/dicom/metadata_1_0',
             'http://xmlns.oracle.com/ord/dicom/mapping_1_0',
             'http://xmlns.oracle.com/ord/dicom/manifest_1_0',
             'http://xmlns.oracle.com/ord/dicom/preference_1_0',  
             'http://xmlns.oracle.com/ord/dicom/privateDictionary_1_0',
             'http://xmlns.oracle.com/ord/dicom/standardDictionary_1_0',
             'http://xmlns.oracle.com/ord/dicom/orddicom_1_0',
             'http://xmlns.oracle.com/ord/dicom/UIDdefinition_1_0',
             'http://xmlns.oracle.com/ord/dicom/protocol_1_0'
          )
    ;
    
    if ( l_num_schemas < 20 ) then
      b_valid := FALSE;
      dbms_output.put_line('ORDIM registered ' || l_num_schemas || ' XML schemas.');
      dbms_output.put_line('The following XML schemas are not registered:');
    
      for r in (
      (
        select 'http://xmlns.oracle.com/ord/meta/ordimage' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/meta/exif' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/meta/iptc' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/meta/xmp' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/meta/dicomImage' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/rpdatatype_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/datatype_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/mddatatype_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/anonymity_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/attributeTag_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/constraint_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/metadata_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/mapping_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/manifest_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/preference_1_0' schema_url from sys.dual  
        union
        select 'http://xmlns.oracle.com/ord/dicom/privateDictionary_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/standardDictionary_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/orddicom_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/UIDdefinition_1_0' schema_url from sys.dual
        union
        select 'http://xmlns.oracle.com/ord/dicom/protocol_1_0' schema_url from sys.dual
      )
      minus
      (
        select schema_url from sys.all_xml_schemas 
          where owner = 'ORDSYS' 
            and schema_url in 
                (
                 'http://xmlns.oracle.com/ord/meta/ordimage',
                 'http://xmlns.oracle.com/ord/meta/exif',
                 'http://xmlns.oracle.com/ord/meta/iptc',
                 'http://xmlns.oracle.com/ord/meta/xmp',
                 'http://xmlns.oracle.com/ord/meta/dicomImage',
                 'http://xmlns.oracle.com/ord/dicom/rpdatatype_1_0',
                 'http://xmlns.oracle.com/ord/dicom/datatype_1_0',
                 'http://xmlns.oracle.com/ord/dicom/mddatatype_1_0',
                 'http://xmlns.oracle.com/ord/dicom/anonymity_1_0',
                 'http://xmlns.oracle.com/ord/dicom/attributeTag_1_0',
                 'http://xmlns.oracle.com/ord/dicom/constraint_1_0',
                 'http://xmlns.oracle.com/ord/dicom/metadata_1_0',
                 'http://xmlns.oracle.com/ord/dicom/mapping_1_0',
                 'http://xmlns.oracle.com/ord/dicom/manifest_1_0',
                 'http://xmlns.oracle.com/ord/dicom/preference_1_0',  
                 'http://xmlns.oracle.com/ord/dicom/privateDictionary_1_0',
                 'http://xmlns.oracle.com/ord/dicom/standardDictionary_1_0',
                 'http://xmlns.oracle.com/ord/dicom/orddicom_1_0',
                 'http://xmlns.oracle.com/ord/dicom/UIDdefinition_1_0',
                 'http://xmlns.oracle.com/ord/dicom/protocol_1_0'
              )
      ) ) loop
        dbms_output.put_line(r.schema_url);
      end loop;

    end if;

  exception
    WHEN NO_DATA_FOUND THEN
      b_valid := FALSE;
      dbms_output.put_line('ORDIM XML schemas are not registered.');

    WHEN OTHERS THEN
      b_valid := FALSE;
      err_code := SQLCODE;
      err_msg  := SUBSTR(SQLERRM, 1 , 100); 
      DBMS_OUTPUT.put_line('In validate_ordim OTHER EXCEPTION happens: Error code ' || err_code || ': ' || err_msg);
  end;

  -- Now check whether DICOM ORDADMIN role is created
  begin
    SELECT count(*) INTO l_num_roles  FROM sys.user$ u
    WHERE type# = 0 and name = 'ORDADMIN';

    if ( l_num_roles != 1 ) then
      b_valid := FALSE;
      dbms_output.put_line('ORDIM DICOM administrator role ORDADMIN is not created.');
    end if;

  exception                                                                      
    when no_data_found then
      b_valid := FALSE;
      dbms_output.put_line('ORDIM DICOM administrator role ORDADMIN is not created.');

    when others then
      b_valid := FALSE;
      err_code := SQLCODE;
      err_msg  := SUBSTR(SQLERRM, 1 , 100); 
      DBMS_OUTPUT.put_line('In validate_ordim OTHER EXCEPTION happens: Error code ' || err_code || ': ' || err_msg);
  end; 

  -- Check whether Locator is valid if SDO is not installed or is OPTION OFF
  -- by checking whether there are invalid objects under MDSYS
  BEGIN
    l_sdo_status := SYS.dbms_registry.status('SDO');
    if (l_sdo_status is NULL or l_sdo_status = 'OPTION OFF' or
        l_sdo_status = 'REMOVED') then
      SELECT NULL INTO l_null  FROM sys.dba_invalid_objects
      WHERE 
            owner = 'MDSYS' 
        AND rownum <= 1;

      -- invalid objects found
      b_valid := FALSE;

      FOR ob IN (SELECT o.object_name, o.status, o.object_type 
                 FROM sys.dba_invalid_objects o
          WHERE 
                o.owner = 'MDSYS' 
            AND rownum < 20) LOOP
        dbms_output.put_line ('Locator INVALID OBJECTS: ' || ob.object_name || ' - ' || ob.status || ' - ' || ob.object_type);
      END LOOP;
    end if;

  EXCEPTION                                                                      
    WHEN NO_DATA_FOUND THEN
      -- no valid objects, don't need to do anything
      null;

    WHEN OTHERS THEN
      b_valid := FALSE;
      err_code := SQLCODE;
      err_msg  := SUBSTR(SQLERRM, 1 , 100); 
      DBMS_OUTPUT.put_line('In validate_ordim OTHER EXCEPTION happens: Error code ' || err_code || ': ' || err_msg);
  END; 

  -- 
  -- Set the registry status at the end
  -- 
  if NOT b_valid then
    sys.dbms_registry.invalid('ORDIM');
  else
    sys.dbms_registry.valid('ORDIM');
  end if;

END; 
/
show errors;

REM Validate Oracle Multimedia Installation 
set serveroutput on
declare
  instance_status varchar2(30);
begin
--  Don't recompile during upgrades, leave for post-upgrade utlrp
  SELECT status into instance_status FROM v$instance;
  if instance_status <> 'OPEN MIGRATE' then
     sys.validate_ordim();
  end if;
end;
/
set serveroutput off

@?/rdbms/admin/sqlsessend.sql

OHA YOOOO