Referential integrity check
HCL Workload Automation automatically
performs referential checks to avoid lack of integrity in the object
definitions in the database whenever you run commands that create,
modify, or delete the definition of a referenced object. These are
the checks performed by the product:
- Every time you use a command that creates a new object in the
database, HCL Workload Automation checks
that:
- An object of the same type and with the same identifier does not already exist.
- The objects referenced by this object already exist in the database.
- Every time you run a command that modifies an object definition
in the database, HCL Workload Automation checks
that:
- The object definition to be modified exists in the database.
- The objects referenced by this object exist in the database.
- To avoid integrity inconsistencies, the object definition does not appear in the definition of an object belonging to the chain of his ancestors.
- Every time you run a command that deletes an object definition
in the database, HCL Workload Automation checks
that:
- The object definition to be deleted exists in the database.
- The object definition to be deleted is not referenced by other objects defined in the database.
Note that there is no referential integrity check for event rules.
Table 1 shows, for each object
type, the identifiers that are used to uniquely identify the object
in the database when creating or modifying object definitions:
Object type | Object identifiers |
---|---|
domain | domainname |
workstation | workstationname (checked across workstations and workstation classes) |
workstation class | workstationclassname (checked across workstations and workstation classes) |
calendar | calendarname |
job definition | workstationname and jobname |
user | workstationname and username |
job stream | workstationname and jobstreamname and, if defined, validfrom |
job within a job stream | workstationname and jobstreamname, jobname, and, if defined, validfrom |
resource | workstationname and resourcename |
prompt | promptname |
variable table | variabletablename |
variable | variabletablename.variablename |
event rule | eventrulename |
access control list | securitydomainname |
security domain | securitydomainname |
security role | securityrolename |
In general, referential integrity prevents the deletion of objects
when they are referenced by other objects in the database. However,
in some cases where the deletion of an object (for example a workstation)
implies only the update of a referencing object (for example a workstation
class that includes it), the deletion might be allowed. Table 2 shows all cases when a referenced
object can be deleted even if other objects reference it:
Object | References | Upon deletion of the referenced object … |
---|---|---|
Internetwork Dependency | Workstation | … remove the dependency from the job or job stream |
External Follows Depend | Job Stream | … remove the dependency from the job or job stream |
Job | … remove the dependency from the job or job stream | |
Internal Dependency | Job | … remove the dependency from the job or job stream |
Workstation Class | Workstation | … remove the workstation from the workstation class |
Table 3 describes how the product
behaves when it is requested to delete an object referenced by another
object with using a specific relationship:
Object to be deleted | Referenced by object | Relationship | Delete rule |
---|---|---|---|
domain A | domain B | domain A is parent of domain B | An error specifying the existing relationship is displayed. |
workstation B | workstation B belongs to domain A | An error specifying the existing relationship is displayed. | |
workstation A | workstation B | workstation A is host for workstation B | An error specifying the existing relationship is displayed. |
job B | job B is defined on workstation A | An error specifying the existing relationship is displayed. | |
job stream B | job stream B is defined on workstation A | An error specifying the existing relationship is displayed. | |
user B | user B is defined on workstation A | An error specifying the existing relationship is displayed. | |
job stream B | workstation A works as network agent for internetwork dependencies set in job stream B | Both workstation A and the internetwork dependency are deleted | |
job stream B | job stream B has a file dependency from a file defined on workstation A | Both workstation A and the file dependency are deleted | |
job B within job stream B | workstation A works as network agent for internetwork dependencies set in job B | Both workstation A and the internetwork dependency are deleted | |
job B within job stream B | job B has a file dependency from a file defined on workstation A | Both workstation A and the file dependency are deleted | |
resource B | resource B is defined on workstation A | An error specifying the existing relationship is displayed. | |
file B | file B is defined on workstation A | An error specifying the existing relationship is displayed. | |
workstation class B | workstation A belongs to workstation class B | Both workstation A and its entry in workstation class B are deleted. | |
job B within job stream B | job B contained in job stream B is defined on workstation A | An error specifying the existing relationship is displayed. | |
job A | job B | job A is recovery job for job B | An error specifying the existing relationship is displayed. |
job stream B | job A is contained in job stream B | An error specifying the existing relationship is displayed. | |
job stream B | job stream B follows job A | job A and the follows dependency in job stream B are deleted. | |
job B within job stream B | job B follows job A | job A and the follows dependency in job B are deleted. | |
event rule B | job A is in the action definition of event rule B (and does not use variable substitution) | An error specifying the existing relationship is displayed. | |
calendar A | job stream B | job stream B uses calendar A | An error specifying the existing relationship is displayed. |
workstation class A | job B | job B is defined on workstation class A | An error specifying the existing relationship is displayed. |
job stream B | job stream B is defined on workstation class A | An error specifying the existing relationship is displayed. | |
resource B | resource B is defined on workstation class A | An error specifying the existing relationship is displayed. | |
file B | file B is defined on workstation class A | An error specifying the existing relationship is displayed. | |
resource A | job stream B | needs dependency defined in job stream B | An error specifying the existing relationship is displayed. |
job B within job stream B | needs dependency defined in job B | An error specifying the existing relationship is displayed. | |
prompt A | job stream B | prompt dependency defined in job stream B | An error specifying the existing relationship is displayed. |
job B within job stream B | prompt dependency defined in job B | An error specifying the existing relationship is displayed. | |
variable A | job stream B | variable A is used in job stream B in:
|
variable A is deleted without checking |
job B | variable A is used in job stream B in:
|
variable A is deleted without checking | |
prompt B | variable A is used in the text of prompt B | variable A is deleted without checking | |
variable table A | job stream B | variable table A is referenced in job stream B | variable table A is not deleted |
job B | variable table A is referenced in job B | variable table A is not deleted | |
prompt B | variable table A is referenced in the text of prompt B | variable table A is not deleted | |
job stream A | job stream B | job stream B follows job stream A | job stream A and the follows dependency in job stream B are deleted. |
job B within a job stream B | job B follows job stream A | job stream A and the follows dependency in job B are deleted. | |
event rule B | job stream A is in the action definition of event rule B (and does not use variable substitution) | An error specifying the existing relationship is displayed. | |
security domain A | access control list B | access control list B is defined on security domain A | access control list B is deleted. |
security role A | access control list B | security role A is referenced in access control list B | security role A is not deleted. |