Modification de la longueur d'un attribut ITDS
Lors du lancement d'un traitement sur un annuaire IBM Tivoli Directory Server (ITDS), on remarque ceci dans les logs (ibmslapd.log) :
07/11/2013 03:26:23 PM GLPRDB069E Attribute IIRUSERATTRIB8 has a maximum value length of 240. Current attribute value is of length 242.
Voyons ce que dit le schéma de l'annuaire :
cd /product/ldap/idsslapd-idsldap/etc grep -i IIRUSERATTRIB8 CustomSchema.at ( 1.3.6.1.4.1.16832.123.2.108 NAME 'iirUserAttrib8' DESC 'User Attribute 8' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15)
La déclaration de l'attribut pour DB2 (DBNAME) ne comprend pas de longueur explicite => c'est la longueur par défaut = 240 caractères.
On peut le vérifier en accédant à la base de données :
idsldap > db2 connect to idsldap Database Connection Information Database server = DB2/LINUXX8664 9.7.0 SQL authorization ID = IDSLDAP Local database alias = IDSLDAP idsldap > db2 describe table IIRUSERATTRIB8 Data type Column Column name schema Data type name Length Scale Nulls ------------------------------- --------- ------------------- ---------- ----- ------ EID SYSIBM INTEGER 4 0 No IIRUSERATTRIB8 SYSIBM VARCHAR 240 0 No RIIRUSERATTRIB8 SYSIBM VARCHAR 240 0 Yes 3 record(s) selected.
Modification de la longueur
Le changement de longueur sur un attribut ITDS DOIT se faire via un fichier LDIF et une commande idsldapmodify, ou via l'interface d'administration de l'annuaire.
Par exemple, voici le contenu du fichier ChangeLength.ldif :
dn: cn=schema changetype: modify replace: attributetypes attributetypes: ( 1.3.6.1.4.1.16832.123.2.108 NAME 'iirUserAttrib8' DESC 'User Attribute 8' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15) - replace: ibmattributetypes ibmattributetypes: ( 1.3.6.1.4.1.16832.123.2.108 DBNAME ('iirUserAttrib8' 'iirUserAttrib8') LENGTH 384 SUBSTR )
On modifie le schéma avec la commande :
idsldapmodify -D cn=root -w MotDePasse -f ChangeLength.ldif Operation 0 modifying entry cn=schema
On peut vérifier que le changement de longueur a bien été pris en compte dans les fichiers de configuration ITDS :
grep -i iiruserattrib8 /product/ldap/idsslapd-idsldap/etc/* /product/ldap/idsslapd-idsldap/etc/CustomSchema.at:( 1.3.6.1.4.1.16832.123.2.108 NAME 'iirUserAttrib8' DESC 'User Attribute 8' SYNTAX 1.3.6.1.4.1.1466.115.121.1.15 ) /product/ldap/idsslapd-idsldap/etc/CustomSchema.at:( 1.3.6.1.4.1.16832.123.2.108 DBNAME ( 'iirUserAttrib8' 'iirUserAttrib8' ) LENGTH 384 SUBSTR )
Et le contenu de la base de données :
idsldap > db2 describe table IIRUSERATTRIB8 db2 describe table IIRUSERATTRIB8 Data type Column Column name schema Data type name Length Scale Nulls ------------------------------- --------- ------------------- ---------- ----- ------ EID SYSIBM INTEGER 4 0 No IIRUSERATTRIB8 SYSIBM VARCHAR 384 0 No IIRUSERATTRIB8_T SYSIBM VARCHAR 240 0 No RIIRUSERATTRIB8_T SYSIBM VARCHAR 240 0 No 4 record(s) selected.
La longueur de la colonne a bien été augmentée à 384 caractères.
DB2 ajoute des colonnes *_T qui sont utilisées pour la recherche et l'indexation.
La colonne R[attribute_name]_T est la chaîne de caractère renversée et tronquée à 240, pour les filtres de recherche qui sont de la forme "attribut=*valeur".