Suite

Comment configurer une relation ArcMap avec une table de MS SQL Server 2012


C'est la première fois que je travaille avec des données directement à partir de MS SQL Server 2012, et je ne sais pas si je peux les utiliser dans une relation dans ArcMap.

J'ai une table dans MS SQL Server, que j'ai importée dans ArcMap via l'option Connexions à la base de données. Lorsque j'ajoute cette table à ArcMap à l'aide du bouton standard Ajouter des données, une boîte de dialogue Nouvelle couche de requête apparaît :

ArcMap requiert un champ d'identifiant unique, mais cette table n'en a pas. J'ai choisi un des champs existants, même s'il n'est pas unique (le premier problème ?).

Je peux maintenant afficher la table dans ArcMap et je peux configurer une relation entre cette table et une classe d'entités, en fonction du champ BoreholeID correspondant.

Cependant, lorsque je sélectionne un forage dans la classe d'entités, ou une ligne dans le tableau, la relation est affichée mais grisée :

  • Puis-je utiliser une table de MS SQL Server Management Studio dans une relation ArcMap ?
  • Si oui, la cause du problème est-elle l'absence d'un champ ID unique ?
  • Si non, qu'est-ce qui pourrait être à l'origine du problème ?

ArcGIS utilise fréquemment des "colonnes rowid enregistrées". Ceux-ci sont

  • colonnes INTEGER (32 bits) avec
  • valeurs positives non nulles (1 - 2^31-1),
  • qui sont définis comme NON NULL,
  • contenir des valeurs uniques, et
  • sont reproductibles sur des requêtes ultérieures

ArcGIS utilise ces colonnes pour maintenir la relation entre les lignes des tables et les graphiques de la carte. Chaque fois que vous enregistrez une table avec une géodatabase d'entreprise, ArcGIS crée une colonne rowid définie SDE si elle n'est pas disponible auparavant.

Les couches de requête sont ne pas doivent être enregistrés auprès de la géodatabase, mais ils doivent avoir une colonne rowid avec les mêmes caractéristiques. Beaucoup de gens essaient de tromper les règles en utilisant une colonne calculée de numéro de ligne à la place d'un rowid, mais cela ne fera que créer ce que la documentation appelle un "comportement incohérent" lors de la tentative de mapper des objets spatiaux sur des lignes de table (et vice versa, comme dans une opération d'identité).

Vous devrez ajouter une colonne rowid à cette table pour l'utiliser dans une couche de requête.


Tout d'abord, clarifions deux ou trois choses. Lorsque vous dites que vous voulez ajouter une table à partir deMS SQL Server Management Studio 2012, ce que vous voulez vraiment faire est d'ajouter une table à partir deServeur MS SQL. Le studio de gestion est simplement l'interface utilisateur pour interagir avec la base de données elle-même.

Deuxièmement, je suppose que cette base de données SQL Server ne contient pas ArcSDE. Si tel est le cas, le chargement d'une table devrait être aussi simple que l'ajout d'une table standard et ne serait pas une couche de requête.

ArcGIS est assez pointilleux lorsqu'il s'agit de traiter des bases de données en dehors de l'environnement SDE. Vous devez vous assurer que vous avez utilisé les pilotes mis à jour pour le serveur MS SQL. Vous faites probablement comme vous êtes en mesure d'ajouter la table. Si vous pouvez obtenir les données sous forme de table dans ArcGIS, vous devriez pouvoir les utiliser dans le cadre d'une jointure ou d'une relation, quelle que soit la base de données dans laquelle elles sont stockées.

Comme vous l'avez deviné, un identifiant unique ou son absence est le raccrochage. Comme vous le savez, avec toute table autonome créée via l'environnement ArcGIS, unIdentifiant de l'objetest créé. Il s'agit d'un ID unique qui permet à ArcGIS d'identifier n'importe quelle ligne individuelle. Lorsque vous importez une couche à partir d'une base de données en dehors de l'environnement ArcGIS, vous devez spécifier le champ qui sera utilisé à la place duIdentifiant de l'objet. Si vous ne spécifiez pas un champ comme celui-ci, vous pourrez ajouter une table, mais vous ne pourrez pas exécuter d'options nécessitant l'indexation des lignes. Cela inclut tout type de jointures ou de relations et d'autres opérations spatiales.

Dans l'image ci-dessous, je charge dans un tableau. Le premier attribut répertorié estgid. Comme vous pouvez le voir, cela montre qu'il estNon Nullable. C'est un deuxième critère important, mais pas obligatoire au départ. Une erreur sera générée si des valeurs NULL sont trouvées, mais pas si le champ autorise les valeurs NULL. C'est le domaine que je choisirai commeIdentifiant uniqueattribut.

Même si cette couche est une couche spatiale, les étapes sont également les mêmes pour une table non spatiale.

Maintenant, revenons à votre problème et à quelques options de solutions. Votre table n'a pas de champ ID unique. Vous en avez besoin. Vous avez plusieurs options.

  1. Ajoutez l'équivalent SQL Server d'un champ Numérotation automatique à votre table. Cette méthode créera un identifiant unique qui ne changera pas par rapport à une ligne particulière. Une fois qu'un ID est attribué, il persistera et ne se répétera jamais ni ne sera dupliqué.
  2. Créez une vue dans SQL Server, basée sur votre table existante, et ajoutez-y un champ Numéro automatique. Cette méthode créera un Identifiant unique similaire à un ArcGIS Identifiant de l'objet. Cela devrait NE PAS être utilisé comme base pour une jointure ou une relation, car l'attribution d'ID aux lignes est uniquement basée sur les changements d'ordre de tri. Il suffit toutefois de remplir l'exigence d'ID de table unique pour une couche de requête. Voici un exemple de code pour cette instance :

    CREATE VIEW VIEW_NM AS SELECT Row_number() OVER(ORDER BY "EventName" DESC, "BoreholeID") AS tbl_id, "EventName", "Method", "BoreholeID" FROM yourtable

    ------ Éditer ----- Une préoccupation a été soulevée selon laquelle l'utilisation d'une fonction Row_number() ne produirait pas un ID unique adéquat, car elle pourrait renvoyer des fonctionnalités différentes. Dans le cas que j'ai fourni, c'est vrai, dans la mesure où leCommandé parle champ n'est pas unique. Par conséquent, vous devez vous assurer que vous incluez une combinaison de champs dans cette fonction qui renverra un ordre de tri unique ou des valeurs lorsqu'elles seront converties en nombre. Ceux-ci garantiront qu'une entité particulière renverra le même ID d'objet, quelle que soit la requête placée contre elle dans ArcGIS. J'ajoute "BoreholdID" auCommandé parsection.

    Un problème qui peut survenir lors de l'utilisation d'une vue est le type de champ qu'ArcGIS appliquera à ce champ "tbl_id". Il peut le voir comme un type de champ qu'il n'est pas capable de gérer, vous devrez donc peut-être le convertir en unEntiertype de champ. Voici comment j'ai fait quelque chose de similaire avec une vue dans PostgreSQL :

    SELECT (int4(Row_number() OVER(ORDER BY "EventName" DESC)) AS tbl_id

    La syntaxe de SQL Server peut être légèrement différente. Ça pourrait êtreentierà la place deint4.

  3. Une autre façon de créer cet ID unique serait d'utiliser l'outil Créer une table de requête. Cet outil vous permet de sélectionner une table, d'afficher ou de créer une requête SQL personnalisée à l'aide de tables de base de données et de les afficher dans ArcGIS sous forme de couche ou de table autonome. L'un des paramètres de l'outil est de savoir comment créer leClédomaine. Cela se fait à nouveau en sélectionnant un ou plusieurs champs présents dans la couche de requête, qui seront utilisés pour créer dynamiquement l'ObjectID. C'est à peu près la même chose que la fonction Row_number(), car elles créent toutes deux un identifiant unique basé sur les données du résultat de la requête. L'un le fait simplement du côté de la base de données, l'autre le gère dans ArcGIS. Un avantage potentiel de cette méthode est la possibilité facile de l'incorporer dans le cadre d'un script python. Un exemple est présenté au bas du document d'aide.

En règle générale, vous voulez avoir un attribut d'identifiant unique pour chaque table, qu'elle soit spatiale ou attributaire, que vous créez. La plupart des bases de données fonctionnent plus efficacement sur les tables où cet attribut existe et est désigné comme clé primaire ou similaire. Il permet de créer des index et, dans de nombreux cas, les fonctionnalités d'édition et de sélection sont restreintes lorsqu'un identifiant unique n'est pas présent.

Quoi qu'il en soit, essayez-le et voyez si cela fonctionne. Comme je l'ai mentionné, ArcGIS peut être très particulier lors de l'ajout de couches de requête. Vous pouvez également rencontrer d'autres problèmes avec les types de champs qui se traduisent différemment de la façon dont ils sont définis dans la base de données, de la façon dont ArcGIS les interprète.

Ce document d'aide peut vous aider à vous assurer que vous transtypez les types de données de votre table vers ceux qui seront reconnus par ArcGIS. Types de données SQL Server pris en charge dans ArcGIS


Nombre de lignes SQL Server pour toutes les tables d'une base de données

Je suis un testeur de bases de données et l'une de mes tâches consiste à obtenir le nombre de lignes de toutes les tables de la base de données source et à les comparer aux nombres de lignes de table correspondants dans la base de données cible. Comment obtenir le nombre de lignes de toutes les tables d'une base de données SQL Server ? Quelles sont les différentes approches pour obtenir ces informations ? Consultez cette astuce pour obtenir des réponses à ces questions et à d'autres.

Solution

C'est une étape courante dans tout projet ETL de valider le nombre de lignes entre les bases de données source et cible dans le cadre de la phase de test. Obtenir le nombre de lignes de chaque table une par une et comparer et consolider les résultats peut être une tâche fastidieuse. Par conséquent, tout script/solution qui peut obtenir les informations sur le nombre de lignes de toutes les tables d'une base de données peut être vraiment utile et efficace, réduisant ainsi considérablement l'effort impliqué. Dans cette astuce, nous verrons quatre approches différentes pour obtenir le nombre de lignes de toutes les tables d'une base de données SQL Server.

Jetons un coup d'œil à chacune des approches :

  • Affichage du catalogue sys.partitions
  • sys.dm_db_partition_stats Vue de gestion dynamique (DMV)
  • Procédure stockée du système sp_MSforeachtable
  • Fonction COALESCE()

4 réponses 4

Cela ressemble à un paramètre de délai d'attente. Ainsi, votre SSMS pense que cela prend trop de temps et annule la connexion pour vous. Les rôles du serveur SQL reviennent. Mais il y a de l'aide. Vous n'êtes pas la première personne à rencontrer cela.

Pour tous ceux qui ne veulent pas cliquer sur le lien. Voici la réponse gagnante :

Après avoir rencontré la même erreur, je suis tombé sur le réglage corrent.

Dans Management Studio, dans le menu Outils, sélectionnez Options, puis cliquez sur « Designers ». Il existe une option appelée « Remplacer la valeur du délai d'expiration de la chaîne de connexion pour les mises à jour du concepteur de table : » Dans la zone « Délai d'expiration de la transaction après : », vous verrez les 30 secondes magiques

Ouvrez SQL Server Management Studio--> Menu Outils--> Options--> Onglet Concepteurs--> Concepteur de table et de base de données--> Augmentez le délai d'attente de 30 secondes à 65535 secondes.--> OK

//Maintenant, vous pouvez enregistrer vos modifications de table. // J'espère que cela vous aidera et consultez mon blog @ : //www.ogolla.blogspot.com

Cette réponse m'est venue dans Google même si j'ajoutais un index, sans changer de colonne.

Il existe une meilleure façon d'effectuer des modifications à long terme :

1) Apportez les modifications souhaitées à la conception de la table. N'appuyez pas sur "Enregistrer".

2) Dans SSMS, cliquez sur Concepteur de tables. Générez ensuite le script de modification.

3) Dans la fenêtre, vous verrez un script qui, une fois exécuté, effectuera les modifications que vous avez mises en file d'attente dans le concepteur.

4) Vous pouvez enregistrer et exécuter ce script dans SMSS ou ce que vous pouvez faire lorsque vous avez confiance, c'est "copier" le script de cette fenêtre dans le presse-papiers. Dites "non" à l'enregistrement du fichier. Fermez ensuite le concepteur SANS ENREGISTRER (en perdant techniquement vos modifications de base de données) et ouvrez une nouvelle fenêtre de requête. Collez le script de modification puis exécutez le script. Vos modifications seront ensuite appliquées à la base de données même si cela prend des années.


Comment vider une base de données Microsoft SQL Server dans un script SQL ?

Existe-t-il un moyen d'exporter une base de données Microsoft SQL Server vers un script SQL ?

Je recherche quelque chose qui se comporte de manière similaire à mysqldump, en prenant un nom de base de données et en produisant un script unique qui recréera toutes les tables, procédures stockées, réinsérera toutes les données, etc.

J'ai vu http://vyaskn.tripod.com/code.htm#inserts, mais je veux idéalement quelque chose pour tout recréer (pas seulement les données) qui fonctionne en une seule étape pour produire le script final.


9 réponses 9

D'après ma compréhension de ce problème, il s'agit d'un problème "HOP".

c'est-à-dire que vous essayez d'utiliser le serveur A pour relayer vos informations de connexion (avec SSPI) au serveur B.

Dans SQL Server 2005, ils ont ajouté toute une série de problèmes de sécurité qui rendent cela plus difficile qu'il ne devrait l'être. Les mots « Authentification Kerberos » deviendront le bain de la vie de la plupart des administrateurs système/DBA. Il est effectivement utilisé pour l'authentification unique.

Voici les bases de ce dont vous avez besoin. 1) Les serveurs (A et B) doivent être configurés dans Active Directory (AD) avec la délégation pour Kerberos activée. (ceci est défini via votre panneau d'administration Active Directory)

2) Le compte de service sous lequel vos serveurs SQL s'exécutent doit également avoir la délégation activée (cela est également défini via votre panneau d'administration Active Directory). - s'ils ne s'exécutent pas sous un compte de service, vous devez en créer un.

3) Les serveurs doivent avoir des SPN définis pour l'instance, l'HTE et le nom de la machine. (En utilisant un outil appelé SetSPN dans les outils de support Windows)

4) Vous devrez peut-être définir votre base de données sur « digne de confiance »

ALTER DATABASE SET digne de confiance sur

5) Une fois tout cela terminé, redémarrez vos instances.

6) Ensuite, essayez à nouveau de créer votre serveur lié.

Enfin, vous pouvez tester votre connexion à SQL Server. Cela devrait fonctionner correctement si tout est configuré correctement.

Cela vous indiquera votre type d'authentification de connexion.

Vous voulez obtenir « KERBEROS » ici et non « NTLM ».

C'est une pente glissante, KERBEROS et la délégation Pass-through, restez-y et vous finirez par le comprendre.


Installer

Pour commencer, assurez-vous d'avoir une copie d'OGR2OGR version 1.8 ou supérieure (les versions antérieures n'ont pas le pilote MSSQL installé). Vous pouvez soit le construire à partir de la source fournie sur la page GDAL, soit, pour plus de commodité, télécharger et installer des binaires Windows précompilés fournis dans le package OSgeo4W.

Maintenant, configurons des données de test dans une table SQL Server que nous souhaitons exporter. Pour tester la gamme complète des fonctionnalités OGR2OGR (ou devrait-on dire « la gamme complète des messages d'erreur que vous pouvez créer » ?), je vais créer une table qui contient deux colonnes de géométrie différentes - une géométrie d'origine et une géométrie tamponnée , renseigné à l'aide d'une gamme de différents types de géométrie :

Voici à quoi ressemble le contenu de ce tableau dans l'onglet Résultats spatiaux SSMS :


MS SQL Server ralentit avec le temps ?

L'un d'entre vous a-t-il vécu les situations suivantes et avez-vous trouvé une solution :

Une grande partie du back-end de notre site Web est MS SQL Server 2005. Chaque semaine ou deux semaines, le site commence à fonctionner plus lentement - et je constate que les requêtes prennent de plus en plus de temps à terminer en SQL. J'ai une requête que j'aime utiliser :

Ce qui est assez utile. il donne un instantané de tout ce qui s'exécute à ce moment-là sur votre serveur SQL. Ce qui est bien, c'est que même si votre processeur est fixé à 100% pour une raison quelconque et que Activity Monitor refuse de se charger (je suis sûr que certains d'entre vous y sont allés), cette requête revient toujours et vous pouvez voir quelle requête tue votre base de données.

Lorsque j'exécute ceci, ou Activity Monitor pendant les périodes où SQL a commencé à ralentir, je ne vois aucune requête spécifique à l'origine du problème - elles fonctionnent TOUS plus lentement dans l'ensemble. Si je redémarre le service MS SQL, tout va bien, tout s'accélère - pendant une semaine ou deux jusqu'à ce que cela se reproduise.

Rien à quoi je puisse penser n'a changé, mais cela a commencé il y a quelques mois. Des idées ?

Veuillez noter que lorsque ce ralentissement de la base de données se produit, peu importe que nous obtenions 100 000 pages vues par heure (heure la plus chargée) ou 10 000 pages vues par heure (heure lente), les requêtes prennent toutes plus de temps que la normale. Le serveur n'est pas vraiment stressé - le CPU n'est pas élevé, l'utilisation du disque ne semble pas incontrôlable. cela ressemble à une fragmentation d'index ou quelque chose du genre, mais cela ne semble pas être le cas.

En ce qui concerne le collage des résultats de la requête que j'ai collé ci-dessus, je ne peux vraiment pas le faire. La requête ci-dessus répertorie le login de l'utilisateur effectuant la tâche, la requête entière, etc etc. et je n'aimerais vraiment pas distribuer les noms de mes bases de données, tables, colonnes et les connexions en ligne :). Je peux vous dire que les requêtes en cours d'exécution à ce moment-là sont des requêtes normales et standard pour notre site qui s'exécutent tout le temps, rien d'anormal.

Cela fait environ deux semaines depuis le dernier redémarrage. J'ai apporté plusieurs modifications : j'ai trouvé quelques requêtes dans lesquelles nous utilisions massivement des tables temporaires qui étaient totalement inutiles et nos développeurs ont modifié la façon dont ils le faisaient. J'ai ajusté la taille de certaines des bases de données en croissance constante (lentement mais sûrement) à une taille intelligente pour leur croissance. J'ai également ajusté les paramètres de croissance automatique pour que tout soit plus intelligent (ils étaient TOUS réglés sur une croissance de 1 Mo). Enfin, j'ai nettoyé un peu MSDB. Nous effectuons l'envoi de journaux et n'avons vraiment pas besoin de conserver des années et des années de points de sauvegarde, j'ai écrit des scripts qui limitent cela à quelques mois seulement. Je continuerai à mettre à jour ce fil, car il est trop tôt pour dire si le problème est encore résolu.


  1. Dans l'Explorateur d'objets, cliquez avec le bouton droit sur un serveur et sélectionnez Propriétés.
  2. Clique le Mémoire nœud.
  3. Sous Options de mémoire du serveur, entrez le montant que vous voulez pour Mémoire minimale du serveur et Mémoire maximale du serveur.

Vous pouvez également le faire en T-SQL à l'aide des commandes suivantes (exemple) :

Pour restreindre la consommation de mémoire du service MS SQL :

Définir "max server memory" dans SQL Server Management Studio

Nous allons maintenant définir l'option "max server memory" pour limiter l'utilisation de la mémoire par SQL Server. Nous pouvons le faire en cliquant avec le bouton droit sur notre instance et en choisissant "Propriétés".

Dans l'Explorateur d'objets, cliquez avec le bouton droit sur un serveur et sélectionnez Propriétés.

Cliquez sur le nœud Mémoire comme indiqué ci-dessous :

4. Sous Options de mémoire du serveur, entrez la quantité souhaitée pour la mémoire maximale du serveur. Ci-dessous, comme vous pouvez le voir, nous configurons la mémoire maximale du serveur à 4096 Mo (c'est-à-dire 4 Go).

Pour restreindre la consommation de mémoire du service MS SQL :

Nous pouvons également définir "max server memory" en utilisant un script T-SQL :


Étapes des rapports paginés Reporting Services

Une définition de rapport peut être créée, publiée ou enregistrée, compilée, traitée, mise en cache, rendue, affichée, exportée et enregistrée comme historique. Lorsque vous exécutez un rapport, le serveur de rapports traite un rapport en trois étapes : traitement du rapport, traitement des données et rendu. Le traitement des données et des rapports est effectué sur une définition de rapport dont les résultats sont dans un format intermédiaire interne. Les rapports qui sont au format intermédiaire sont ensuite rendus dans un format de visualisation spécifique. Le diagramme suivant montre les étapes et les éléments du traitement du rapport.


Diagramme de traitement des rapports

Définition du rapport

Le fichier de définition de rapport (.rdl) stocké sur un serveur de rapports. Pour plus d'informations, consultez Langage de définition de rapport (SSRS).

Rapport compilé et format de rapport intermédiaire

Le rapport qui utilise les expressions évaluées, les paramètres et les propriétés des paramètres évalués.

Historique des instantanés ou des rapports

Un instantané est l'ensemble des données du rapport à un moment précis plus le format intermédiaire qui contient les informations de mise en page du rapport. Pour plus d'informations, consultez Performances, instantanés, mise en cache (Reporting Services).

Rapport traité

Un rapport entièrement traité qui contient à la fois des données et des informations de mise en page.

Rapport rendu

Un rapport entièrement traité est envoyé à un moteur de rendu de rapport pour combiner les données et la mise en page sur chaque page du format de rendu ciblé. Les extensions de rendu sont personnalisables et extensibles. Le format de rendu par défaut d'un rapport est HTML 4.0. Pour plus d'informations, consultez Mise en page et rendu (Générateur de rapports et SSRS) et Extensions (SSRS).

Rapport exporté

Un rapport exporté est un rapport entièrement paginé enregistré dans un format de fichier spécifique. Les formats d'exportation dépendent des extensions de rendu installées et peuvent être personnalisés. Par défaut, les formats d'exportation incluent Excel, Word, XML, PDF, TIFF et CSV. Pour plus d'informations, consultez Exporter des rapports (Générateur de rapports et SSRS).


Voir la vidéo: AlwaysOn et les groupes de disponibilité dans SQL Server 2012. Journées SQL Server (Octobre 2021).