Suite

Concurrence et défi de verrouillage dans l'édition non versionnée dans ArcMap


J'utilise une géodatabase SQLServer sans version avec un type de géométrie pour le stockage de données spatiales. Pour ce faire, j'ai enregistré toutes les couches dans le référentiel SDE et la géodatabase et ArcMap affiche toutes les couches et les modifie correctement.

Mais pour appliquer certaines règles métier, je dois attraper le contrôle de l'éditeur ArcMap dans OnCreate même de l'objet de l'éditeur et je dois interroger la base de données à l'intérieur de cet événement, donc je rencontre un problème de concurrence et de verrouillage selon le document de ce ESRI :

http://webhelp.esri.com/arcgisserver/9.3/java/index.htm#geodatabases/concur-1966151650.htm

même après avoir modifié tous mes codes (qui accèdent à la géodatabase) en modèle ArcObject (j'utilise donc Editor :: Workspace object pour récupérer les données à l'aide d'ICursor et d'IFeatureCursor), je reçois toujours des erreurs qui me montrent que la base de données est verrouillée pendant la session d'édition ArcMap, bien que dit que le niveau d'isolement est UNCOMMITTED READ.Si le niveau d'isolement est en lecture non validée, je peux au moins lire les données de la géodatabase pendant le temps après qu'ArcMap a créé une entité et avant que l'utilisateur ne valide la transaction.Mais événement une simple requête SELECT est verrouillée par ArcMap.Je me demande si Je ne comprends pas la bonne signification du niveau d'isolement UNCOMMITTED READ ou il y a un problème ailleurs.

Une suggestion ou une référence pour traiter ce problème?

J'utilise ArcGIS Desktop 10.2 pour travailler avec des données et j'utilise ArcSDE 9.3 pour créer et enregistrer une géodatabase.


Tout d'abord, permettez-moi de m'excuser si mon message était trompeur, cela impliquait peut-être que SDE n'applique pas la lecture non validée pour son niveau d'isolement des transactions. Commited Read" lors de la requête dans son référentiel, mais en utilisant le profileur, je n'ai trouvé aucune commande émise par SDE liée au niveau d'isolement lors du démarrage de la session d'édition. Mais il y avait une commande dans le profileur :

"Définir le niveau d'isolement de la transaction en lecture validée"

pas émis par SDE, mais pilote .NET SQLServer.

Après une courte recherche sur le net, j'ai trouvé qu'il s'agissait du paramètre par défaut du pilote .NET SQLServer.

J'ai simplement mis cette commande à la première ligne des requêtes "Select" dans mes procédures stockées :

"Définir le niveau d'isolement de la transaction en lecture non validée"

et ça a marché.

Maintenant, je peux interroger ma géodatabase à l'aide d'une procédure stockée simple pendant que j'ai démarré une session de modification et même après avoir terminé de dessiner une esquisse sans valider la commande d'enregistrement ni l'annuler. Une solution très simple pour le "problème de concurrence et de verrouillage dans la géodatabase sans version" dans ArcGIS.


CosmosDB : Comment appliquer la concurrence lors de l'insertion d'un document (dans les requêtes parallèles)

Nous avons un EventHub où des milliers d'événements sont enregistrés chaque jour. La fonction Azure est configurée au déclenchement sur cet eventhub à l'arrivée de nouveaux messages. La fonction azur effectue les deux tâches suivantes :

  1. Écrivez le message brut dans la base de données du document (collection 1)
  2. Upsert un message récapitulatif (agrégé) dans la collection 2 du document Db. Avant d'écrire un message, il vérifie si un message récapitulatif existe déjà en fonction de la clé de partition et de l'identifiant unique (pas d'identifiant), s'il existe un document, il met à jour le document avec une nouvelle valeur agrégée et sinon, insère un nouveau document. Cet identifiant unique est créé sur la base d'une logique métier.

Énoncé du problème :

Plusieurs documents récapitulatifs sont créés pour une clé de partition et un identifiant unique

Détails du scénario

  • disons que pour PartitionKey PartitionKey1 il n'y a pas de document récapitulatif créé dans Collection pour la clé unique calculée .
  • plusieurs messages (supposons 2) sont arrivés à eventhub et qui ont déclenché des fonctions azur.
  • toutes ces 2 demandes s'exécutent simultanément, puisqu'aucun document existant n'est trouvé à l'aide de la requête, donc chaque demande fait un message, maintenant la fonction Upsert est invoquée presque en même temps pour écrire un document récapitulatif par demande simultanée et aboutit à avoir plusieurs documents récapitulatifs pour une clé de partition et un identifiant unique.

J'ai recherché et lu sur Optimistic Concurrency que je vais certainement implémenter pour le scénario de mise à jour. mais je n'ai pas pu trouver un moyen de gérer les scénarios d'insertion ?


2 réponses 2

PLUS SIMPLE : Je suggère que vous n'avez pas besoin d'une tête et queue pour votre file d'attente. Ayez juste une tête. Si la tête = NULL, la liste est vide. Ajouter des éléments à la tête. Retirez les objets de la tête. Plus simple, moins d'opérations CAS.

ASSISTANT: J'ai suggéré dans les commentaires que vous deviez penser à un système d'aide pour gérer la course. Dans ma version de ce que signifie "lock free", il est normal d'avoir des conditions de course rares si elles ne causent pas de problèmes. J'aime les performances supplémentaires par rapport au fait qu'un thread inactif dort quelques ms trop longtemps.

Idées d'aide. Lorsqu'un consommateur s'empare du travail, il peut vérifier s'il y a un fil dans le coma. Lorsqu'un producteur ajoute du travail, il peut rechercher des fils dans les virgules.

Alors suivez les dormeurs. Utilisez une liste chaînée de dormeurs. Lorsqu'un thread décide qu'il n'y a pas de travail, il se marque lui-même comme !wake et le CAS lui-même en tête de la liste des dormeurs. Lorsqu'un signal est reçu pour se réveiller, le fil se marque comme étant éveillé. Ensuite, le thread nouvellement réveillé nettoie la liste des dormeurs. Pour nettoyer une seule liste chaînée simultanée, vous devez être prudent. Vous pouvez seulement CAS à la tête. Ainsi, pendant que la tête de la liste des dormeurs est marquée éveillée, vous pouvez CAS la tête éteinte. Si la tête n'est pas éveillée, continuez à parcourir la liste et à "dissocier paresseux" (j'ai inventé ce terme) les éléments éveillés restants. La dissociation paresseuse est simple. il suffit de définir le prochain ptr de l'élément précédent sur l'élément éveillé. Une analyse simultanée arrivera toujours à la fin de la liste même si elle atteint les éléments qui sont !éveillés. Les analyses suivantes voient une liste plus courte. Enfin, chaque fois que vous ajoutez ou retirez du travail, recherchez dans la liste des dormeurs les éléments !wake. Si un consommateur remarque qu'il reste du travail après avoir récupéré du travail (.next work != NULL), le consommateur peut parcourir la liste des dormeurs et signaler le premier thread qui est !wake. Une fois qu'un producteur a ajouté du travail, le producteur peut parcourir la liste des dormeurs et faire de même.

Si vous avez un scénario de diffusion et que vous ne pouvez pas signaler un seul thread, gardez simplement un compte des threads endormis. Alors que ce nombre est toujours > 0, un consommateur remarquant du travail restant et un consommateur ajoutant du travail diffuserait le signal pour se réveiller.

Dans notre environnement, nous avons 1 thread par SMT, donc la liste des dormeurs ne peut jamais être aussi grande (enfin, à moins que je ne mette la main sur l'une de ces nouvelles machines à 128 threads simultanés !). Nous générons des éléments de travail au début d'une transaction. Dans la première seconde, nous pourrions générer 10 000 éléments de travail, et cette production diminue rapidement. Les threads fonctionnent pendant quelques secondes sur ces éléments de travail. Ainsi, nous avons rarement un thread sur le pool inactif.

VOUS POUVEZ TOUJOURS UTILISER DES SERRURES Si vous n'avez qu'un seul thread et que vous générez rarement du travail. cela ne fonctionnera pas pour vous. Dans ce cas, les performances des mutex ne sont pas préoccupantes et vous devez simplement les utiliser. Utilisez un verrou sur la file d'attente dormant dans ce scénario. Pensez à lock-free comme étant "pas de verrous là où ça compte".

POST PRÉCÉDENT: Êtes-vous en train de dire : il y a une file d'attente de travail. Il existe de nombreux fils de consommateurs. Un consommateur doit retirer du travail et le faire s'il y a du travail Un thread consommateur doit dormir jusqu'à ce qu'il y ait du travail.

Si vous l'êtes, nous le faisons en utilisant uniquement des opérations atomiques de cette façon :

La file d'attente de travail est une liste chaînée. Il existe également une liste liée de threads endormis.

Pour ajouter une œuvre : CAS en tête de liste de la nouvelle œuvre. Lorsque du travail est ajouté, nous vérifions s'il y a des threads sur la liste des dormeurs. S'il y en a, avant d'ajouter le travail, nous CAS un dormeur de la liste des dormeurs, définissons son travail = le nouveau travail, puis signalons au dormeur de se réveiller. Ensuite, nous ajoutons le travail à la file d'attente de travail.

Pour consommer du travail : CAS la tête de la liste à tête->suivant. Si la tête de la liste de travail est NULL, nous CAS le thread à une liste de dormeurs.

Une fois qu'un thread a un élément de travail, le thread doit CAS l'état de l'élément de travail à WORK_INPROGRESS ou un tel. Si cela échoue, cela signifie que le travail est effectué par un autre, de sorte que le thread consommateur revient à la recherche de travail. Si un thread se réveille et a un élément de travail, il doit toujours CAS l'état.

Ainsi, si du travail est ajouté, un consommateur endormi est toujours réveillé et se voit confier le travail. pthread_kill() réveille toujours un thread à sigwait(), car même si le thread arrive à sigwait après le signal, le signal est reçu. Cela résout le problème d'un thread qui se met sur la liste des dormeurs mais qui est signalé avant de s'endormir. Tout ce qui se passe, c'est que le thread essaie de s'approprier son ->travail s'il y en a un. Le fait de ne pas posséder de travail ou de ne pas avoir de travail renvoie le thread à consumer-start. Si un thread ne parvient pas à CAS dans la liste des dormeurs, cela signifie qu'un autre thread l'a battu ou que le producteur a retiré un dormeur. Pour plus de sécurité, le fil agit comme s'il venait juste d'être réveillé.

Nous n'avons pas de conditions de concurrence en faisant cela et avons plusieurs producteurs et consommateurs. Nous avons également pu étendre cela pour permettre aux threads de dormir également sur des éléments de travail individuels.


ArcUser en ligne

Résumé

Cet article fournit une présentation générale de la géodatabase d'entreprise&# 151ses fonctionnalités clés, son architecture et sa mise en œuvre&# 151conçue pour les gestionnaires SIG et les administrateurs de base de données.

Étant donné que la géodatabase d'entreprise est l'un des éléments de base d'une utilisation transparente du SIG à l'échelle de l'organisation, le personnel de gestion doit bien comprendre son rôle et ses capacités.

Figure 1 : Niveaux de géodatabase d'entreprise

La géodatabase est le format de données natif pour ArcGIS. Il s'agit d'un conteneur de stockage de données qui définit la manière dont les données sont stockées, consultées et gérées par ArcGIS. Le terme géodatabase combine géo (données spatiales) avec base de données (en particulier un système de gestion de base de données relationnelle ou SGBDR). ArcGIS 9.2 possède trois types de géodatabases : les géodatabases personnelles basées sur Microsoft Access, les géodatabases fichier et les géodatabases ArcSDE.

Les géodatabases personnelles et fichier sont conçues pour les utilisateurs uniques et les petits projets. Les géodatabases ArcSDE sont évolutives et conçues pour une utilisation à plus grande échelle, allant des implémentations de moyenne à grande échelle. Ces géodatabases nécessitent la technologie ArcSDE et sont disponibles à trois niveaux (par ordre croissant de capacité et de fonctionnalité) : géodatabase personnelle (ArcSDE Personal), géodatabase de groupe de travail (ArcSDE Workgroup) et géodatabase d'entreprise (ArcSDE Enterprise). Cet article traite des géodatabases d'entreprise ArcSDE.

Comprendre l'architecture de géodatabase d'entreprise

Au niveau conceptuel, une géodatabase d'entreprise consiste en une architecture à plusieurs niveaux qui implémente une logique et un comportement avancés dans le niveau d'application (par exemple, le logiciel ArcGIS) en plus d'un niveau de stockage de données (par exemple, le logiciel SGBDR). Le niveau d'application peut être subdivisé en deux parties : la technologie ArcObjects et ArcSDE. La responsabilité de la gestion des données géographiques dans une géodatabase d'entreprise est partagée entre ArcGIS et le SGBDR utilisé.

Au niveau du stockage des données, le logiciel SGBDR fournit un modèle de données simple et formel pour le stockage et la gestion des informations dans les tableaux. La structure d'une géodatabase d'entreprise est conservée dans le SGBDR sous la forme d'un ensemble de tables connu sous le nom de référentiel ArcSDE. Les aspects liés au stockage et à la récupération des données sont implémentés sous forme de tableaux simples et certains aspects de la gestion des données géographiques, tels que le stockage sur disque, la définition des types d'attributs, le traitement des requêtes et le traitement des transactions multi-utilisateurs, sont exécutés par le SGBDR. Les plates-formes IBM DB2, IBM Informix, Oracle et Microsoft SQL Server sont actuellement prises en charge par ArcGIS. À la version 9.3, PostgreSQL sera pris en charge.

La technologie ArcSDE constitue le niveau intermédiaire. Avant ArcGIS 9.2, ArcSDE était un produit logiciel distinct. Dans ArcGIS 9.2, ArcSDE a été intégré à ArcGIS Desktop et à ArcGIS Server et est désormais officiellement connu sous le nom de technologie ArcSDE. En tant que passerelle entre les clients SIG et un SGBDR, ArcSDE sert des données spatiales et permet d'accéder à ces données et de les gérer dans un SGBDR. Il est implémenté sous la forme de plusieurs composants & 151 un répertoire d'exécutables, un ensemble de tables et de procédures stockées dans la base de données (c'est-à-dire le référentiel ArcSDE) et un service facultatif. Ces composants seront discutés plus en détail.

TableauUne fonction
configuration_serveurContient des paramètres et des valeurs qui définissent la façon dont le serveur ArcSDE utilise la mémoire et est lu à chaque démarrage du service ArcSDE. Pendant la post-installation d'ArcSDE, son contenu est rempli par un fichier nommé giomgr.defs.
dbtuneRépertorie les mots-clés de configuration pour les objets de données dans la géodatabase, tels que les classes d'entités, les jeux de données raster, les topologies et les réseaux. Les mots-clés de configuration sont utilisés lors du chargement des données et définissent la manière dont les jeux de données sont stockés dans la géodatabase. Les administrateurs de géodatabase peuvent utiliser un fichier nommé dbtune.sde pour gérer les mots-clés de configuration utilisés par la géodatabase d'entreprise.
registre_tableGère toutes les tables enregistrées de la géodatabase d'entreprise, y compris toutes les tables et jeux de données système de la géodatabase (par exemple, les classes d'entités et les jeux de données raster) enregistrés avec la géodatabase.
CouchesGère les données sur chaque classe d'entités dans la géodatabase. Ces informations aident à créer et à maintenir des index spatiaux, garantissent des types de formes appropriés et préservent l'intégrité des données.
raster_columnsGère les données sur chaque jeu de données raster dans la géodatabase et permet de suivre les tables de prise en charge d'un jeu de données raster telles que la bande, le bloc et les tables auxiliaires.
Figure 2 : Tables clés dans le référentiel ArcSDE

La technologie ArcSDE offre des fonctionnalités fondamentales qui incluent

  • Accès et stockage de la géométrie d'entité simple dans le SGBDR
  • Prise en charge des types spatiaux natifs du SGBDR (si disponible)
  • Intégrité des données spatiales
  • Environnement d'édition multi-utilisateurs (c'est-à-dire, versionnage)
  • Prise en charge des workflows SIG complexes et des transactions longues
  • Intégration des données géospatiales avec d'autres technologies de l'information

Le niveau supérieur du niveau d'application, ArcObjects, implémente la logique d'application de la géodatabase. Cet ensemble de composants logiciels indépendants de la plate-forme est écrit en C++ et fournit des services pour prendre en charge les applications SIG en tant que clients lourds sur le bureau et clients légers sur le serveur. Ce composant technologique est intégré aux clients SIG (par exemple, ArcGIS Desktop) et implémente des contraintes d'intégrité et de comportement d'objet plus complexes sur des entités simples, telles que des points, des lignes et des polygones, stockés dans un SGBDR. En d'autres termes, ArcObjects implémente le comportement sur les géométries d'entités. Les classes d'entités, les jeux de données d'entités, les catalogues d'images, les topologies, les réseaux et les terrains sont tous des exemples d'éléments de données géospatiales dans le modèle de données de géodatabase pour lesquels ArcObjects fournit la logique d'application qui implémente le comportement SIG en plus des entités spatiales simples stockées dans un SGBDR.

Les trois niveaux architecturaux de la géodatabase d'entreprise sont définis à un niveau conceptuel. Pour la plupart des utilisateurs finaux, l'utilisation des niveaux architecturaux de la géodatabase d'entreprise est un processus simple et transparent. Les gestionnaires SIG ou les administrateurs de base de données travaillent très probablement directement avec ces niveaux uniquement lors de l'installation et de la configuration d'une géodatabase d'entreprise ou lors de la maintenance.

Capacités de géodatabase d'entreprise

Figure 3 : Deux méthodes de communication avec une géodatabase d'entreprise : une connexion au serveur d'applications ou une connexion directe

Conçue pour les systèmes à grande échelle, la géodatabase d'entreprise peut être adaptée à n'importe quelle taille, prendre en charge n'importe quel nombre d'utilisateurs et s'exécuter sur des ordinateurs de n'importe quelle taille et configuration. Il tire pleinement parti de l'architecture SGBDR sous-jacente pour fournir des performances élevées et une prise en charge d'ensembles de données SIG continus extrêmement volumineux. La fonctionnalité SGBDR prend en charge la gestion des données SIG pour l'évolutivité, la fiabilité, la sécurité, la sauvegarde et l'intégrité des données. En plus de prendre en charge de nombreux utilisateurs avec un accès simultané aux mêmes données, une géodatabase d'entreprise peut être intégrée aux systèmes informatiques existants d'une organisation.

Certains des aspects de la technologie ArcSDE qui contribuent à ces capacités sont les suivants.

Gestion des versions

Édition non versionnée

L'utilisation de l'édition non versionnée équivaut à une transaction de base de données standard. La transaction est effectuée dans le cadre d'une session de mise à jour ArcMap et la source de données est directement mise à jour. Les sessions de mise à jour non versionnées ne stockent pas les modifications dans d'autres tables comme le font les sessions de mise à jour versionnées.

Réplication de géodatabase

Avec la réplication de géodatabase, les données sont réparties sur deux ou plusieurs géodatabases d'une manière qui leur permet de synchroniser les modifications apportées aux données. Il repose sur l'environnement de gestion des versions et prend en charge le modèle de données de géodatabase complet, y compris les topologies et les réseaux géométriques. Dans ce modèle asynchrone, la réplication est faiblement couplée. Cela signifie que chaque géodatabase répliquée peut fonctionner indépendamment tout en synchronisant les modifications avec d'autres géodatabases répliquées.

Étant donné que la réplication de géodatabase est implémentée aux niveaux technologiques ArcObjects et ArcSDE, les SGBDR impliqués peuvent être différents. La réplication de géodatabase peut être utilisée dans des environnements connectés et déconnectés et peut également fonctionner avec des connexions de géodatabase locales ainsi qu'avec des objets de serveur de géodonnées (via ArcGIS Server), ce qui permet d'accéder à une géodatabase sur Internet.

Archivage historique

Lorsqu'il est activé pour un jeu de données, l'archivage historique capture toutes les modifications de données dans la version DEFAULT de la géodatabase d'entreprise en préservant l'historique des transactions en tant que classe d'archive supplémentaire. ArcGIS applique l'heure de la transaction lorsque les modifications sont enregistrées ou publiées dans la version DEFAULT pour enregistrer le moment de la modification dans la base de données.

Installation d'une géodatabase d'entreprise

L'installation et la configuration d'une géodatabase d'entreprise type comportent deux étapes. Dans la première étape, le logiciel ArcSDE d'entreprise est installé sur le serveur. La deuxième étape (c'est-à-dire la post-installation d'ArcSDE) se compose de quatre étapes.

  1. Créez ou configurez une base de données avec un utilisateur administratif de géodatabase. En règle générale, cet utilisateur est nommé sde. Pour les géodatabases d'entreprise basées sur SQL Server, cet utilisateur peut également être nommé dbo (c'est-à-dire le propriétaire de la base de données) au lieu de sde.
  2. Remplissez la base de données avec le référentiel ArcSDE.
  3. Licence du serveur ArcSDE.
  4. (Facultatif) créez le service ArcSDE.

Sur les systèmes d'exploitation Windows, la post-installation d'ArcSDE peut être effectuée à l'aide d'un assistant. Alternativement, il peut également être effectué manuellement avec des commandes ArcSDE. Des paramètres supplémentaires peuvent également devoir être spécifiés lors de la post-installation, en fonction du SGBDR et du système d'exploitation utilisés. Une fois la géodatabase d'entreprise créée, les outils de gestion de base de données peuvent être utilisés pour créer des utilisateurs, des schémas et des index afin de personnaliser la géodatabase d'entreprise.

Composants de géodatabase d'entreprise

Une installation de géodatabase d'entreprise type comporte trois composants principaux : le répertoire de base ArcSDE, le référentiel ArcSDE et le service ArcSDE.

Le répertoire principal d'ArcSDE

Lorsque le composant ArcSDE d'ArcGIS Server est installé sur le serveur, ce répertoire est créé. Il est référencé dans le système d'exploitation du serveur par une variable d'environnement nommée %SDEHOME%.Le répertoire contient les exécutables de ligne de commande ArcSDE, les fichiers de configuration ArcSDE, les fichiers de prise en charge du géocodage et des langues, les fichiers journaux (pour résoudre les problèmes de serveur ArcSDE), la documentation d'aide et quelques exemples d'utilitaires.

Les exécutables de ligne de commande ArcSDE sont un ensemble de fichiers binaires qui peuvent être exécutés à l'invite de commandes par les administrateurs de géodatabase pour créer, configurer, gérer et surveiller à la fois la géodatabase d'entreprise et le service ArcSDE. Les exécutables de ligne de commande ArcSDE incluent un ensemble de commandes pour l'importation et l'exportation de données au niveau technologique ArcSDE de la géodatabase d'entreprise.

Le référentiel ArcSDE

Les tables système internes et les procédures stockées qui sont installées dans le SGBDR pendant la post-installation d'ArcSDE sont détenues et gérées par l'administrateur de la géodatabase créé lors de la première étape de la post-installation d'ArcSDE. Ils sont autogérés en interne par ArcGIS et le SGBDR via des procédures stockées et ne doivent pas être modifiés manuellement.

Les tables du référentiel ArcSDE peuvent être subdivisées en tables système ArcSDE et tables système de géodatabase (c'est-à-dire en tables système préfixées par GDB_). Les tables système ArcSDE fonctionnent au niveau de la technologie ArcSDE et contiennent des métadonnées de base pour ArcSDE, stockent la géométrie des entités et les données raster et gèrent l'environnement de gestion des versions. Les tables système de la géodatabase fonctionnent au niveau du niveau ArcObjects et stockent des informations sur le comportement et les fonctionnalités de la géodatabase pour les topologies, les réseaux et les domaines. Ces deux groupes forment la structure de la géodatabase d'entreprise.

Les administrateurs de géodatabase d'entreprise doivent être familiarisés avec les principales tables du référentiel ArcSDE répertoriées dans la figure 2.

Le service ArcSDE

Également communément appelé processus giomgr (abréviation de gestionnaire d'entrée/sortie géographique), le service ArcSDE est un service persistant sur le serveur ArcSDE qui dépend de l'instance du SGBDR. Le giomgr Le processus prend en charge les connexions du serveur d'applications à la géodatabase d'entreprise.

Le service ArcSDE écoute les demandes de connexion client entrantes sur un port dédié et permet aux clients de se connecter à la géodatabase. Une installation de géodatabase d'entreprise type possède un service ArcSDE associé, cependant, le service ArcSDE n'est pas requis si seules des connexions directes sont établies avec la géodatabase d'entreprise.

Type de connexions client

Les clients communiquent généralement avec une géodatabase d'entreprise sur un réseau à l'aide de protocoles TCP/IP et peuvent se connecter à une géodatabase d'entreprise de deux manières—à l'aide d'une connexion au serveur d'applications ou d'une connexion directe.

Connexion au serveur d'applications

Cette méthode traditionnelle de connexion client implique le service ArcSDE, qui écoute les demandes de connexion client. Lorsqu'une application cliente, telle qu'ArcGIS Desktop, demande une connexion à la géodatabase d'entreprise, un gsrvr (abréviation de serveur géographique) est lancé par le service ArcSDE et fournit un lien dédié entre le client et la géodatabase. Le service ArcSDE continue d'écouter les demandes de connexion.

La connexion à la géodatabase est basée sur le nom d'utilisateur et le mot de passe soumis. L'accès au jeu de données dépend des autorisations établies pour l'utilisateur par l'administrateur de la géodatabase. Le gsrvr Le processus reste connecté à la géodatabase jusqu'à ce que le client libère la connexion en fermant l'application. Cette méthode de connexion est communément appelée connexion à trois niveaux car elle implique l'application cliente, la géodatabase et le giomgr et gsrvr processus. Dans cette méthode, la plupart du travail est effectué sur le serveur.

Connexion directe

Avec cette méthode, les clients se connectent directement à la géodatabase d'entreprise sans utiliser le service ArcSDE. La communication entre les clients et la géodatabase s'effectue via les pilotes de connexion directe ArcSDE, situés du côté client, et non via le service ArcSDE. Les machines clientes doivent être configurées pour l'accès au réseau.

Les pilotes de connexion directe ArcSDE sont automatiquement installés pour l'ensemble de la suite de produits ArcGIS, l'extension d'accès à la base de données ArcView 3.x, ArcIMS, ArcInfo Workstation et MapObjects 2. Pour les applications personnalisées créées à partir de l'API C ArcSDE, les pilotes de connexion directe ArcSDE ont besoin à activer avec l'application pour prendre en charge cette fonctionnalité.

Les pilotes de connexion directe sont créés à partir du même code logiciel utilisé pour créer le service ArcSDE. La différence est que les pilotes de connexion directe sont créés en tant que fichiers de bibliothèque de liens dynamiques et s'exécutent dans l'espace de processus de l'application cliente, tandis que le service ArcSDE a été créé en tant que programme exécutable qui s'exécute sur le serveur ArcSDE.

Avec cette méthode de connexion, communément appelée connexion à deux niveaux car elle n'implique que l'application cliente et la géodatabase, une partie du travail qui aurait eu lieu sur le serveur avec la connexion au serveur d'applications est effectuée sur le client.

Pour que le serveur ArcSDE gère la majorité de la charge de traitement ArcSDE, utilisez des connexions au serveur d'applications. Lorsque les machines clientes disposent de suffisamment de ressources pour gérer une partie de la charge de traitement ArcSDE, utilisez des connexions directes. Les connexions directes peuvent augmenter le trafic réseau. Les deux méthodes de connexion client peuvent être prises en charge pour la même géodatabase d'entreprise dans n'importe quelle combinaison et configuration.

Conclusion

La géodatabase d'entreprise est la base de la création d'un SIG à grande échelle avec ArcGIS Server Enterprise. Il utilise une combinaison d'ArcObjects, de la technologie ArcSDE et du logiciel SGBDR pour définir la manière dont les données sont stockées, consultées et gérées par ArcGIS. Conceptuellement, il stocke les données SIG dans un emplacement centralisé. Cependant, il peut être installé et configuré pour une variété d'implémentations.

La géodatabase d'entreprise peut être utilisée pour appliquer des règles et des relations commerciales sophistiquées aux données spatiales, définir des modèles géorelationnels avancés tels que des topologies et des réseaux, et fournir un accès multi-utilisateur et un environnement d'édition. Grâce à ces fonctionnalités, les données spatiales de la géodatabase d'entreprise peuvent être exploitées à leur plein potentiel tout en conservant une base de données SIG cohérente et précise.

Davantage de ressources

Pour plus d'informations sur les géodatabases d'entreprise, consultez ces ressources Esri :


Défi de la concurrence et du verrouillage dans l'édition non versionnée dans ArcMap - Systèmes d'information géographique

Le transfert de biens immobiliers implique souvent plusieurs départements traitant plusieurs documents de manière efficace dans le temps. Les actes, les enquêtes et les plans de lotissement sont traités par les bureaux de planification, d'évaluation et d'enregistrement à la fois séquentiellement et simultanément, et dans certains cas dans des délais critiques. L'exactitude des informations saisies est essentielle et les relations entre les documents peuvent être très complexes. Un transfert de propriété tel qu'un grand lotissement peut impliquer plusieurs actes avec plusieurs propriétaires chacun, plusieurs cartes fiscales et plusieurs personnes accédant ou modifiant l'un de ces enregistrements à un moment donné. Par conséquent, le système développé doit posséder des outils pour gérer les accès concurrents, assurer l'intégrité des données saisies et être capable de distribuer la base de données sur un réseau étendu.

Un système complet d'enregistrements fonciers contient une abondance de données géographiques de plusieurs thèmes, couvrant des centaines de feuilles de carte et a de nombreux attributs qui lui sont associés. Cependant, pour une gestion efficace des données, le système doit fournir un accès rapide aux données, être capable de regrouper ces données spatiales de petites zones discrètes dans une grande base de données transparente et coordonner les modifications apportées aux caractéristiques géographiques avec leurs attributs associés. Le système doit permettre de verrouiller des fonctionnalités individuelles pour la mise à jour, évitant ainsi le verrouillage inutile de fonctionnalités non impliquées dans la transaction. De plus, en raison de la nature dynamique des données, le système développé doit fournir des outils pour maintenir la cohérence de la base de données, récupérer des transactions incomplètes et permettre de visualiser les données à n'importe quel point de l'historique des bases de données. Compte tenu du nombre d'utilisateurs de la base de données, le système a également besoin de protections contre une modification accidentelle ou intentionnelle du schéma de la base de données.

Trois départements du gouvernement du comté de Chester, les services informatiques et d'information (DCIS), l'Office of Recorder of Deeds (RCD) et le Bureau of Land Records (BLR) ont chacun la responsabilité de conserver une partie des registres fonciers du comté. Le comté de Chester connaît actuellement une croissance significative de nouveaux développements et de changements (50 + subdivisions/mois), ce qui entraîne un sérieux défi de tenue de dossiers pour toutes les activités d'enregistrement foncier, telles que l'acte, les informations d'évaluation et la maintenance des cartes fiscales. La mise à jour et la synchronisation de ces registres immobiliers ont nécessité la mise en place d'un nouveau système automatisé complet.

Pour permettre le développement de ce système automatisé, le comté a lancé un effort de conversion de documents pour toutes les cartes fiscales, l'acquisition d'orthophotographies numériques, le développement d'une base planimétrique et la migration des bases de données existantes vers un SGBDR. En outre, dans un effort pour minimiser les redondances dans la collecte et le traitement des données, le flux d'informations et le rôle des personnes impliquées sont en train d'être réorganisés. Les informations qui étaient auparavant saisies et traitées plusieurs fois seront désormais saisies une seule fois et mises à la disposition de tous les participants.

De plus, le comté met en œuvre un identificateur de parcelle basé sur la géographie comme méthode d'attribution d'un identificateur plus simple mais unique à chaque parcelle. Ajoutez à cela le partage de la responsabilité de ce projet entre trois départements et vous avez une assiette pleine pour tous les participants.

Reconnaissant la composante spatiale du problème de gestion des registres fonciers et les outils spatiaux possédés par le SIG, le comté a décidé de mettre en œuvre un SIG pour gérer la gestion et la maintenance de ses données spatiales. ArcInfo fonctionnant sur un réseau de postes de travail RS6000 a été choisi comme solution SIG pour le système de gestion des registres fonciers.

La gestion des attributs de l'information spatiale était aussi importante que la responsabilité de la gestion de l'information spatiale. Des attributs tels que la propriété, l'emplacement et les dates des transactions sont essentiels aux responsabilités des participants et il est nécessaire qu'ils soient à jour et corrects. Pour s'assurer que ces critères étaient remplis et rendre les données disponibles à tous les départements du comté et facilement accessibles au SIG, le comté a décidé de mettre en œuvre un SGBDR sur le même réseau de postes de travail RS6000 que le SIG. Oracle 7, SQL*PLUS, SQL*NET et Forms d'Oracle ont été choisis comme solutions SGBDR pour le projet de gestion des registres fonciers.

Pour coordonner les données spatiales avec les données attributaires pendant les phases de maintenance et de mise à jour de la base de données, ainsi que pour simplifier ces processus, ArcStorm, le système de gestion des données spatiales d'Esri, a été choisi. ArcStorm est un ensemble d'outils permettant de gérer l'intégrité, la distribution et l'historique des bases de données, ainsi que de permettre la présentation de la base de données de manière continue et transparente.

Les deux principaux composants du système des registres fonciers sont les sous-systèmes de suivi des demandes et de mise à jour des propriétés. Le sous-système Application Tracking est entièrement développé dans Oracle et est utilisé pour suivre la progression de diverses transactions immobilières, telles que les lotissements, les regroupements de parcelles et les transferts simples, pour n'en citer que quelques-uns. Il suit la demande depuis sa création jusqu'à son achèvement et contient les informations sur le demandeur, le propriétaire, la propriété et la facturation ainsi que les dates de transaction.

--> Le sous-système Property Update a été développé pour mettre à jour les différentes couches cartographiques et leurs attributs associés impliqués dans les transferts de propriété. Il a été développé en utilisant une combinaison d'ArcInfo, ArcStorm, Database Integrator et Oracle. Le reste de cette discussion se concentre sur la composante de mise à jour des propriétés (PUP) du système d'enregistrement des terres du comté de Chester.

Prototype de mise à jour de propriété

L'application Property Update Prototype (PUP) a été développée à l'aide d'ArcInfo v7.0.3 et d'Oracle v7.2.2. Le module d'édition d'ArcInfo ArcEdit avec l'option COGO et les DML et DDL d'Oracle étaient les principaux produits utilisés pour l'application. Une grande partie de sa fonctionnalité spatiale a été empruntée aux outils d'édition d'ArcInfo, qui ont été modifiés pour les besoins particuliers du projet Land Records. PUP utilise ArcStorm et Oracle pour leurs capacités de gestion et de coordination des données. ArcStorm et Oracle sont essentiels pour gérer l'intégrité de la base de données et simplifier son accès.

De nombreuses fonctions de PUP sont des capacités d'édition standard, telles que l'édition d'arcs, de polygones et d'étiquettes. Cependant, ArcStorm et Oracle apportent de nombreuses fonctionnalités supplémentaires qui ne sont pas disponibles via Arcedit seul, ni via Librarian, le système de classement des cartes d'ArcInfo. Certaines de ces capacités essentielles sont répertoriées ici.

Lors de la sélection d'une caractéristique à modifier, les utilisateurs n'ont plus à se soucier de la ou des couvertures dont ils ont besoin pour accéder à cette parcelle. Une fois que les couvertures de parcelles individuelles ont été jointes et chargées dans ArcStorm, les entités peuvent être sélectionnées à l'aide des outils de sélection graphique, Figure n°2, ou par une sélection d'attributs, Figure n°3.

Le fait qu'une seule parcelle provienne de deux couvertures, figure n°4, n'affecte pas l'opération, figure n°5.

Pour empêcher la modification simultanée des entités et des lignes, ArcStorm prend en charge le verrouillage au niveau des entités. Traditionnellement, lorsqu'une entité devait être modifiée, toutes les entités de la zone géographique de cette entité devaient également être mises à disposition pour l'édition. En raison de ce verrouillage du niveau de couverture, un grand nombre de fonctionnalités étaient inutilement interdites aux autres activités d'édition. Désormais, avec le verrouillage au niveau des entités d'ArcStorm, il y a une réduction substantielle du nombre d'entités verrouillées inutilement pendant la procédure de mise à jour. De plus, la fonctionnalité est vraiment verrouillée. Aucun autre processus ne peut modifier cette fonctionnalité. Grâce à l'utilisation de l'élément LOCK__ID, l'un des quatre éléments ArcStorm nécessite une couverture pour l'entrée, AS sait que cette fonctionnalité est actuellement utilisée. Ce verrouillage est activé par le processus d'extraction des entités de la base de données, ce qui crée une couverture locale temporaire et des copies des tables attributaires.

Les tables Oracle sont également verrouillées via l'utilisation d'un champ LOCK__ID, si elles sont enregistrées auprès d'ArcStorm. L'utilisation du LOCK__ID est la même pour la ligne Oracle que pour une entité Arc. La principale différence avec la ligne Oracle est qu'Oracle ne vérifie pas automatiquement la présence de ce champ, ni son contenu, et donc une application Oracle peut modifier par erreur son contenu même si elle peut être impliquée dans une autre transaction. Ce projet implémentera le verrouillage Oracle de lignes individuelles via des conditions dans les procédures qui accèdent aux tables Oracle en vérifiant le contenu de LOCK__ID.

Schéma de carrelage dépendant de la densité

Pour accélérer le processus de recherche dans la base de données afin de trouver les caractéristiques d'intérêt, une structure de tuilage transparente est utilisée par ArcStorm. Il s'agit d'un schéma rectangulaire créé par l'utilisateur de deux manières. Soit l'utilisateur spécifie le nombre de tuiles qu'il veut, soit il spécifie le nombre maximum de fonctionnalités qu'il veut par tuile. Dans un exemple du premier cas, l'utilisateur spécifierait qu'il souhaite 16 tuiles. ArcStorm créerait alors une grille 4x4 de tuiles de taille égale pour la bibliothèque, figure 6. Cette méthode de tuilage serait acceptable si la bibliothèque contenait des couches d'entités uniformément réparties.

Dans ce dernier cas, l'utilisateur spécifierait qu'il ne souhaite pas plus de 500 entités par tuile et ArcStorm générerait une grille de rectangles de différentes tailles, chacun contenant moins que le nombre spécifié, Figure 7. Figures 8, 9 et 10 représentent des tuiles de 1000, 5000 et 10000 entités respectivement. Cette méthode de tuilage est préférable si les couches de la bibliothèque ont une distribution groupée. Pour générer ce type de structure de tuilage, l'utilisateur a besoin d'une couverture de points à utiliser comme indicateur de la distribution et de la densité des caractéristiques.

Pour de nombreux utilisateurs, une couverture décrivant avec précision cette distribution n'est pas disponible tant que les documents source ne sont pas complètement convertis. Si la base de données est nécessaire avant la fin du processus de conversion, l'utilisateur peut substituer une couverture d'indicateur. Pour la base de données initiale des registres fonciers, une couverture ponctuelle générée à partir des nœuds de la couverture des rues TIGER a été utilisée comme indicateur de substitution de la densité et de la distribution des caractéristiques.

Un test de trois systèmes de tuilage a été mené pour déterminer les performances associées à chacun dans la sélection, la vérification et la validation d'une seule parcelle à partir d'une base de données pilote de 14 000 parcelles. La surcharge de stockage associée à chaque schéma a également été déterminée, figure 11.

Performances du schéma de tuilage *

Heure de départ Arrivée frais généraux

# de fonctionnalités/mosaïque 10 000 :01 s :26 s 1:1 350 %

5 000 :01 s :21 s 1:18 85%

1 000 :01 s :27 s :50 420%

* Aucun lien, serveur et client ArcStorm sur la même machine et données montées localement. Base de données pilote de 1400 colis.

Les mises à jour des entités et de leurs lignes associées se produisent dans la même transaction, garantissant ainsi que les entités spatiales sont toujours cohérentes avec leurs attributs. Si un problème survient lors de l'enregistrement et qu'il ne se termine pas, les données d'origine sont toujours intactes. Aucune modification n'est apportée tant que la transaction n'est pas terminée avec succès. Les mises à jour sont effectuées en retirant les fonctionnalités et les lignes associées de la base de données, en les modifiant, puis en les réenregistrant, ou ce qui est plus communément appelé leur validation dans la base de données. Le processus de vérification des entités crée une couverture temporaire et des tables temporaires pour les attributs. Les modifications sont publiées dans ces fichiers et ne deviennent permanentes qu'une fois les données validées.

Oracle effectue des vérifications sur les données publiées dans les tables attributaires pour s'assurer que les valeurs saisies sont uniques pour les champs clés et sont valides pour les données catégorielles. Il vérifie également que les relations parent-enfant sont maintenues. Par exemple, si une table est liée à une autre table et qu'elles sont liées par une clé primaire, alors pour chaque ligne de la table enfant, il doit y avoir une ligne dans la table parent. Toute tentative d'ajouter ou de supprimer une ligne de l'une sans l'autre entraînera une erreur. ArcStorm vérifie les entités entrantes pour s'assurer qu'elles se trouvent dans une certaine zone géographique et vérifie également que les nouvelles entités correspondent topologiquement aux entités existantes, c'est-à-dire que les arcs ne se coupent pas sans la présence d'un nœud. Une autre fonctionnalité utile est la vérification des devises. Grâce à l'utilisation d'horodatages, Oracle peut vérifier si une fonctionnalité a expiré ou n'est pas encore activée. Grâce à l'utilisation de TRANSACTION__ID, ArcStorm garantit que l'identifiant des fonctionnalités n'est pas supérieur à l'identifiant actuel de la table GENERATOR.

À l'aide de TRANSACTION__ID d'ArcStorm et d'EVENT ID d'Oracle, l'historique de la base de données et des fonctionnalités individuelles est conservé, permettant le développement de vues historiques et le suivi des modifications apportées à la base de données. Toutes les modifications apportées à la base de données sont stockées dans un journal du service météo. Les entrées comprennent le type, la date et l'auteur de la transaction. Cette fonction permet à l'utilisateur de déterminer rapidement l'existence et la date d'une session d'édition et par qui elle a été réalisée.Cela fournit également un élément essentiel des métadonnées d'un ensemble de données et crée une mémoire institutionnelle sur un ensemble de données.

ArcStorm et Oracle offrent tous deux une protection contre les accès non autorisés à la base de données. Seuls les propriétaires ou les groupes désignés peuvent modifier le contenu des entités de bibliothèque ou des tables Oracle enregistrées auprès d'ArcStorm. Seul l'administrateur de la base de données ArcStorm peut modifier le schéma de la base de données.

Pour gérer le schéma de la base de données, ArcStorm inclut SchemaEdit, qui fournit un ensemble complet d'outils de création, de saisie, de modification et de gestion de base de données.

Avec plus de 600 transactions derrière nous, nous avons pensé qu'il était temps de partager certaines de nos conclusions et découvertes sur ArcStorm et Oracle. Comme pour tout nouveau produit logiciel, il y avait un certain nombre de choses à apprendre.

Comme l'un des nombreux Nor'easters que la côte Est des États-Unis a connu cet hiver, cette tempête se déplace parfois très lentement. Bien que cela reste nettement plus rapide que le traitement des couvertures et des tables, en particulier lorsque la zone d'intérêt s'étend sur plusieurs couvertures, l'extraction et l'insertion d'entités dans la base de données peut prendre plusieurs minutes. Les exigences de temps augmentent considérablement lorsque le client et le serveur se trouvent sur des emplacements distincts sur un WAN. Dans le comté de Chester, le Bureau of Land Records et le Department of Computing and Information Services sont connectés via une ligne T1, et les cas d'engagements prenant 15 à 20 minutes n'étaient pas rares lorsque le réseau était occupé. Cependant, les transactions se sont terminées en beaucoup moins de temps, lorsque les lignes associées ont été omises de la transaction.

La quantité d'espace disque requise pour charger les données dans ArcStorm variait en fonction du seuil de densité sélectionné pour le schéma de tuilage, figure 7. Comme également cité dans la figure 7, la diminution du nombre maximal d'entités par tuile de 95 % a augmenté les besoins de stockage. de 600 %. L'absence de changements significatifs dans les vitesses d'accès et de paiement soulève la question de savoir si la pénalité en termes d'espace de stockage en vaut la peine étant donné l'absence d'amélioration des performances, voire de dégradation, lors de la vérification des fonctionnalités ? Une autre inefficacité découverte est la définition du PHASE__ID pour les lignes Oracle en tant que type de données entier. Il s'agit d'un type de données de 38 octets dans Oracle et étant donné la fonction de ce champ, autant d'espace est inutile.

Même si l'influence des limites des carreaux est considérablement réduite, elles sont toujours évidentes. Plus précisément, si un polygone est divisé par une tuile ArcStorm, il reçoit un point d'étiquette supplémentaire pour le nouveau polygone. De plus, le point d'étiquette d'origine est déplacé. Lors du paiement, seul le point d'étiquette d'origine est conservé, mais son emplacement n'est plus celui d'origine. Dans ce projet qui présentait un sérieux problème, car l'identifiant de la parcelle est basé sur son emplacement géographique, obtenant sa valeur unique à partir de ses coordonnées xy. Le déplacement de l'emplacement a rendu le code PIN incorrect.

Lorsqu'une fonction est sélectionnée et extraite pour modification, toutes les fonctions partageant une fonction commune sont également verrouillées. Il s'agit d'une fonction de sécurité qui empêche les modifications incohérentes. Cependant, si la couche en cours d'édition a des fonctionnalités étendues, une grande partie de la couche finit par être verrouillée. Au début de ce projet, les emprises routières étaient stockées dans la couche parcellaire. Cependant, si une parcelle adjacente à une route, dont la plupart le sont, était extraite, l'emprise de la route pour l'ensemble du comté et les parcelles adjacentes étaient verrouillées. Cela a essentiellement verrouillé l'ensemble de la couche de parcelles de toute autre modification. On espère que le placement de l'emprise dans une couche différente et l'ajout de lignes de rupture à intervalles réguliers résoudront ce problème.

Plusieurs fois, lors de la sélection d'une caractéristique, un utilisateur souhaite également sélectionner des caractéristiques adjacentes. Par exemple, si les limites d'une parcelle doivent être déplacées, l'utilisateur doit intégrer les parcelles voisines à l'ensemble récupéré. Pour ce faire à partir d'ArcEdit, PUP démarre une session arcplot et effectue un ASELECT ADJACENT. Malheureusement, ASELECT ne prend pas en charge l'indexation croisée des tuiles. Cela signifie que les entités qui tombent de l'autre côté d'une limite de tuile ArcStorm ne sont pas sélectionnées. Ce problème devrait être corrigé dans la prochaine version.

Si un problème système survient lors de l'extraction ou de l'archivage, la base de données est souvent laissée dans un état où la transaction ne peut pas être libérée. Plus précisément, si le disque se remplit ou si le serveur émet un avertissement de délai d'attente NFS lors de l'archivage, la base de données peut rester dans un état incohérent et doit être récupérée. RECOVERDB l'utilitaire de récupération de base de données, a bien fonctionné à chaque fois. Le problème cependant est le nombre de fois que nous avons dû l'utiliser.

Le processus de mise à jour des propriétés met à jour la base de données Oracle à plusieurs moments. Par exemple, lorsqu'une demande a été soumise par un développeur pour subdiviser une parcelle de terrain, une ligne est ajoutée à une file d'attente de demandes. Cette file d'attente d'événements est présentée à l'utilisateur du PUP pour sélectionner une application sur laquelle travailler. Lorsqu'ils sélectionnent une application, cette ligne doit être expirée et une nouvelle ligne insérée indiquant que le travail a commencé, par qui et à quelle heure. Cela alertera la personne suivante que cette application a déjà été attribuée et qu'elle doit en chercher une autre.

Au début du projet, une décision de conception a été prise pour stocker tout ce qui va modifier les tables Oracle, dans Oracle en tant que procédures. Cependant, lors de l'exécution, il a été découvert que les procédures ne pouvaient pas être appelées avec une variable comme paramètre. En raison de la syntaxe nécessaire pour appeler la procédure, la variable n'a jamais été résolue et a donc été passée en tant que littéral. La seule façon d'appeler une procédure était d'utiliser une constante. Cette restriction a éliminé cette option.

L'option d'utiliser une fonction s'est également avérée être un problème car l'intégrateur de base de données exige qu'elle soit utilisée dans une instruction select. Tant que l'instruction SQL n'a pas modifié la base de données, par ex. incrémenter un nombre, cela a bien fonctionné. Mais si la déclaration modifie la base de données de quelque manière que ce soit, par ex. met à jour, insère ou supprime un enregistrement, SQLPLUS rejette l'instruction.

Par conséquent, la seule solution consistait à implémenter toutes les mises à jour, insertions et suppressions dans AML. Ensuite, toutes les instructions SQL sont envoyées à Oracle via l'instruction DBMSEXECUTE d'AML. Jusqu'à présent, c'est une solution acceptable.

Si une base de données est copiée d'un serveur à un autre en utilisant unix cp -r, les index doivent être recréés et les TRANSACTION__ID doivent être synchronisés. Plus précisément, CREATE2DINDEX doit être exécuté sur chaque couche de la bibliothèque pour rétablir les index spatiaux, et CREATEINDEX doit être exécuté pour créer des index sur les éléments liés. CREATEINDEX doit également être exécuté sur l'OBJECT__ID. Si la base de données provient d'une machine dont le TRANSACTION.ID est supérieur à la nouvelle machine, ArcStorm n'autorisera pas l'extraction de ses fonctionnalités avec un CREATE__ID supérieur au TRANSACTION.ID actuel. Vous pouvez le tromper en répétant la vérification jusqu'à ce que TRANSACTION.ID soit incrémenté pour égaler les fonctionnalités CREATE__ID. La commande ArcStorm cpdb n'a pas encore été utilisée à cette fin.

Après avoir installé ArcStorm, il est essentiel de modifier la propriété en root et les modes en 6755 pour six commandes ArcStorm. Sans ces modifications, l'utilisation ultérieure de ces commandes et d'autres commandes ArcStorm peut entraîner des problèmes incompréhensibles. Ces modifications sont documentées vers la fin de la documentation d'installation, mais pas dans ArcDoc. Il serait utile de les avoir dans les deux endroits.

Tenter d'enregistrer une table Oracle avec REGISTERDBMS et HISTORY activé se plaint que la table n'existe pas. Si vous le créez en premier, cela indique qu'il existe déjà. ADDHISTORY est le seul moyen de suivre l'historique d'une table de SGBD. Le démon wservice doit être démarré dans le répertoire où vous souhaitez stocker le wservice.log. Ce journal fournit un historique précieux des événements et doit être stocké dans un endroit sûr et facile à trouver. La commande de dessin dans ArcEdit efface en quelque sorte les entités sélectionnées pour une bibliothèque. Après avoir redessiné l'affichage, les caractéristiques doivent être à nouveau sélectionnées.

Malgré les découvertes faites sur les bizarreries et les limitations d'ArcStorm, ArcStorm et Oracle représentent un bond en avant dans la capacité de gestion de base de données par rapport aux capacités ArcInfo précédentes. En offrant à l'utilisateur la liberté d'accéder à n'importe quelle fonction de la base de données, indépendamment de son emplacement géographique ou physique, ils le soulagent des tâches administratives fastidieuses et simplifient la tâche de faire le travail. Du point de vue des groupes de travail, savoir que les mises à jour de la base de données peuvent être effectuées sans crainte d'entrer en conflit avec les modifications de quelqu'un d'autre, réduit le temps et les efforts nécessaires pour maintenir la base de données. En offrant au DBA la possibilité de protéger l'intégrité de la base de données, tant dans la forme que dans le contenu, il peut utiliser son temps pour se concentrer plus efficacement sur les autres tâches à accomplir.

Quiconque envisage de développer une grande base de données d'enregistrements fonciers et n'utilise pas déjà ArcStorm et un SGBDR pour son système, devrait les considérer sérieusement comme des outils pour développer son système. Le temps investi pour franchir la courbe d'apprentissage sera plus que économisé dans l'accès et la gestion du système.


Présentation des extensions ArcMap

Une suite d'extensions est disponible pour améliorer votre travail dans ArcMap. Achetées et concédées sous licence séparément, les extensions s'intègrent parfaitement au produit principal. Certaines extensions améliorent l'analyse générale et la productivité, tandis que d'autres fournissent des solutions sur mesure pour des industries spécifiques.

Vous pouvez utiliser toutes les extensions que vous avez achetées pour ArcGIS Desktop dans ArcMap et ArcCatalog , ainsi que ArcGIS Pro , si l'extension est compatible. Les extensions compatibles avec ArcMap sont répertoriées ci-dessous, mais d'autres existent. Pour une liste complète des extensions disponibles pour tous les produits Esri, consultez la page Produits Esri.

La visualisation et l'analyse en trois dimensions incluent les applications ArcGlobe et ArcScene. Comprend également des outils de gestion des données de terrain et de géotraitement.

L'extension ArcGIS 3D Analyst étend ArcGIS pour devenir un système SIG 3D entièrement fonctionnel. Il vous permet de visualiser, gérer, analyser et partager vos données SIG 3D.

  • Affichez d'énormes volumes de données SIG 3D dans une vue globale à l'aide d'ArcGlobe, ou affichez des données au niveau du site dans un système de coordonnées local à l'aide d'ArcScene.
  • Gérez les données SIG 3D en modifiant les entités directement dans ArcGlobe ou ArcScene, et ajoutez des composants 3D aux données 2D via des outils de géotraitement.
  • Analysez les données SIG en trois dimensions à l'aide d'outils de géotraitement et utilisez des outils interactifs dans une vue 3D.
  • Partagez des vues 3D de données SIG en publiant Globe Services et partagez des outils d'analyse 3D via des services de géotraitement.

Outils statistiques avancés pour la génération de surfaces et l'analyse et la cartographie d'ensembles de données continus. Les outils d'analyse exploratoire des données spatiales fournissent des informations sur la distribution de vos données, les valeurs aberrantes mondiales et locales, les tendances mondiales, le niveau d'autocorrélation spatiale et la variation entre plusieurs jeux de données.

  • Analyse du temps de conduite
  • Routage point à point
  • Routage de flotte
  • Itinéraire
  • Définition de la zone de service
  • Analyse du chemin le plus court
  • Analyse d'itinéraire optimale
  • Analyse de l'installation la plus proche
  • Analyse origine-destination
  • Analyse de localisation-allocation
  • Modèles Gravity ou Huff
  • Utilisez un certain nombre de représentations schématiques : géographique, géoschématique et schématique.
  • Générez des schémas à partir de réseaux complexes.
  • Vérifiez la connectivité réseau.
  • Effectuer le contrôle qualité des données du réseau.
  • Visualisez à la fois la connectivité logique et physique.
  • Surveiller l'état du réseau.
  • Évaluer la prévision et la planification du réseau (modélisation, simulation, analyse comparative).
  • Visualisez des données non spatiales et connectées.
  • Modéliser les réseaux sociaux.
  • Générer des organigrammes.

Une large gamme de puissantes fonctionnalités de modélisation et d'analyse raster vous permet de créer, d'interroger, de mapper et d'analyser des données raster basées sur des cellules. L'extension ArcGIS Spatial Analyst permet également une analyse vectorielle raster intégrée et ajoute plus de 170 outils au cadre de géotraitement ArcGIS.

Conçu pour cartographier des objets qui se déplacent ou changent d'état dans le temps, Tracking Analyst vous permet d'effectuer les opérations suivantes :

  • Donnez vie aux données géographiques contenant des dates et des heures (données temporelles) en les ajoutant à une carte en tant que couche de suivi.
  • Suivez les objets en temps réel. Tracking Analyst prend en charge les connexions réseau aux unités du système de positionnement global (GPS) et à d'autres dispositifs de suivi et de surveillance afin que vous puissiez cartographier vos données en temps réel.
  • Symbolisez les données temporelles à l'aide de fenêtres temporelles et d'autres options spécialisées pour afficher des données qui changent dans le temps.
  • Lisez les données temporelles à l'aide de Tracking Analyst Playback Manager. Les données peuvent être lues à différentes vitesses en avant et en arrière.
  • Analysez les modèles dans les données temporelles en créant des horloges de données.
  • Créer et appliquer des actions sur des données temporelles.
  • Créez des animations de vos données à l'aide de l'outil Tracking Analyst Animation.
  • Affichez les données de suivi en 3D à l'aide d'ArcGlobe.

Lisez et utilisez directement plus de 100 formats de données vectorielles SIG courants, y compris de nombreuses spécifications GML en évolution. De plus, les données SIG peuvent être fournies dans une variété de formats. Par exemple, les sources de données, telles que les jeux de données de conception assistée par ordinateur (CAO) avancés avec des attributs d'entité étendus, les jeux de données MapInfo, les jeux de données Intergraph GeoMedia et divers fichiers GML, peuvent être consultés, affichés et utilisés directement dans ArcGIS. Fournissez des données SIG à d'autres dans une variété de formats de données vectorielles (plus de 70 formats pris en charge).

Dans la version 10, l'extension ArcGIS Data Interoperability est une configuration distincte disponible sur le support ArcGIS Desktop.

Analysez et validez les données avec une variété de contrôles qui vous permettent de vérifier à la fois les conditions spatiales et d'attribution. En outre, vous pouvez également échantillonner des données, valider des valeurs de métadonnées par rapport à un schéma et vérifier la valence des fonctionnalités du réseau. Les résultats de l'analyse ou de la validation sont stockés dans une table, où vous pouvez mettre à jour l'état de la correction ou de la vérification.

Effectuez des tâches de conversion raster en vecteur sur des documents numérisés, y compris l'édition de raster, l'accrochage de raster, le traçage de raster manuel et la vectorisation par lots.

Publiez des données, des cartes et des globes créés à l'aide d'ArcGIS Desktop . Avec ArcMap et ArcGlobe, vous pouvez créer des cartes et des globes interactifs, les publier avec ArcGIS Publisher et les partager via ArcReader.

  • Créer des workflows standardisés
  • Simplifiez la gestion et l'édition des données spatiales
  • Créer des emplois et affecter au personnel approprié
  • Automatisez les tâches et les processus à l'aide de modèles et de scripts
  • Suivez la progression du travail avec des rapports, des graphiques et des informations historiques sur les travaux
  • Communiquez automatiquement sur les événements importants de l'emploi et des données spatiales
  • Stockez toutes les informations sur les travaux dans un seul référentiel
  • Outils de géotraitement qui vous permettent de créer des surfaces d'identification d'obstructions basées sur les normes FAA FAR 77, ICAO Annex 14 et ICAO Annex 15.
  • Générez des éléments surround spécialisés pour les cartes aéronautiques.
  • Créez des fonctionnalités aéronautiques avec le Feature Builder et d'autres outils.
  • Référencement de données raster stockées en externe à partir d'une mosaïque
  • Gestion de l'enquête, de l'ensemble de données et de toutes les métadonnées personnalisées
  • Extraction de points de la géodatabase BIS qui sont liés à leurs jeux de données d'origine
  • Filtrage et visualisation des données raster dans ArcMap
  • Génération de surfaces personnalisées à partir de rasters

Produisez des données et des cartes conformes à plusieurs normes à l'aide d'outils d'édition et d'extraction spécialisés. Les spécifications de données prises en charge sont les suivantes :


Faites passer votre carte d'occupation du sol classée de 6 à 10 en quelques étapes simples grâce aux modes de fusion.

INSPIRE Metadata favorise le partage et la réutilisation ouverts des données

Jill Saligoe-Simmel | ArcGIS en ligne | 23 juin 2021

Une prise en charge améliorée et de nouveaux didacticiels pour INSPIRE Metadata dans ArcGIS favorisent le partage et la réutilisation des données ouvertes à l'aide de normes ouvertes internationales.

ArcGIS Indoors à la conférence des utilisateurs Esri 2021

Rejoignez-nous à l'Esri User Conference 2021 pour découvrir toutes les facettes de notre SIG indoor, ArcGIS Indoors. Découvrez et téléchargez notre agenda !

Nouveau dans ArcGIS Pro - Ajouter des sites d'application Web ArcGIS Business Analyst

Découvrez comment ajouter des sites de vos projets ArcGIS Business Analyst Web App à ArcGIS Pro en quelques clics.

Tests de compatibilité Esri pour réduire les risques informatiques

Tripp Corbett | ArcGIS | 23 juin 2021

Découvrez comment votre service informatique peut réduire les risques pour votre mission grâce aux tests de compatibilité, un avantage du programme de maintenance Esri.

L'avez-vous fait Alt+Q ? Recherche de commandes dans ArcGIS Pro 2.8

Découvrez comment la recherche de commandes peut augmenter votre productivité dans ArcGIS Pro 2.8 !

ArcGIS 360 VR désormais disponible sur ArcGIS Online

ArcGIS 360 VR est désormais disponible en tant qu'application Web sur ArcGIS Online sur toutes les principales plates-formes XR, mobiles et de bureau.

Donnez du sens à vos données BIM en tirant parti de la couche Bâtiment

David Alvarez | ArcGIS Pro | 22 juin 2021

L'intégration du SIG et du BIM est essentielle pour établir une vue complète des industries AEC à l'ère numérique.

ArcGIS Business Analyst Enterprise maintenant sur Linux

Daniel Stauning | Analyste d'affaires ArcGIS | 22 juin 2021

Une annonce d'ArcGIS Business Analyst Enterprise désormais disponible sur Linux et un aperçu de haut niveau sur la façon de démarrer et de fonctionner.

Nouveautés d'ArcGIS Workflow Manager 10.9

La solution de gestion des processus SIG comporte de nouvelles mises à jour intéressantes, notamment l'intégration de Survey123, l'orchestration automatisée des données, et plus encore !

Nouveautés de l'application Web ArcGIS Business Analyst (juin 2021)

Prévisualisez les fonctionnalités à venir telles que la mise à jour des données démographiques Esri U.S. 2021, les workflows simplifiés, les améliorations des tableaux de bord, etc.

Le 17 juin 2021 : Réflexions et ressources

L'année dernière, le 17 juin, Esri a lancé le Racial Equity Hub pour fournir des ressources aux individus et aux organisations afin de faire progresser l'équité raciale.

Metro East Park and Recreation District relie les parcs et sentiers communautaires

Metro East Park and Recreation District aide à maintenir un système public de parcs et de sentiers interconnectés dans tout leur district.

Créez et exploitez des rapports personnalisés pour soutenir l'objectif de votre mission

Nous améliorons la capacité des rapports en introduisant la possibilité de créer des rapports personnalisés avec différents champs qui s'appliquent à votre mission

Rationalisation de la logistique forestière : acheminement des camions de grumes

Découvrez comment les outils de routage configurables d'ArcGIS peuvent être utilisés pour rationaliser le routage des camions grumiers.

Carte en une minute : explorez les bas niveaux d'eau historiques du lac Mead à l'aide d'ArcGIS Living Atlas

Explorez les bas niveaux d'eau historiques du lac Mead en une minute (ou moins) à l'aide d'ArcGIS Living Atlas et de Landsat Explorer.

Analyse de distance simplifiée

Démystifier la complexité de l'analyse à distance

Conseils rapides pour maîtriser le générateur ArcGIS StoryMaps

Améliorez votre jeu StoryMaps avec de petites astuces qui font une grande différence.

Utilisation d'ArcGIS Excalibur pour la gestion des observations

La dernière version d'ArcGIS Excalibur (2021 Q2) a rendu plus facile que jamais la gestion structurée des observations.

Contenu communautaire ajouté aux fonds de carte et aux images

Votre contribution fait la différence ! Rejoignez la communauté en fournissant des commentaires, en créant des fonctionnalités à grande échelle ou en partageant des couches de données et des services.

Comment créer cette carte : combinaison de couches ArcGIS Living Atlas avec des modes de fusion

Les modes de fusion vous permettent de combiner des couches et de produire de nouvelles cartes.Les couches ArcGIS Living Atlas sont prêtes à être utilisées et à commencer à explorer.

Utilisation de panneaux d'infographie personnalisés dans Business Analyst

Découvrez comment créer et partager vos propres panneaux d'infographie personnalisés dans ArcGIS Business Analyst.

10 conseils pour les tableaux sur les mises en page

10 conseils pour l'utilisation de cadres de table sur les mises en page ArcGIS Pro.

Présentation du podcast Notes de terrain

Découvrez le premier épisode du podcast Field Notes !

Mises à jour des styles de fond de carte vectorielle OpenStreetMap dans ArcGIS Enterprise

Mise à jour des styles de fond de carte vectoriel OpenStreetMap dans ArcGIS Enterprise.

Améliorer le réseau Civil 3D multipatch avec les attributs AEC

Richard Horrocks | ArcGIS Pro | 11 juin 2021

Étapes pour développer les attributs des classes d'entités multipatch du réseau, en créant une jointure de table avec les classes d'entités Structure et Canalisation.


Si vous croyez Oracle, non, pas du tout. C'est parce qu'Oracle s'est donné beaucoup de mal pour l'éviter.

Le problème est que les lecteurs peuvent bloquer les écrivains et que les écrivains bloquent les lecteurs, et un écrivain doit attendre que tous les lecteurs aient terminé avec une ligne avant de pouvoir écrire. Cela retarde le processus d'écriture et son appelant. Des verrous exclusifs (pour l'écriture) sont maintenus jusqu'à la fin de la transaction, au cas où la transaction doit être annulée - cela empêche les autres transactions de voir la nouvelle valeur jusqu'à ce que la transaction soit validée.

En pratique, le verrouillage est généralement bien s'il n'y a pas trop de conflits, comme pour toute programmation concurrente. S'il y a trop de conflits pour une ligne/page/table (peu de serveurs de base de données verrouillent toute la base de données), cela entraînera l'exécution des transactions à tour de rôle plutôt que simultanément.

Oracle utilise la gestion des versions de ligne, où au lieu de verrouiller une ligne pour l'écrire, une nouvelle version de la ligne est créée à la place. Les lecteurs qui ont besoin de répéter leurs lectures se souviennent de la version de la ligne qu'ils ont lue. Cependant, une erreur se produira si un lecteur qui se souvient de ses lectures essaie de mettre à jour une ligne qui a été mise à jour par un autre écrivain depuis que cette transaction l'a lu, c'est pour arrêter les mises à jour perdues. Pour vous assurer que vous pouvez mettre à jour une ligne, vous devez dire que le SELECT est FOR UPDATE si vous faites cela, il prend un verrou - une seule transaction peut contenir une ligne FOR UPDATE à la fois, et une transaction en conflit doit attendre.

SQL Server 2005 et versions ultérieures prennent en charge Snapshot Isolation, qui est leur nom pour la gestion des versions de ligne. Encore une fois, vous devez demander des verrous de mise à jour si vous devez mettre à jour certaines données que vous venez de lire - dans SQL Server, utilisez WITH (UPDLOCK).

Un autre problème avec le verrouillage est la probabilité de blocages. C'est simplement là où deux transactions détiennent chacune un verrou sur une ressource dont l'autre a besoin, ou en général un cycle de transactions détiennent des verrous dont l'autre a besoin pour progresser. Le serveur de base de données détectera généralement ce blocage et tuera l'une des transactions, l'annulant - vous devez alors réessayer l'opération. Toute situation dans laquelle plusieurs transactions simultanées modifient les mêmes lignes peut entraîner un blocage. Le blocage se produira si les lignes sont touchées dans un ordre différent, il est très difficile d'appliquer l'ordre que le serveur de base de données utilisera (généralement, vous voulez que l'optimiseur sélectionne l'ordre le plus rapide, qui ne sera pas nécessairement cohérent entre les différentes requêtes).

En général, je suggérerais la même chose qu'avec le threading - utilisez des verrous jusqu'à ce que vous puissiez prouver qu'ils causent un problème d'évolutivité, puis découvrez comment rendre les sections les plus critiques sans verrou.


Désactiver les verrous de schéma

Dans un scénario multi-utilisateurs comme la géodatabase ArcSDE, plusieurs utilisateurs peuvent utiliser les données en même temps. Pour préserver l'intégrité des données et éviter les conflits avec d'autres utilisateurs, ArcGIS fournit des mécanismes de verrouillage de schéma automatisés, à savoir. Serrures partagées et serrures exclusives

Serrures partagées
ArcGIS acquiert automatiquement un verrou partagé sur un jeu de données individuel lorsqu'il est utilisé, par exemple, chaque fois qu'un utilisateur modifie ou interroge le contenu d'une classe d'entités ou d'une table. Cela permet de s'assurer que les autres utilisateurs ne peuvent pas apporter de modifications à l'ensemble de données sous-jacent et à son schéma pendant qu'il est en cours d'utilisation. N'importe quel nombre de verrous partagés peut être établi sur une seule classe d'entités ou table à un moment donné

Serrures exclusives
Un verrou exclusif est utilisé pour empêcher un jeu de données dans la géodatabase d'être utilisé par d'autres pour y apporter les modifications nécessaires, par exemple, pour modifier la structure du jeu de données. Une fois qu'un utilisateur disposant des autorisations appropriées commence à apporter des modifications à un jeu de données dans la géodatabase, ArcGIS établit automatiquement un verrou exclusif sur la table attributaire individuelle, la table de classe d'entités, la table raster ou tout autre jeu de données.
En général, ce n'est pas une bonne pratique de désactiver les verrous de schéma, mais il peut y avoir des scénarios où cela est nécessaire. A utiliser avec ATTENTION

Les verrous acquis par les services ArcGIS peuvent être désactivés en modifiant le fichier de configuration du service ArcGIS qui a la convention de dénomination <configuration name>.<service type>.cfg
Par exemple, MyService.MapServer.cfg, sous la balise <Properties>, ajoutez une nouvelle balise

<SchemaLockingEnabled>false</SchemaLockingEnabled> pour désactiver le verrouillage de schéma aut0.

(Remarque : La nouvelle configuration ne sera effective qu'après le redémarrage du SOM)

Vous pouvez également utiliser l'outil AGSSOM dans un modèle ou autrement pour démarrer/arrêter les services pendant que le verrouillage du schéma doit être supprimé

Lorsque vous travaillez avec Arcobjects et que vous utilisez IWorkspaceFactory pour créer un espace de travail pour travailler avec des couches, place par défaut des verrous de schéma. Il peut parfois être nécessaire de désactiver ce verrouillage. L'extrait de code ci-dessous montre comment désactiver le verrouillage de schéma tout en travaillant avec ArcObjects
//Code Java ArcObjects pour déverrouiller l'espace de travail


scExport = getServerContext() // Ouvrir l'espace de travail SDE
IWorkspaceFactory sdeWkspFactory = new IworkspaceFactoryProxy(scExport.createObject(“esriDataSourcesGDB.SdeWorkspaceFactory”))
// Ouvrir l'objet IworkspaceFactoryLockControlProxy
IWorkspaceFactoryLockControlProxy ipWsFactoryLockProxy = nouveau IWorkspaceFactoryLockControlProxy(sdeWkspFactory)
ipWsFactoryLockProxy.disableSchemaLocking()
IServerContext public getServerContext()
<
IServerContext sc = null
Serveur de chaîne = Constants.getAGSServer()
Utilisateur de chaîne = Constants.getAGSUser()
Chaîne pwd = Constants.getAGSPwd()
Domaine de chaîne = Constants.getAGSDomain()

essayer
<
ServerInitializer serverInitializer = new ServerInitializer()
serverInitializer.initializeServer(domaine, utilisateur, mot de passe)
Connexion ServerConnection = nouveau ServerConnection()
connection.connect(serveur)
IServerObjectManager som = connection.getServerObjectManager()
sc = som.createServerContext(“”, “”)
> attraper (Exception ex)
<
ex.printStackTrace()
>
retour sc
>
Trouver quel utilisateur/machine verrouille les calques
sélectionnez sde_id, sysname comme OSNAME, nodename comme lockmachine à partir de sde.process_information où sde_id dans
(sélectionnez sde_id distinct de sde.table_locks registration_id où registration_id dans
(sélectionnez registration_id distinct de sde.table_registry où table_name = ‘<layername>’
et propriétaire = ‘<owner>’))

Suppression du verrouillage de schéma ArcSDE

S'il existe toujours des verrous qui peuvent être dus à des connexions suspendues ou qui doivent être supprimés, le script sql de la base de données ci-dessous peut être utilisé pour supprimer le verrou de schéma.

supprimer de sde.table_locks où registration_id dans
(sélectionnez registration_id distinct de sde.table_registry où table_name = ‘<layername>’
et propriétaire = ‘<owner>’)

Remplacez <layername> par le nom réel du calque sur lequel le verrou doit être supprimé Remplacez <owner> par le propriétaire du calque


Informations avancées sur les transactions

Imbrication des transactions

Les transactions explicites peuvent être imbriquées. Ceci est principalement destiné à prendre en charge les transactions dans les procédures stockées qui peuvent être appelées à partir d'un processus déjà dans une transaction ou à partir de processus qui n'ont aucune transaction active.

L'exemple suivant montre l'utilisation prévue des transactions imbriquées. La procédure TransProc applique sa transaction quel que soit le mode de transaction de tout processus qui l'exécute. Si TransProc est appelée lorsqu'une transaction est active, la transaction imbriquée dans TransProc est largement ignoré et ses instructions INSERT sont validées ou annulées en fonction de l'action finale prise pour la transaction externe. Si TransProc est exécuté par un processus qui n'a pas de transaction en attente, le COMMIT TRANSACTION à la fin de la procédure valide effectivement les instructions INSERT.

La validation de transactions internes est ignorée par le moteur de base de données SQL Server. La transaction est soit validée, soit annulée en fonction de l'action entreprise à la fin de la transaction la plus externe. Si la transaction externe est validée, les transactions imbriquées internes sont également validées. Si la transaction externe est annulée, toutes les transactions internes sont également annulées, que les transactions internes aient été ou non validées individuellement.

Chaque appel à COMMIT TRANSACTION ou COMMIT WORK s'applique au dernier BEGIN TRANSACTION exécuté. Si les instructions BEGIN TRANSACTION sont imbriquées, une instruction COMMIT s'applique uniquement à la dernière transaction imbriquée, qui est la transaction la plus interne. Même si une TRANSACTION COMMIT nom_de_la_transaction dans une transaction imbriquée fait référence au nom de la transaction externe, la validation s'applique uniquement à la transaction la plus interne.

Il n'est pas légal pour le nom_de_la_transaction paramètre d'une instruction ROLLBACK TRANSACTION pour faire référence aux transactions internes d'un ensemble de transactions imbriquées nommées. nom_de_la_transaction peut se référer uniquement au nom de la transaction la plus externe. Si une TRANSACTION DE ROLLBACK nom_de_la_transaction l'instruction utilisant le nom de la transaction externe est exécutée à n'importe quel niveau d'un ensemble de transactions imbriquées, toutes les transactions imbriquées sont annulées. Si une instruction ROLLBACK WORK ou ROLLBACK TRANSACTION sans nom_de_la_transaction est exécuté à n'importe quel niveau d'un ensemble de transactions imbriquées, il annule toutes les transactions imbriquées, y compris la transaction la plus externe.

La fonction @@TRANCOUNT enregistre le niveau d'imbrication des transactions en cours. Chaque instruction BEGIN TRANSACTION incrémente @@TRANCOUNT de un. Chaque instruction COMMIT TRANSACTION ou COMMIT WORK décrémente @@TRANCOUNT de un. Une instruction ROLLBACK WORK ou ROLLBACK TRANSACTION qui n'a pas de nom de transaction annule toutes les transactions imbriquées et décrémente @@TRANCOUNT à 0. Une TRANSACTION ROLLBACK qui utilise le nom de transaction de la transaction la plus externe dans un ensemble de transactions imbriquées annule toutes les les transactions imbriquées et décrémente @@TRANCOUNT à 0. Lorsque vous n'êtes pas sûr d'être déjà dans une transaction, SELECTIONNER @@TRANCOUNT pour déterminer s'il s'agit de 1 ou plus. Si @@TRANCOUNT est égal à 0, vous n'êtes pas dans une transaction.

Utilisation de sessions liées

Les sessions liées facilitent la coordination des actions entre plusieurs sessions sur le même serveur. Les sessions liées permettent à deux sessions ou plus de partager la même transaction et les mêmes verrous, et peuvent travailler sur les mêmes données sans conflits de verrous. Les sessions liées peuvent être créées à partir de plusieurs sessions au sein de la même application ou à partir de plusieurs applications avec des sessions distinctes.

Pour participer à une session liée, une session appelle sp_getbindtoken ou srv_getbindtoken (via Open Data Services) pour obtenir un jeton de liaison. Un jeton de liaison est une chaîne de caractères qui identifie de manière unique chaque transaction liée. Le jeton de liaison est ensuite envoyé aux autres sessions pour être lié à la session en cours. Les autres sessions se lient à la transaction en appelant sp_bindsession, à l'aide du jeton de liaison reçu de la première session.

Une session doit avoir une transaction utilisateur active pour que sp_getbindtoken ou srv_getbindtoken réussisse.

Les jetons de liaison doivent être transmis du code d'application qui crée la première session au code d'application qui lie ensuite leurs sessions à la première session. Il n'y a pas d'instruction Transact-SQL ou de fonction API qu'une application peut utiliser pour obtenir le jeton de liaison pour une transaction démarrée par un autre processus. Certaines des méthodes qui peuvent être utilisées pour transmettre un jeton de liaison sont les suivantes :

Si les sessions sont toutes lancées à partir du même processus d'application, les jetons de liaison peuvent être stockés dans la mémoire globale ou transmis aux fonctions en tant que paramètre.

Si les sessions sont créées à partir de processus d'application distincts, les jetons de liaison peuvent être transmis à l'aide d'une communication interprocessus (IPC), telle qu'un appel de procédure distante (RPC) ou un échange de données dynamique (DDE).

Les jetons de liaison peuvent être stockés dans une table dans une instance du moteur de base de données SQL Server qui peut être lu par les processus souhaitant se lier à la première session.

Une seule session dans un ensemble de sessions liées peut être active à tout moment. Si une session exécute une instruction sur l'instance ou a des résultats en attente de l'instance, aucune autre session qui lui est liée ne peut accéder à l'instance tant que la session en cours n'a pas terminé le traitement ou n'annule l'instruction en cours. Si l'instance est occupée à traiter une instruction d'une autre des sessions liées, une erreur se produit indiquant que l'espace de transaction est en cours d'utilisation et que la session doit réessayer ultérieurement.

Lorsque vous liez des sessions, chaque session conserve son paramètre de niveau d'isolement. L'utilisation de SET TRANSACTION ISOLATION LEVEL pour modifier le paramètre de niveau d'isolement d'une session n'affecte pas le paramètre d'une autre session qui lui est liée.

Types de sessions liées

Les deux types de sessions liées sont locales et distribuées.

Session liée locale
Permet aux sessions liées de partager l'espace de transaction d'une seule transaction dans une seule instance du moteur de base de données SQL Server.

Session liée distribuée
Permet aux sessions liées de partager la même transaction sur deux ou plusieurs instances jusqu'à ce que l'intégralité de la transaction soit validée ou annulée à l'aide de Microsoft Distributed Transaction Coordinator (MS DTC).

Les sessions liées distribuées ne sont pas identifiées par un jeton de liaison de chaîne de caractères, elles sont identifiées par des numéros d'identification de transaction distribués. Si une session liée est impliquée dans une transaction locale et exécute un RPC sur un serveur distant avec SET REMOTE_PROC_TRANSACTIONS ON , la transaction liée locale est automatiquement promue en transaction liée distribuée par MS DTC et une session MS DTC est démarrée.

Quand utiliser les sessions liées

Dans les versions antérieures de SQL Server, les sessions liées étaient principalement utilisées pour développer des procédures stockées étendues qui doivent exécuter des instructions Transact-SQL au nom du processus qui les appelle. Le fait que le processus appelant transmette un jeton de liaison en tant que paramètre de la procédure stockée étendue permet à la procédure de rejoindre l'espace de transaction du processus appelant, intégrant ainsi la procédure stockée étendue avec le processus appelant.

Dans le moteur de base de données SQL Server, les procédures stockées écrites à l'aide du CLR sont plus sécurisées, évolutives et stables que les procédures stockées étendues. Les procédures stockées dans le CLR utilisent le SqlContext object pour rejoindre le contexte de la session appelante, pas sp_bindsession .

Les sessions liées peuvent être utilisées pour développer des applications à trois niveaux dans lesquelles la logique métier est incorporée dans des programmes distincts qui fonctionnent en coopération sur une seule transaction commerciale. Ces programmes doivent être codés pour coordonner soigneusement leur accès à une base de données. Comme les deux sessions partagent les mêmes verrous, les deux programmes ne doivent pas essayer de modifier les mêmes données en même temps. À tout moment, une seule session peut travailler dans le cadre de la transaction, il ne peut y avoir d'exécution parallèle. La transaction ne peut être commutée entre les sessions qu'à des points de rendement bien définis, par exemple lorsque toutes les instructions DML sont terminées et que leurs résultats ont été récupérés.

Codage efficace des transactions

Il est important de garder les transactions aussi courtes que possible. Lorsqu'une transaction est démarrée, un système de gestion de base de données (SGBD) doit contenir de nombreuses ressources jusqu'à la fin de la transaction pour protéger les propriétés d'atomicité, de cohérence, d'isolement et de durabilité (ACID) de la transaction. Si les données sont modifiées, les lignes modifiées doivent être protégées par des verrous exclusifs qui empêchent toute autre transaction de lire les lignes, et les verrous exclusifs doivent être maintenus jusqu'à ce que la transaction soit validée ou annulée. Selon les paramètres de niveau d'isolement de la transaction, les instructions SELECT peuvent acquérir des verrous qui doivent être maintenus jusqu'à ce que la transaction soit validée ou annulée. En particulier dans les systèmes avec de nombreux utilisateurs, les transactions doivent être aussi courtes que possible pour réduire les conflits de verrouillage des ressources entre les connexions simultanées. Les transactions de longue durée et inefficaces peuvent ne pas être un problème avec un petit nombre d'utilisateurs, mais elles sont intolérables dans un système avec des milliers d'utilisateurs. À partir de SQL Server 2014 (12.x), SQL Server prend en charge les transactions durables retardées. Les transactions durables retardées ne garantissent pas la durabilité. Consultez la rubrique Durabilité des transactions pour plus d'informations.

Directives de codage

Voici des lignes directrices pour le codage de transactions efficaces :

Ne nécessite pas d'entrée des utilisateurs lors d'une transaction.
Obtenez toutes les informations requises des utilisateurs avant qu'une transaction ne démarre. Si une entrée utilisateur supplémentaire est requise au cours d'une transaction, annulez la transaction en cours et redémarrez la transaction une fois l'entrée utilisateur fournie. Même si les utilisateurs répondent immédiatement, les temps de réaction humains sont considérablement plus lents que les vitesses des ordinateurs. Toutes les ressources détenues par la transaction sont conservées pendant une période extrêmement longue, ce qui peut entraîner des problèmes de blocage. Si les utilisateurs ne répondent pas, la transaction reste active, verrouillant les ressources critiques jusqu'à ce qu'elles répondent, ce qui peut ne pas se produire avant plusieurs minutes, voire plusieurs heures.

N'ouvrez pas une transaction en parcourant les données, dans la mesure du possible.
Les transactions ne doivent pas être commencées tant que toutes les analyses de données préliminaires ne sont pas terminées.

Gardez la transaction aussi courte que possible.
Une fois que vous connaissez les modifications à apporter, démarrez une transaction, exécutez les instructions de modification, puis validez ou annulez immédiatement. N'ouvrez pas la transaction avant qu'elle ne soit requise.

Pour réduire le blocage, envisagez d'utiliser un niveau d'isolement basé sur la gestion des versions de ligne pour les requêtes en lecture seule.

Utilisez intelligemment les niveaux d'isolement des transactions inférieurs.
De nombreuses applications peuvent être facilement codées pour utiliser un niveau d'isolement de transaction validé en lecture. Toutes les transactions ne nécessitent pas le niveau d'isolement des transactions sérialisables.

Utilisez intelligemment les options de simultanéité du curseur inférieur, telles que les options de simultanéité optimiste.
Dans un système avec une faible probabilité de mises à jour simultanées, la surcharge liée au traitement d'une erreur occasionnelle "quelqu'un d'autre a modifié vos données après l'avoir lue" peut être bien inférieure à la surcharge de toujours verrouiller les lignes au fur et à mesure qu'elles sont lues.

Accédez au moins de données possible lors d'une transaction.
Cela réduit le nombre de lignes verrouillées, réduisant ainsi les conflits entre les transactions.

Évitez autant que possible les astuces de verrouillage pessimistes telles que holdlock. Des indices tels que le niveau d'isolement HOLDLOCK ou SERIALIZABLE peuvent entraîner l'attente des processus même sur les verrous partagés et réduire la concurrence

Évitez d'utiliser des transactions implicites lorsque cela est possible Les transactions implicites peuvent introduire un comportement imprévisible en raison de leur nature. Voir Transactions implicites et problèmes de simultanéité

Concevoir des index avec un facteur de remplissage réduit La diminution du facteur de remplissage peut vous aider à empêcher ou à réduire la fragmentation des pages d'index et ainsi à réduire les temps de recherche d'index, en particulier lorsqu'ils sont récupérés à partir du disque. Pour afficher les informations de fragmentation des données et des index d'une table ou d'une vue, vous pouvez utilisersys.dm_db_index_physical_stats.

Transactions implicites et éviter les problèmes de concurrence et de ressources

Pour éviter les problèmes de concurrence et de ressources, gérez soigneusement les transactions implicites. Lors de l'utilisation de transactions implicites, la prochaine instruction Transact-SQL après COMMIT ou ROLLBACK démarre automatiquement une nouvelle transaction. Cela peut entraîner l'ouverture d'une nouvelle transaction pendant que l'application parcourt les données, ou même lorsqu'elle nécessite une entrée de l'utilisateur. Après avoir terminé la dernière transaction requise pour protéger les modifications de données, désactivez les transactions implicites jusqu'à ce qu'une transaction soit à nouveau requise pour protéger les modifications de données. Ce processus permet au moteur de base de données SQL Server d'utiliser le mode de validation automatique pendant que l'application parcourt les données et obtient les entrées de l'utilisateur.

De plus, lorsque le niveau d'isolement des instantanés est activé, bien qu'une nouvelle transaction ne maintienne pas de verrous, une transaction de longue durée empêchera la suppression des anciennes versions de tempdb .

Gestion des transactions de longue durée

UNE opération de longue durée est une transaction active qui n'a pas été validée ou annulée la transaction en temps opportun. Par exemple, si le début et la fin d'une transaction sont contrôlés par l'utilisateur, une cause typique d'une transaction de longue durée est un utilisateur démarrant une transaction puis partant pendant que la transaction attend une réponse de l'utilisateur.

Une transaction de longue durée peut causer de sérieux problèmes à une base de données, comme suit :

Si une instance de serveur est arrêtée après qu'une transaction active a effectué de nombreuses modifications non validées, la phase de récupération du redémarrage suivant peut prendre beaucoup plus de temps que le temps spécifié par le intervalle de récupération option de configuration du serveur ou par ALTER DATABASE . SET TARGET_RECOVERY_TIME option. Ces options contrôlent respectivement la fréquence des points de contrôle actifs et indirects. Pour plus d'informations sur les types de points de contrôle, consultez Points de contrôle de base de données (SQL Server).

Plus important encore, bien qu'une transaction en attente puisse générer très peu de journal, elle retarde indéfiniment la troncature du journal, ce qui entraîne la croissance et le remplissage du journal des transactions. Si le journal des transactions se remplit, la base de données ne peut plus effectuer de mises à jour. Pour plus d'informations, consultez le Guide d'architecture et de gestion du journal des transactions SQL Server, Dépanner un journal des transactions complet (erreur SQL Server 9002) et Le journal des transactions (SQL Server).

Découvrir les transactions de longue durée

Pour rechercher des transactions de longue durée, utilisez l'un des éléments suivants :

sys.dm_tran_database_transactions

Cette vue de gestion dynamique renvoie des informations sur les transactions au niveau de la base de données. Pour une transaction de longue durée, les colonnes particulièrement intéressantes incluent l'heure du premier enregistrement du journal (database_transaction_begin_time), l'état actuel de la transaction (état_de_transaction_base_de_données) et le numéro de séquence du journal (LSN) de l'enregistrement de début dans le journal des transactions (database_transaction_begin_lsn).

Cette instruction vous permet d'identifier l'ID utilisateur du propriétaire de la transaction, afin que vous puissiez potentiellement retrouver la source de la transaction pour une résiliation plus ordonnée (la valider plutôt que l'annuler). Pour plus d'informations, consultez DBCC OPENTRAN (Transact-SQL).

Arrêter une transaction

Vous devrez peut-être utiliser l'instruction KILL. Cependant, utilisez cette instruction avec beaucoup de prudence, en particulier lorsque des processus critiques sont en cours d'exécution. Pour plus d'informations, consultez KILL (Transact-SQL).


Voir la vidéo: Pass sanitaire: Voici 4 raisons qui font que ça ne passe pas. (Octobre 2021).