Mise à jour de données versionnées dans Oracle à l'aide de vues multi-versionnées et de SQL
Vous pouvez mettre à jour des données versionnées dans une géodatabase en modifiant une vue multi-versionnée créée sur les données.
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.version_user_ddl.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. |
EXEC sde.version_user_ddl.create_version ('<parent_version>', :<child_version_variable>, <name_rule>, <access>, '<description>') <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. <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. |
sde.version_util.set_current_version |
Définit la version de géodatabase à laquelle vous souhaitez accéder. |
EXEC sde.version_util.set_current_version('<version_name>') <version_name> est le nom de la version de géodatabase à laquelle vous souhaitez vous connecter. |
sde.version_user_ddl.edit_version |
Démarre et arrête une session de mise à jour. |
EXEC sde.version_user_ddl.edit_version('<version_name>',<1 ou 2>) Spécifiez 1 pour démarrer la session de mise à jour. Spécifiez 2 pour l'arrêter. |
sde.version_user_ddl.delete_version |
Supprime une version de géodatabase. |
EXEC sde.version_user_ddl.delete_version('<version_name>') |
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:oracle11g –u sarja –p not4U@orasvc
-
Ouvrez un client SQL et déclarez une variable pour stocker la version que vous créerez à la prochaine étape.
VARIABLE mv_version NVARCHAR2(10); EXEC :mv_version := 'mvedits';
Dans cet exemple, mv_version est le nom de la variable, NVARCHAR2(10) est le type de données de la variable et mvedits est le nom de la version.
-
Créez une nouvelle version dans laquelle effectuer vos mises à jour.
EXEC sde.version_user_ddl.create_version ('sde.DEFAULT', :mv_version, sde.version_util.C_take_name_as_given, sde.version_util.C_version_private, 'multiversioned view edit version');
-
Définissez la version pour la session de mise à jour sur la version enfant que vous venez de créer.
EXEC sde.version_util.set_current_version('mvedits');
-
Ouvrez une session de mise à jour en exécutant la procédure stockée version_user_ddl.edit_version et en spécifiant 1. La valeur 1 indique qu'une session de mise à jour doit être ouverte.
EXEC sde.version_user_ddl.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é à la table.
INSERT INTO code_mv (codenum,propowner,shape) VALUES (567, 'Anjo Badsu', sde.ST_PointFromText('point (40 40)', 12));
Conseil :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 exécutant la procédure stockée version_user_ddl.edit_version, mais cette fois, spécifiez 2.
La valeur 2 indique que la session de mise à jour doit être fermée.
EXEC sde.version_user_ddl.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 vous pouvez modifier la version de géodatabase que vous avez créée à l'étape 3. Si vous décidez de ne pas conserver les modifications, vous pouvez également supprimer la version que vous avez créée à l'étape 3 sans réconcilier ni réinjecter les modifications.
EXEC sde.version_user_ddl.delete_version('mv_version');