[ITDS] Modification de la longueur d'un attribut

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".

Références IBM

Catégorie: 

Tag: