Content Platform Engine, FileNet P8 Content Search Engine, Version 5.2.1   Bases de données :  Oracle          

Conversion du type de données Oracle DATE au type de données TIMESTAMP (mise à niveau depuis la version 4.5.1)

Si vous mettez à niveau des données Content Engine de type Oracle dans le cadre d'une mise à niveau de FileNet P8 à partir de la version 4.5.1, la mise à niveau automatique convertit les colonnes de propriété DateTime de Content Engine du type de données Oracle DATE au type de données Oracle TIMESTAMP. Cependant, la fonction de mise à niveau n'est pas capable de faire cette conversion dans un index de fonction contenant des données de type DATE. Dans ce cas, l'index doit être supprimé, les données de type DATE doivent être converties manuellement au type TIMESTAMP et l'index doit être recréé dans la base de données Oracle.

Pourquoi et quand exécuter cette tâche

Les données Oracle dans les versions Content Engine antérieures à la version 5.0.0 utilisent la propriété Oracle DATE pour la propriété Content Engine DateTime. A partir de la version 5.0.0, la propriété Oracle TIMESTAMP remplace la propriété DATE.

Lors de la mise à niveau automatique des données de Content Engine, les colonnes de tableau définies par la propriété DATE sont automatiquement converties en propriété TIMESTAMP, même lorsqu'il existe un index sur la propriété DATE. Cependant, la conversion échoue dans les index de fonction, incluant par exemple le mot-clé DESC (décroissant), impliquant la propriété DATE.

Il est impossible de résoudre de problème de conversion dans le cadre de la fonction de mise à niveau automatique, et seule une procédure manuelle peut être utilisée pour convertir les colonnes DATE des index de fonction en colonnes TIMESTAMP.

Si l'une des conditions ci-dessous est vraie, l'administrateur de base de données doit effectuer la procédure manuelle :

  • Vous utilisez la fonction d'audit de Content Engine, et la table d'événements contient plus de 500 000 lignes.

    Sans la procédure manuelle, l'index système I_EVENT48 sur la colonne create_date de la table Event continue à fonctionner. Cependant votre configuration n'est pas prise en charge tant que la colonne n'est pas convertie manuellement.

    L'exemple ci-dessous représente un message du journal des erreurs système P8 indiquant le dépassement de la capacité de la table des événements :
    2012-05-31T01:49:43.005Z 7F227F22 ENG FNRCE0000E - ERROR 
    ObjectStoreUpgrade(My451ObjectStore) DBA should manually drop
    indices I_Event48 and I_Event83, convert date column to timestamp
    and re-create them on Event table.
    Même si le message d'erreur concerne à la fois I_EVENT48 et I_EVENT83, seul I_EVENT48 doit être supprimé et recréé (voir la procédure ci-dessous).
  • Vous avez défini une propriété DATE qui fait partie d'un index de fonction.

    Le système mis à niveau est parfaitement fonctionnel sans la procédure manuelle. Les propriétés de date et les requêtes fonctionnent comme avant, à une exception près : les index de fonction définis par l'utilisateur dont la colonne Date est la première clé (par exemple, un index créé par un administrateur de données sur uxy_shipmentDate DESC) sont inutilisables, et les recherches d'index dans un plan de requête ne sont pas conservée tant que la propriété définie par l'utilisateur n'est pas convertie manuellement.

Une vérification des erreurs de conversion des types de données dans les journaux d'erreur système P8 confirmera la nécessité d'effectuer la procédure manuelle. Dans tous les cas, il est recommandé de vérifier les journaux après la mise à niveau automatique. L'exemple ci-dessous représente un message du journal des erreurs système P8 indiquant la nécessité d'effectuer la procédure manuelle :

"2010-07-13T00:29:43.787Z 68416841 ENG  FNRCE0000E - ERROR ObjectStoreUpgrade
(DaphneStore) Date to Timestamp column conversion failed for column modify_date on 
table DocVersion. The most likely reason is oracle error 30556: functional index is 
defined on the column to be modified, in which case DBA should manually drop index, 
convert date column to timestamp and re-create index."

Procédure

Pour convertir manuellement le type de données DATE au type TIMESTAMP :

  1. Si cela n'est pas encore fait, supprimez le paramétrage de V8Compatibility dans les arguments JVM utilisé comme solution de contournement. Si votre système utilise Oracle 11g et vous avez dû revenir au pilote JDBC d'Oracle 10g pour le contournement, annulez également la procédure de rétromigration du pilote JDBC. Utilisez les procédures du document technique Enabling Oracle Date Index Use in the FileNet Content Engine (Techdoc 1397282).
  2. Pour convertir le type de données DATE au type TIMESTAMP dans la table Event, exécutez les commandes SQL suivantes. Notez que la création d'un index peut être longue si la table des événements contient des millions d'entrées. Comme indiqué ci-dessus, seul I_EVENT48 doit être supprimé et recréé.
    DROP INDEX I_Event48
    ALTER TABLE Event MODIFY create_date TIMESTAMP
    CREATE INDEX I_Event48 ON Event (source_object_id, create_date DESC) 
  3. Pour convertir des colonnes de table DATE définies par l'utilisateur au type TIMESTAMP, exécutez les commandes SQL suivantes pour chaque index de fonction. La création d'un index peut être longue si la table comportant la colonne DATE contient des millions d'entrées.
    DROP INDEX <nom d'index>
    ALTER TABLE <nom de table> MODIFY <nom de colonne> TIMESTAMP
    CREATE INDEX <nom d'index> ON <nom de table>(noms de colonne> <modificateurs>)


Dernière mise à jour : Octobre 2015
p8pup557.htm

© Copyright IBM Corp. 2013, 2015.