DB2 for Z/OS : analyser les contraintes CHECK et REFERENCE
par
, 29/11/2023 à 11h49 (814 Affichages)
Voici des requêtes qui permettent d'extraire du catalogue les informations relatives aux contraintes de contenu (CHECK) et de référence à des clefs étrangères (REFERENCE FOREIGN KEY) sur DB2 for Z/OS
Les noms d'objets sont restitués sur 8 caractères, car c'est la longueur maximale la plus souvent utilisée dans le monde Z/OS pour des raisons historiques, à adapter si besoin.
Contraintes de contenu :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9 -- liste des contraintes CHECK select substr(TBOWNER, 01, 08) as "Schema" , substr(TBNAME, 01, 08) as "Table" , substr(CHECKNAME, 01, 30) as "Nom" , CHECKCONDITION as "Cond" from SYSIBM.SYSCHECKS where TBOWNER = 'SCH1' order by 1, 2, 3 ;
Contraintes de référence à des clefs étrangères :
Code SQL : Sélectionner tout - Visualiser dans une fenêtre à part
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35 -- Cette requete analyse les contraintes d'intégrité entre tables set current schema = 'SYSIBM' ; with CT1(SCH1, TAB1) as (select 'SCH0', 'T020' from SYSIBM.SYSDUMMY1 union all select 'SCH0', 'T021' from SYSIBM.SYSDUMMY1 ) select distinct substr(RL.CREATOR, 01, 4) as "Schm" , substr(RL.REFTBNAME, 01, 08) as "ParentTb" , substr(RL.TBNAME, 01, 08) as "Child Tb" , substr(RL.RELNAME, 01, 20) as "Constr" , RL.DELETERULE as "OnDel" , RL.ENFORCED as "Enf" , RL.CHECKEXISTINGDATA as "Chk" , substr(KY.COLNAME, 01, 08) as "ParenCol" , KY.COLNO as "PColNo" , substr(FK.COLNAME, 01, 08) as "ChildCol" , FK.COLNO as "CColNo" from SYSRELS RL inner join CT1 CT on (RL.CREATOR = CT.SCH1 and RL.TBNAME = CT.TAB1) or (RL.REFTBCREATOR = CT.SCH1 and RL.REFTBNAME = CT.TAB1) inner join SYSFOREIGNKEYS FK on FK.CREATOR = RL.CREATOR and FK.RELNAME = RL.RELNAME left join SYSKEYS KY on KY.IXCREATOR=CT.SCH1 and KY.IXNAME =RL.IXNAME and KY.COLSEQ =FK.COLSEQ order by "ParentTb" , "Child Tb" , "Constr" , "CColNo" ;
On rappellera que dans une base de données relationnelle, seules les les contraintes de type REFERENCE permettent de garantir l'intégrité parent/enfant.
Malheureusement, on rencontre un grand nombre de sites dans lesquels aucune contrainte de ce type n'est installée, sous toutes sortes de prétextes, parfois avancés par les DBA eux-mêmes... et tant pis pour l'intégrité !
Jusqu'à aujourd'hui, je n'ai jamais vu de site dépourvu de contrainte REFERENCE et sur lequel aucun orphelin n'existait...