EducationSoftwareStrategy.com
StrategyCommunity

Knowledge Base

Product

Community

Knowledge Base

TopicsBrowse ArticlesDeveloper Zone

Product

Download SoftwareProduct DocumentationSecurity Hub

Education

Tutorial VideosSolution GalleryEducation courses

Community

GuidelinesGrandmastersEvents
x_social-icon_white.svglinkedin_social-icon_white.svg
Strategy logoCommunity

© Strategy Inc. All Rights Reserved.

LegalTerms of UsePrivacy Policy
  1. Home
  2. Topics

KB8529: What checks are performed by MDDoctor and how should the results be interpreted?


Community Admin

• Strategy


This technical note explains what checks will be performed when running MD Doctor against a metadata.

MDDoctor detects and fixes physical inconsistencies in Strategy 9.3.x - 9.4.x metadatas. 
BEST PRACTICES
Remember the following Best Practices when running MDDoctor:

  • Running MDdoctor should not be a routine operation.  MDdoctor is meant to be used as a fix once Technical Support identifies that there is a metadata physical inconsistency causing an issue in the platform.
  • Before running MDdoctor (fix/scan mode), all operations against the metadata should be stopped.
  • Before running MDdoctor (fix mode), a backup of the metadata must be taken. 
  • Always save the MDdoctor logs.

This document contains a list of checks that MDDoctor performs, the SQL run for each check, and how MD Doctor resolves any detected inconsistencies in Strategy 9.3.x - 9.4.x metadatas.
INITIAL VERIFICATION OF METADATA TABLE INTEGRITY
MD Doctor initially verifies that the 18 metadata tables exist by executing the following select statements against each table:
 
SELECT COUNT(*) FROM DSSMDSYSPROP
SELECT COUNT(*) FROM DSSMDOBJINFO
SELECT COUNT(*) FROM DSSMDOBJDEFN
SELECT COUNT(*) FROM DSSMDOBJDEPN
SELECT COUNT(*) FROM DSSMDOBJPROP
SELECT COUNT(*) FROM DSSMDOBJCMNT
SELECT COUNT(*) FROM DSSMDOBJSECU
SELECT COUNT(*) FROM DSSMDUSRACCT
SELECT COUNT(*) FROM DSSMDLNKITEM
SELECT COUNT(*) FROM DSSMDLNKPROP
SELECT COUNT(*) FROM DSSMDOBJTRNS
SELECT COUNT(*) FROM DSSMDJRNINFO
SELECT COUNT(*) FROM DSSMDJRNOBJS
SELECT COUNT(*) FROM DSSMDJRNOBJC
SELECT COUNT(*) FROM DSSMDJRNOBJD
SELECT COUNT(*) FROM DSSMDJRNLNKS
SELECT COUNT(*) FROM DSSMDOBJDEF2
SELECT COUNT(*) FROM DSSMDOBJLOCK
SELECT COUNT(*) FROM DSSMDOBJBLOB
If errors are returned when accessing any of the metadata tables, MD Doctor will log the following fatal error and stop the metadata check:
 


FATAL ERROR: Failed to read table DSSMDOBJCMNT. This database likely does not contain a Strategy metadata repository. MDDoctor cannot continue.

 

DSSMDSYSPROP CHECKS
MD Doctor records the contents in the DSSMDSYSPROP table by running the following structured query language (SQL):
 
SELECT * FROM DSSMDSYSPROP
MD Doctor verifies that:
 

  1. The table contains a VERSION property.  The value of this property depends on the version of the metadata shell.
  2. The table contains a supported relational database management system (RDBMS) platform identifier. If an invalid RDBMS value is encountered, MD Doctor will log the following fatal error and stop the metadata check:


FATAL ERROR: Metadata database platform 'Hello' is unsupported by this version of the MDDoctor. MDDoctor cannot continue.

 

TRIGGER CHECKS
The use of triggers on the metadata tables, allows Strategy to leverage the Database Management System (DBMS)-side functionality to ensure metadata integrity. The triggers allow 'relationships' between the MD tables so that Strategy only needs to delete an object from the DSSMDOBJINFO table and the rest of the tables are automatically cleaned by the DBMS. This minimizes the chances of incomplete deletions and reduces overhead.
 
If the necessary trigger is not present in the metadata, the tables can rapidly accumulate metadata inconsistencies. MD Doctor verifies that the necessary trigger exists on the metadata tables and is functioning properly. If the trigger is not present, MD Doctor will log the following fatal error and stop the metadata check:
 

FATAL ERROR: Cascade delete trigger test failed on table DSSMDOBJDEFN. Metadata is unusable and must be recreated

 
If this error is encountered, the metadata trigger is not present.  Strategy products will error out on connecting to the affected metadata.  The trigger is a database side object/construct and can only be "lost" (dropped)  by a deliberate manipulation of the metadata table space (example: a direct table copy).  Please contact Technical Support to attempt to recreate the metadata trigger, but the metadata administrator should take note of database manipulations which led to the lost trigger.  
 
If the trigger is present then the following SQL is run to verify the integrity of the metadata trigger:
 
Begin transaction...
SQL: INSERT INTO DSSMDOBJINFO (PROJECT_ID, OBJECT_ID, OBJECT_TYPE, SUBTYPE, OBJECT_NAME, ABBREVIATION, DESCRIPTION, VERSION_ID, PARENT_ID, OWNER_ID, HIDDEN, OBJECT_UNAME, OBJECT_STATE) VALUES ('7F76FF9143B18EB70819608FF560B08A', '0154FB3F43BC8095882A628DE63CFCF3', 0, 0, 'Dummy Name', '', '', '00000000000000000000000000000000', '00000000000000000000000000000000', '00000000000000000000000000000000', 0, 'DUMMY NAME', -1)
SQL: INSERT INTO DSSMDOBJDEFN (PROJECT_ID, OBJECT_ID, DEFINITION_SEQ, OBJECT_TYPE, DEFINITION) VALUES ('7F76FF9143B18EB70819608FF560B08A', '0154FB3F43BC8095882A628DE63CFCF3', 0, 0, 'Dummy Definition')
SQL: INSERT INTO DSSMDOBJDEPN (PROJECT_ID, OBJECT_ID, DEPN_PRJID, DEPN_OBJID, OBJECT_TYPE, DEPNOBJ_TYPE) VALUES ('7F76FF9143B18EB70819608FF560B08A', '0154FB3F43BC8095882A628DE63CFCF3', '00000000000000000000000000000000', '00000000000000000000000000000000', 0, 0)
SQL: INSERT INTO DSSMDOBJSECU (PROJECT_ID, OBJECT_ID, TRUST_ID, RIGHTS, OBJECT_TYPE) VALUES ('7F76FF9143B18EB70819608FF560B08A', '0154FB3F43BC8095882A628DE63CFCF3', '00000000000000000000000000000000', 0, 0)
SQL: INSERT INTO DSSMDOBJPROP (PROJECT_ID, OBJECT_ID, PROPSET_ID, PROP_ID, VALUE_SEQ, OBJECT_TYPE, PROP_VAL, TARGET_ID, PROP_TYPE) VALUES ('7F76FF9143B18EB70819608FF560B08A', '0154FB3F43BC8095882A628DE63CFCF3', '00000000000000000000000000000000', 0, 0, 0, '', '00000000000000000000000000000000', 0)
SQL: INSERT INTO DSSMDOBJCMNT (PROJECT_ID, OBJECT_ID, COMMENT_ID, COMMENT_SEQ, OBJECT_TYPE, COMMENT_VAL) VALUES ('7F76FF9143B18EB70819608FF560B08A', '0154FB3F43BC8095882A628DE63CFCF3', 0, 0, 0, '')
SQL: INSERT INTO DSSMDUSRACCT (PROJECT_ID, OBJECT_ID, LOGIN, PASSWD, NTSID, DBLOGIN, ISGROUP) VALUES ('7F76FF9143B18EB70819608FF560B08A', '0154FB3F43BC8095882A628DE63CFCF3', 'Dummy Login', '', '', '', 0)
SQL: DELETE FROM DSSMDOBJINFO WHERE PROJECT_ID = '7F76FF9143B18EB70819608FF560B08A' AND OBJECT_ID = '0154FB3F43BC8095882A628DE63CFCF3'
SQL: SELECT COUNT(*) FROM DSSMDOBJINFO WHERE PROJECT_ID = '7F76FF9143B18EB70819608FF560B08A' AND OBJECT_ID = '0154FB3F43BC8095882A628DE63CFCF3'
SQL: SELECT COUNT(*) FROM DSSMDOBJDEFN WHERE PROJECT_ID = '7F76FF9143B18EB70819608FF560B08A' AND OBJECT_ID = '0154FB3F43BC8095882A628DE63CFCF3'
SQL: SELECT COUNT(*) FROM DSSMDOBJDEPN WHERE PROJECT_ID = '7F76FF9143B18EB70819608FF560B08A' AND OBJECT_ID = '0154FB3F43BC8095882A628DE63CFCF3'
SQL: SELECT COUNT(*) FROM DSSMDOBJPROP WHERE PROJECT_ID = '7F76FF9143B18EB70819608FF560B08A' AND OBJECT_ID = '0154FB3F43BC8095882A628DE63CFCF3'
SQL: SELECT COUNT(*) FROM DSSMDOBJCMNT WHERE PROJECT_ID = '7F76FF9143B18EB70819608FF560B08A' AND OBJECT_ID = '0154FB3F43BC8095882A628DE63CFCF3'
SQL: SELECT COUNT(*) FROM DSSMDOBJSECU WHERE PROJECT_ID = '7F76FF9143B18EB70819608FF560B08A' AND OBJECT_ID = '0154FB3F43BC8095882A628DE63CFCF3'
SQL: SELECT COUNT(*) FROM DSSMDUSRACCT WHERE PROJECT_ID = '7F76FF9143B18EB70819608FF560B08A' AND OBJECT_ID = '0154FB3F43BC8095882A628DE63CFCF3'
Rollback transaction...
 
DSSMDOBJINFO CHECKS

  1. MD Doctor verifies there is exactly one Configuration Object defined in the metadata by executing the following SQL:
    SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE OBJECT_TYPE = 36
  2. If this test fails, one of the following fatal errors will be logged and MD Doctor will stop the metadata check:
     
    • FATAL ERROR: More than one configuration object has been found. This metadata repository is unusable and cannot be repaired. MDDoctor cannot continue.
    • FATAL ERROR: No configuration object has been found. This metadata repository is unusable and cannot be repaired. MDDoctor cannot continue.
  3. MD Doctor executes the following SQL to obtain a list of projects in the metadata:
    SELECT OBJECT_ID, OBJECT_NAME FROM DSSMDOBJINFO WHERE OBJECT_TYPE = 32
  4. MD Doctor verifies that there is a valid root folder for each project and the configuration object by executing the following SQL for each:
    SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PARENT_ID = '00000000000000000000000000000000' AND PROJECT_ID = ' {Object_ID for Project} ' AND OBJECT_TYPE = 8 AND OBJECT_ID IN (SELECT DEPN_OBJID FROM DSSMDOBJDEPN WHERE OBJECT_ID = '{Object_ID for Project}')
  5. If a root folder for the Configuration Object cannot be found, the following fatal error will be logged and MD Doctor will abort the metadata check:
     
    
    FATAL ERROR: No root folder has been found for the configuration. This metadata repository is unusable and cannot be repaired. MDDoctor cannot continue.

     
  6. If a root folder for a Project Object cannot be found, the following fatal error will be logged:
     
    ERROR: No root folder has been found for project {Project Name}. This project is unusable and cannot be repaired.
  7. MD Doctor checks for objects that are contained in an invalid project by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJINFO WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  8. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
     
    DSSMDOBJINFO.PROJECT_ID contains XX invalid project references.
  9. MD Doctor checks for objects in the Configuration Object that also exist in one or more projects using the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Configuration Object_ID}' AND OBJECT_ID IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID <> '{Configuration Object_ID}')
  10. If object entries are found that exist in both the Configuration Object and in a project, MD Doctor will log the following message:
     
    
    ERROR: XX objects in this metadata repository exist in both the configuration and one or more projects. MDDoctor cannot correct this kind of inconsistency.

     
  11. Metadata Doctor checks for objects that have invalid parent folders by executing the following SQL for each project and the configuration object:
    SELECT COUNT(*) FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for Project}' AND OBJECT_ID <> '{Object_ID of highest level folder in Project}' AND (PARENT_ID = '00000000000000000000000000000000' OR PARENT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID of highest level folder in Project}' AND OBJECT_TYPE = 8))
  12. If invalid entries are found MD Doctor will log the following message:
     
    
    ERROR: The configuration contains 1 objects with invalid parent folder.

     
  13. If users choose to fix the errors, MD Doctor moves all objects with invalid parent folders to the root folder of the Configuration Object or project.
     
  14. MD Doctor checks for objects with invalid owners by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJINFO WHERE OWNER_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE OBJECT_TYPE = 34)
  15. If invalid entries are found, Metadata Doctor will log the following message:
     
    If users choose to accept the fix: Transfer the ownership of all objects with invalid owners to the system administrator.
  16. If users choose to fix the errors, MD Doctor transfers the ownership of all objects with invalid owners to the system administrator.
     

DSSMDOBJSECU CHECKS

  1. MD Doctor checks for invalid Project_IDs in the PROJECT_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJSECU WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  2. If invalid entries are identified, MD Doctor will log the following error and resolve the inconsistency by deleting the rows with invalid entries.:
     
    DSSMDOBJSECU.PROJECT_ID contains XX invalid project references.
  3. MD Doctor checks for invalid object references in the OBJECT_ID column by running the following SQL once for each project in the metadata and once for the Configuration Object:
    SELECT COUNT(*) FROM DSSMDOBJSECU WHERE PROJECT_ID = '{Object_ID for Project}' AND OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = ''{Object_ID for Project}')
  4. If invalid object references are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting invalid rows:
     
    
    ERROR: DSSMDOBJSECU.Object_ID contains XX invalid object references in project 'Project Name'.

     

    The Trust_ID column stores user information for ACL entries. MD Doctor checks for invalid User ID references in the TRUST_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJSECU WHERE TRUST_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE OBJECT_TYPE = 34)
  5. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
     
    ERROR: Column DSSMDOBJSECU.TRUST_ID contains XX invalid user object references.
  6. Errors of this type mean that there are ACL entries which contain pointers to non-existent user/group objects. 

DSSMDUSRACCT CHECKS

  1. MD Doctor checks for invalid project references in the PROJECT_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDUSRACCT WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE OBJECT_TYPE = 36)
  2. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
     
    DSSMDUSRACCT.PROJECT_ID contains XX invalid project references.
  3. MD Doctor checks for invalid user references in the OBJECT_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDUSRACCT WHERE OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE OBJECT_TYPE = 34)
  4. If invalid object references are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the invalid rows:
     
    ERROR: DSSMDURSACCT.Object_ID contains XX invalid object references in project 'Project Name'.
  5. MD Doctor executes the following SQL to check that entries in the ISGROUP column are populated with a value of '0':
    SELECT COUNT(*) FROM DSSMDUSRACCT WHERE ISGROUP <> 0
  6. If any rows with an ISGROUP value other than '0' are identified, MD Doctor will log the following error and will fix the error by removing all entries with a ISGROUP value not equal to '0' from the user account table:
     
    ERROR: The user account table contains XX user group entries.
  7. MD Doctor checks for user objects that appear in the DSSMDOBJINO table, but do not have a corresponding user object entry in the DSSMDUSRACCT table by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJINFO WHERE SUBTYPE = 8704 AND OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDUSRACCT)
  8. If MD Doctor identifies any user objects in the DSSMDOBJINFO table, but not in the DSSMDUSRACCT table, the following non-fatal error is logged:
     
    ERROR: Table DSSMDUSRACCT does not contain entries for XX user objects present in the DSSMDOBJINFO table.
  9. Note that this type of inconsistency cannot be fixed by MD Doctor.
     

DSSMDOBJDEF2 CHECKS
 

  1. MD Doctor checks for invalid references in the PROJECT_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJDEFN WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  2. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
  3. ERROR: DSSMDOBJDEFN.PROJECT_ID contains XX invalid project references.
  4. MD Doctor checks for invalid references in the OBJECT_ID column. The following SQL is executed once for each project and once for the Configuration Object:
    SELECT COUNT(*) FROM DSSMDOBJDEFN WHERE PROJECT_ID = '{Object_ID for project}' AND OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for project}')
  5. If invalid object references are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting invalid rows:
     
    ERROR: DSSMDOBJDEFN.Object_ID contains XX invalid object references in project 'Project Name'.

DSSMDOBJDEPN CHECKS

  1. MD Doctor checks for invalid references in the PROJECT_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJDEPN WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  2. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
     
    ERROR: DSSMDOBJDEPN.PROJECT_ID contains XX invalid project references.
  3. MD Doctor checks for invalid references in the OBJECT_ID column by executing the following SQL once for each project and once for the Configuration Object:
    SELECT COUNT(*) FROM DSSMDOBJDEPN WHERE PROJECT_ID = '{Object_ID for project}' AND OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for project}')
  4. If invalid object references are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the invalid rows:
     
    ERROR: DSSMDOBJDEPN.Object_ID contains XX invalid object references in project 'Project Name'.
  5. MD Doctor checks for invalid references in the DEPN_PRJID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJDEPN WHERE DEPN_PRJID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  6. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
     
    ERROR: DSSMDOBJDEPN.DEPN_PRJID contains XX invalid project references.
  7. MD Doctor checks for invalid references in the DEPN_OBJID column by executing the following SQL once for each project and once for the Configuration Object:
     
    SELECT COUNT(*) FROM DSSMDOBJDEPN WHERE DEPN_PRJID = '{Object_ID for project}' AND DEPN_OBJID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for project}') AND DEPNOBJ_TYPE <> 27
  8. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the invalid rows:
     
    ERROR: DSSMDOBJDEPN.DEPN_OBJID contains XX invalid object references in project 'Project Name'.

DSSMDOBJPROP CHECKS

  1. MD Doctor checks for invalid references in the PROJECT_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJPROP WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  2. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
     
    ERROR: DSSMDOBJPROP.PROJECT_ID contains XX invalid project references.
  3. MD Doctor checks for invalid references in the OBJECT_ID column by executing the following SQL once for each project and once for the Configuration Object:
    SELECT COUNT(*) FROM DSSMDOBJPROP WHERE PROJECT_ID = '{Object_ID for project}' AND OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for project}')
  4. If invalid object references are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the invalid rows:
     
    ERROR: DSSMDOBJPROP.Object_ID contains XX invalid object references in project 'Project Name'.
  5. MD Doctor checks for invalid Property Set references in the PROPSET_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJPROP WHERE PROPSET_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE OBJECT_TYPE = 28 AND (DSSMDOBJPROP.OBJECT_TYPE = 32 OR DSSMDOBJPROP.OBJECT_TYPE <> 32 AND (PROJECT_ID = DSSMDOBJPROP.PROJECT_ID OR PROJECT_ID = '{Object_ID for project}')))
  6. If invalid Property Set IDs are identified in the PROPSET_ID column, MD Doctor will log the following error and will resolve the inconsistency by deleting the invalid rows:
     
    ERROR: DSSMDOBJPROP.PROPSET_ID contains 1 invalid object references.
  7. To be valid, a Target_ID must either match a valid Project_ID or be '00000000000000000000000000000000'. MD Doctor checks for invalid references in the TARGET_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJPROP WHERE TARGET_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36)) AND TARGET_ID <> '00000000000000000000000000000000'
  8. If invalid Target_ID values are identified MD Doctor will log the following error and will resolve the inconsistency by deleting invalid rows:
     
    ERROR: DSSMDOBJPROP.TARGET_ID contains 1 invalid project references.

DSSMDOBJCMNT CHECKS

  1. MD Doctor checks for invalid references in the PROJECT_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDOBJCMNT WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  2. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
     
    ERROR: DSSMDOBJCMNT.PROJECT_ID contains XX invalid project references.
  3. MD Doctor checks for invalid references in the OBJECT_ID column by executing the following SQL once for each project and once for the Configuration Object:
    SELECT COUNT(*) FROM DSSMDOBJCMNT WHERE PROJECT_ID = '{Object_ID for project}' AND OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for project}')
  4. If invalid object references are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting invalid rows:
     
    ERROR: DSSMDOBJCMNT.Object_ID contains XX invalid object references in project 'Project Name'.

DSSMDLNKITEM CHECKS

  1. MD Doctor checks for invalid references in the PROJECT_ID column by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDLNKITEM WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  2. If invalid entries are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the rows with invalid entries:
     
    ERROR: DSSMDLNKITEM.PROJECT_ID contains 2 invalid project references.
  3. MD Doctor checks for invalid references in the OBJECT_ID column by executing the following SQL once for each project and once for the Configuration Object:
    SELECT COUNT(*) FROM DSSMDLNKITEM WHERE PROJECT_ID = '{Object_ID for project}' AND OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for project}')
  4. If invalid object references are identified, Metadata Doctor will log the following error and will resolve the inconsistency by deleting the invalid rows:
     
    ERROR: DSSMDLNKITEM.OBJECT_ID contains 2 invalid object references in project 'Project Name'.
  5. MD Doctor checks for LINK_ID values that do not have a corresponding entry in the DSSMDOBJINFO table or are not the correct Object_Type for a Link Object. The following SQL is executed once for each project and the Configuration Object:
    SELECT COUNT(*) FROM DSSMDLNKITEM WHERE PROJECT_ID = '{Object_ID for project}' AND LINK_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for project}' AND OBJECT_TYPE = 52)
  6. If invalid Link Object IDs are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting the invalid rows:
     
    ERROR: DSSMDLNKITEM.LINK_ID contains 1 invalid object references in project 'Project Name'.
  7. MD Doctor checks for link items with duplicate coordinates by executing the following SQL:
    SELECT OBJECT_ID, LINKITEM_ID, LINK_ID, PROJECT_ID FROM DSSMDLNKITEM ORDER BY PROJECT_ID, LINK_ID, LINKITEM_ID, OBJECT_ID
  8. If MD Doctor encounters duplicate Link Items, the following error will be logged and extra Link Items will be deleted:
     
    ERROR: Table DSSMDLNKITEM contains 1 duplicate link items.
  9. MD Doctor checks for Link Item references missing from the DSSMDLNKPROP table by executing the following SQL:
    SELECT COUNT(*) FROM DSSMDLNKITEM WHERE LINKITEM_ID NOT IN (SELECT DISTINCT LINKITEM_ID FROM DSSMDLNKPROP)
  10. If Link Item entries are found in the DSSMDLNKITEM table without corresponding entries in the DSSMDLNKPROP table, the following error will be logged and invalid rows from the DSSMDLNKITEM table will be deleted:
     
    ERROR: DSSMDLNKITEM.LINKITEM_ID contains 5 invalid link item references.

DSSMDLNKPROP CHECKS

  1. MD Doctor checks for invalid Property Set references in the PROPSET_ID column using the following SQL statement:
    SELECT COUNT(*) FROM DSSMDLNKPROP WHERE PROPSET_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE OBJECT_TYPE = 28 AND (PROJECT_ID IN (SELECT DISTINCT PROJECT_ID FROM DSSMDLNKITEM WHERE LINKITEM_ID = DSSMDLNKPROP.LINKITEM_ID) OR PROJECT_ID = '{Object_ID for project}'))
  2. If invalid Property Set IDs are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting invalid rows:
     
    ERROR: DSSMDLNKPROP.PROPSET_ID contains 1 invalid object references.
  3. MD Doctor checks for Link Item references missing from the DSSMDLNKITEM table by executing the following SQL Statement:
    SELECT COUNT(*) FROM DSSMDLNKPROP WHERE LINKITEM_ID NOT IN (SELECT DISTINCT LINKITEM_ID FROM DSSMDLNKITEM)
  4. If Link Item entries are found in the DSSMDLNKPROP table without corresponding entries in the DSSMDLNKITEM table, the following error will be logged and the invalid rows will be deleted from the DSSMDLNKPROP table:
     
    ERROR: DSSMDLNKPROP.LINKITEM_ID contains 2 invalid link item references.

DSSMDOBJBLOB CHECKS

  1. MD Doctor checks for invalid references in the PROJECT_ID column using the following SQL statement:
    SELECT COUNT(*) FROM DSSMDOBJBLOB WHERE PROJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE (OBJECT_TYPE = 32 OR OBJECT_TYPE = 36))
  2. If invalid Project IDs are identified, MD Doctor will log the following error and will resolve the inconsistency by deleting invalid rows:
     
    ERROR: DSSMDOBJBLOB.PROJECT_ID contains 1 invalid object references.
  3. MD Doctor checks for invalid object references in the OBJECT_ID column by running the following SQL once for each project in the metadata and once for the Configuration Object:  
    SELECT COUNT(*) FROM DSSMDOBJBLOB WHERE PROJECT_ID = '{Object_ID for project}' AND OBJECT_ID NOT IN (SELECT OBJECT_ID FROM DSSMDOBJINFO WHERE PROJECT_ID = '{Object_ID for project}')
  4. If invalid object references are identified, Metadata Doctor will log the following error and will resolve the inconsistency by deleting the invalid rows:
     
    ERROR: DSSMDOBJBLOB.OBJECT_ID contains XX invalid object references in project 'Project Name'.

 
NOTE:
Although OS/390 is a supported metadata configuration, it is not currently certified with MDDoctor.
 
Modification of the metadata is risky because incorrect or partial modification may result in a metadata that will no longer function. Due to the risks please reach out to Strategy Technical Support in order to obtain MDDoctor. To minimize risk and reduce the amount of time required to restore a system, complete the following two steps:
 

  • Make a complete backup of the metadata prior to running MD Doctor in fix mode.
  • Retain a copy of the MDDoctor.log generated by MD Doctor for any instance where the utility was run in "fix mode".


KB000019722


Comment

0 comments

Details

Knowledge Article

Published:

April 5, 2017

Last Updated:

September 13, 2018