Mise à jour de données versionnées dans DB2 à l'aide de vues multi-versionnées et de SQL
Vous pouvez mettre à jour des données attributaires versionnées dans une géodatabase dans IBM DB2 sur les systèmes d'exploitation Linux, UNIX ou Windows en modifiant une vue multi-versionnée créée sur les données.
Les vues multi-versionnées ne sont pas prises en charge dans les bases de données DB2 sur les systèmes d'exploitation z.
Plusieurs procédures stockées sont installées avec ArcSDE pour vous aider à utiliser les vues multi-versionnées. Voici ces composants et leurs descriptions :
Procédure stockée |
Objet |
Syntaxe et description |
---|---|---|
sde.create_version |
Crée une nouvelle version de la géodatabase. Modifiez toujours votre propre version distincte ; les vues multi-versionnées ne permettent pas à plusieurs éditeurs de modifier la même version. |
CALL sde.create_version ('<parent_version>', '<child_version>', <name_rule>, <access>, '<description>', <message_code_output>, <message_output>) <parent_version> est la version à partir de laquelle votre version est créée. <child_version> est le nom de la version que vous créez. <name_rule> indique si le nom spécifié pour la version doit être accepté tel qu'il est fourni (2) ou si un nom unique doit être créé quand un nom dupliqué est spécifié (1). <access> est le niveau d'autorisation de la version ; 0 pour Privé, 1 pour Public ou 2 pour Protégé. <description> est un texte descriptif de la version enfant. <message_code_output> indique que vous voulez que le code SQL vous soit renvoyé. <message_output> indique que vous voulez que les messages SQL vous soient renvoyés. |
sde.setcurrentversion |
Définit la version de géodatabase à laquelle vous souhaitez accéder. |
CALL sde.setcurrentversion('<version_name>', <message_code_output>, <message_output>) <version_name> est le nom de la version de géodatabase à laquelle vous souhaitez vous connecter. |
sde.edit_version |
Démarre et arrête une session de mise à jour. |
CALL sde.edit_version('<version_name>', <1 ou 2>, <message_code_output>, <message_output>) Spécifiez 1 pour démarrer la session de mise à jour. Spécifiez 2 pour l'arrêter. |
sde.delete_version |
Supprime une version de géodatabase. |
CALL sde.delete_version('<version_name>', <message_code_output>, <message_output>) |
Lorsque vous modifiez des tables versionnées par le biais de vues multi-versionnées, les modifications sont apportées dans les tables de deltas et les valeurs d'ID de ligne (identifiant d'objet) sont générées automatiquement pour les nouveaux enregistrements. Toutefois, contrairement à la mise à jour des données versionnées dans une session de mise à jour ArcGIS, aucune réconciliation de versions interne n'est réalisée avec ces mises à jour.
Un verrouillage exclusif est, en outre, placé sur l'état auquel la version fait référence lorsque vous démarrez une session de mise à jour sur une vue multi-versionnée. Par conséquent, il est vivement recommandé de ne pas utiliser les vues multi-versionnées pour mettre à jour la version DEFAULT ou toute version pouvant être soumise à une mise à jour ou une réconciliation simultanée par d'autres utilisateurs, car les conflits ne seront pas détectés et les verrouillages bloqueront les autres utilisateurs. Créez plutôt votre propre version pour la session de mise à jour des vues multi-versionnées.
- Les opérations de gestion des versions, telles que la réconciliation, la résolution de conflits et la réinjection, doivent être réalisées à l'aide du logiciel ArcGIS. Une gestion incorrecte des versions peut endommager la géodatabase lorsque vous utilisez les vues.
- Veuillez également ne jamais utiliser les outils de système de gestion de base de données (SGBD) pour mettre à jour des champs d'ID de ligne (identifiant d'objet) gérés par ArcSDE dans la base de données. Ces champs d'identifiant d'objet sont attribués et gérés par la géodatabase et, par conséquent, ne doivent pas être modifiés à l'aide de SQL.
- Ne mettez jamais à jour la version DEFAULT de la géodatabase à l'aide de SQL. Le démarrage d'une session de mise à jour sur une version permet d'obtenir un verrouillage exclusif sur l'état auquel la version fait référence. En verrouillant la version DEFAULT, vous empêchez les utilisateurs ArcGIS de se connecter à la géodatabase.
Les étapes suivantes vous expliquent comment créer une vue multi-versionnée, créer une version dans laquelle effectuer des modifications, définir la version à modifier, démarrer une session de mise à jour, effectuer des modifications à travers la vue multi-versionnée, arrêter la session de mise à jour, valider vos modifications dans la base de données et supprimer la version créée pour les modifications. Dans les exemples, la vue multi-versionnée créée pour effectuer les mises à jour sur la table est code_mv, tandis que la version créée et utilisée pour la mise à jour est mvedits.
Souvenez-vous que le jeu de données que vous mettez à jour par le biais d'une vue multi-versionnée doit avoir été déjà inscrit comme versionné.
-
Dans l'invite de commande MS-DOS (Windows) ou shell (UNIX ou Linux), exécutez l'utilitaire sdetable pour créer une vue multi-versionnée.
sdetable –o create_mv_view –T code_mv –t code_enf –i sde:db2 –D code –u sarja –p not4U
-
Créez une nouvelle version dans laquelle effectuer vos mises à jour.
CALL sde.create_version ('SDE.DEFAULT', 'mvedits', 1, 1, 'multiversioned view edit version', ?, ?)
-
Définissez la version pour la session de mise à jour sur la version enfant que vous venez de créer.
CALL sde.setcurrentversion('mvedits', ?, ?)
-
Ouvrez une session de mise à jour en appelant la procédure stockée edit_version et en spécifiant 1. La valeur 1 indique qu'une session de mise à jour doit être ouverte.
CALL sde.edit_version('mvedits', 1, ?, ?)
-
Effectuez la première modification dans la vue multi-versionnée à l'aide de SQL.
Dans cet exemple, un enregistrement existant est mis à jour.
UPDATE code_mv SET propowner = 'C. Industry' WHERE vid = 2233
-
Effectuez la modification suivante dans la vue multi-versionnée à l'aide de SQL.
Dans cet exemple, un nouvel enregistrement est inséré.
INSERT INTO code_mv (codenum, propowner) VALUES (456, 'Anjo Badsu')
Astuce :Dans l'instruction INSERT, aucune valeur d'identifiant d'objet n'est spécifiée. La vue multi-versionnée obtient automatiquement le prochain identifiant d'objet disponible et l'insère pour l'enregistrement.
Bien qu'il soit possible de versionner une table qui a uniquement été inscrite avec ArcSDE et qui possède une colonne d'identifiant d'objet gérée par l'utilisateur, cette opération n'est pas recommandée. Si vous le faites toutefois, vous devez fournir un identifiant d'objet avec les instructions INSERT, car la vue multi-versionnée ne peut pas générer de valeur à votre place.
- Exécutez une instruction COMMIT ou ROLLBACK.
-
Arrêtez la session de mise à jour en appelant la procédure stockée edit_version, mais cette fois, spécifiez 2. La valeur 2 indique que la session de mise à jour doit être arrêtée.
CALL sde.edit_version('mvedits', 2, ?, ?)
-
Une fois que vous avez terminé toutes les mises à jour, réconciliez et réinjectez les modifications par le biais d'ArcGIS Desktop, puis supprimez la version de géodatabase que vous avez créée à l'étape 2. Si vous décidez de ne pas conserver les modifications, vous pouvez également supprimer la version que vous avez créée à l'étape 2 sans réconcilier ni réinjecter les modifications.
CALL sde.delete_version('mvedits', ?,?)
Le texte entre guillemets simples est lu littéralement. Par conséquent, le texte que vous saisissez entre guillemets doit correspondre à la casse du texte (tout en majuscules, tout en minuscules ou casse mixte) tel qu'il est stocké dans la base de données.