Suite

Dois-je pouvoir ouvrir une base de données personnelle convertie en MSSQL en tant que couche MSSQL ?

Dois-je pouvoir ouvrir une base de données personnelle convertie en MSSQL en tant que couche MSSQL ?


J'ai l'impression que cela devrait fonctionner, mais je me cogne la tête contre le clavier, la documentation et le google car je ne trouve aucun exemple à suivre pour MSSQL.

J'ai des données tierces uniquement dans une base de données personnelle ESRI (.MDB). Je l'ai converti en MSSQL car je pense qu'il n'y a aucun moyen de l'ouvrir dans QGIS.

La conversion ACCESS to SQL s'est bien déroulée et je peux voir les tables et les données dans la base de données SQL Server. J'ai configuré un DSN utilisateur sur la base de données et lorsque j'ajoute une nouvelle connexion de couche MSSQL, la connexion de test fonctionne.

Cependant, lorsque j'essaie de me connecter à la base de données dans la boîte de dialogue Ajouter une table MSSQL, l'erreur suivante s'affiche :

[Microsoft][Pilote ODBC 11 pour SQL Server][SQL Server]Nom d'objet non valide 'geometry_columns'. QODBC3 : impossible d'exécuter l'instruction

Peut-être qu'il y a une migration de schéma que je dois exécuter ?


Lorsque vous configurez la connexion, vous pouvez changer si QGIS lit la table geometry_columns (une norme OGC, je pense) ou examine simplement les tables de la base de données lorsque vous cliquez sur se connecter.

La configuration des colonnes géométriques est très importante car elle accélère considérablement le processus. Mais il n'y a pas de moyen automatique de le faire. Je vais copier le schéma des colonnes de géométrie ci-dessous. Pour l'instant, vous pouvez modifier la case à cocher qui dit "rechercher uniquement dans la table de métadonnées geometry)_columns" et cela devrait fonctionner.

Création de la table geometry_columns SQL Server.

La définition des colonnes est :

  • f_table_catalog = base de données (par exemple, GISDB)
  • f_table_schema = schemaa (par exemple, dbo)
  • f_table)name = nom de la table (par exemple, Bâtiments)
  • f_geometry_column = nom de la colonne de géométrie (par exemple, SP_GEOMETRY)
  • coord_dimension = pas sûr (les valeurs sont 0, 1 ou 2 quelqu'un d'autre aide-t-il ici ?)
  • srid = identifiant de référence spatiale (par exemple, 28355_
  • geometry_type = type de géométrie (LineString, Polygon, MultiPolygon, Point, etc.)

    UTILISER [GISDB] GO

    /****** Objet : Table [dbo].[geometry_columns] Date du script : 23/04/2015 10:00:24 ******/ SET ANSI_NULLS ON GO

    SET QUOTED_IDENTIFIER ON GO

    SET ANSI_PADDING ON GO

    CREATE TABLE [dbo].[geometry_columns]( [f_table_catalog] varchar NULL, [f_table_schema] varchar NULL, [f_table_name] varchar NULL, [f_geometry_column] varchar NULL, [coord_dimension] [int] NULL, [srid] [int] NULL [geometry_type] varchar NULL ) ON [PRIMARY]

    VA

    DÉSACTIVER ANSI_PADDING ALLER


La réponse à cela pour la version 2.6+ (j'utilisais la version 2.8.1 au moment de cet article) est d'obtenir les pilotes Access 64 bits et d'apporter quelques modifications au fichier batch qui lance QGIS.

Tout cela est couvert dans cet article : Ouvrir la géodatabase personnelle Esri (*.mdb) à l'aide de QGIS ?

Merci à @get-spatial pour la trouvaille !


Un autre outil tiers que vous pouvez utiliser pour déchiffrer des objets cryptés à la volée est l'invite SQL de Red Gate : http://www.red-gate.com/products/sql-development/sql-prompt/features

Le survol de la procédure stockée vous permettra alors de voir le script de création déchiffré.

Avis de non-responsabilité : cet outil est commercial (avec un essai gratuit de 14 jours) et je travaille pour Red Gate.

J'ai une description assez détaillée de ce problème ici.

Bref, l'objet n'est pas vraiment crypté, mais plutôt obscurci. Par conséquent, nous pouvons récupérer le dos d'origine. La méthode est un peu compliquée mais elle consiste en ces étapes :

Sélectionnez le code obscurci comme ceci :

Remplacez l'objet par un autre qui a le même nom même object_id et la même longueur en octets (par exemple en utilisant ALTER PROCEDURE )

Cela vous donnera le code d'origine. Cependant, comme Kin l'a mentionné, il pourrait y avoir un soutien et même des implications juridiques à faire cela, alors assurez-vous de consulter d'abord votre avocat.

Le texte du module est crypté à l'aide d'un RC4 chiffrement de flux.

La clé d'initialisation RC4 est calculée à partir du SHA-1 hachage de :

  • le GUID de famille de base de données (de sys.database_recovery_status)
    Converti de identifiant unique à binaire(16)
  • Le module ID d'objet (à partir des vues du catalogue)
    Converti de entier à petit-boutiste binaire(4)
  • Le module sous-ID d'objet
    Converti de petit entier à petit-boutiste binaire(2).

Le sous-ID d'objet du module est :

  • 1 pour une procédure stockée non numérotée ou
  • Le numéro de procédure pour une procédure stockée numérotée (obsolète) ou
  • 0 sinon.

Un utilisateur suffisamment privilégié peut alors déchiffrer le module en :

  1. Obtention du binaire crypté de sys.sysobjvalues (à l'aide du DAC)
  2. Calcul de la clé RC4 comme détaillé ci-dessus
  3. Exécution de l'algorithme RC4 standard bien connu sur le binaire
  4. Conversion du résultat de binaire en nvarchar(max)

Plus de détails et une implémentation complète du code dans mon article :

Vous pouvez vous connecter à SQL Server à l'aide de la connexion administrateur dédiée (DAC), puis afficher le texte SQL de la procédure stockée. Connectez-vous au DAC en utilisant :

Vous pouvez trouver toutes les étapes nécessaires dans cette réponse sur Stack Overflow de Martin Smith.

En remarque - s'il s'agit d'une base de données tierce et si vous le faites sur prod, le fournisseur la prendra-t-il en charge ? Il peut y avoir une bonne raison de chiffrer les SP ou les vues. Il est probablement préférable de faire une sauvegarde, puis de jouer avec cela.

Si vous souhaitez prévisualiser le script DDL d'origine ou décrypter un objet crypté, vous pouvez consulter ApexSQL Decrypt

C'est un outil autonome gratuit, avec une option pour l'intégrer dans SSMS, prévisualiser le script DDL original. En outre, vous pouvez déchiffrer des objets situés sur plusieurs serveurs en un seul tour. Un autre outil qui peut vous aider est dbForge SQL Decryptor

Une méthode que j'utilise souvent pour déchiffrer plusieurs procédures stockées à la fois.

Utilisez SQL Compare de RedGate et comparez votre base de données à une base de données vide (ou à toute autre base de données dont vous savez qu'elle n'aura pas les procédures stockées). Créez un script de déploiement et copiez-le dans SSMS. Trouver et remplacer AVEC CHIFFREMENT avec un espace blanc. Changez ensuite la PROCÉDURE DE CRÉATION en PROCÉDURE DE MODIFICATION. Exécutez le script RedGate sur la base de données d'origine et vous avez supprimé tout le cryptage des procédures stockées.

J'avais une base de données avec plus de 400 procédures stockées et bien que SQL Prompt soit pratique, cela ne valait pas la peine de cliquer avec le bouton droit, de copier, de coller sur plus de 400 procédures stockées. En utilisant RedGate SQL Compare, j'ai pu supprimer le cryptage de mes 400+ procédures stockées en environ 10 minutes du début à la fin.


5 réponses 5

LinkedIn a ouvert son outil CDC, Databus, qui prend en charge MySQL. Vous pouvez lire comment prendre en charge MySQL sur le wiki du projet : Databus for MySQL et lire la déclaration du blog ici : Open sourcing Databus : LinkedIn's low latency change data capture system

Cependant, vous devez noter qu'il peut y avoir certaines limitations:

La mise en œuvre actuelle, bien que pleinement fonctionnelle, doit être considérée comme une preuve de concept. Son objectif principal est de montrer comment écrire un fetcher MySQL pour Databus. La fonctionnalité de base du fetcher a été testée mais n'a pas été déployée dans notre environnement de production. Chez LinkedIn, nous exécutons une implémentation légèrement différente qui repose sur un MySQL patché personnalisé.

Un autre outil CDC open source est FlexCDC (implémenté en PHP) qui a été écrit dans le cadre du projet FlexViews.

[. ] FlexCDC qui visera à fournir une couche CDC flexible pour MySQL basée sur la journalisation RBR, et Flexviews, qui utilise FlexCDC pour collecter les modifications nécessaires pour maintenir de manière incrémentielle les vues matérialisées.

De : Pourquoi n'y a-t-il pas (d'autres) utilitaires de capture de données modifiées pour MySQL 5.1 ?


3 réponses 3

Hors de la boîte, il n'y a pratiquement pas de support pour MSSQL. Drupal 7, il y a eu une tentative de prise en charge par les gars du commerce, mais ce travail a migré vers un module contrib et n'est pas dans le noyau. Voici un rapide aperçu de la compatibilité.

Drupal 6: Pas possible

Drupal 7: Éventuellement avec le module MSSQL Layer appelé SQLsrv. Mais préparez-vous aux problèmes lors de l'utilisation des modules contrib, certains ne fonctionneront pas car de nombreux modules écrivent des commandes SQL et les exécutent avec db_query au lieu de la couche d'abstraction pour des raisons de performances - en particulier les requêtes complexes.

Drupal 8: Pas possible hors de la boîte. Il existe un module tiers qui fournit un pilote pour MSSQL.

Si vous voulez vraiment tirer le meilleur parti de Drupal avec le moins de maux de tête possible, exécutez MySQL ou même MarianDB sous Windows.


4 réponses 4

Je ferais quelque chose de différent avec le tiers. Je le tirerais directement de MySQL dans SQL Server à l'aide de SSIS et planifierais la tâche à l'intérieur du serveur SQL. L'importation d'un dump MySQL dans SQL Server serait problématique car le DDL est très différent entre les moteurs de base de données.

Si vous ne pouvez pas accéder directement au tiers, vous pouvez obtenir une instance MySQL en cours d'exécution localement, puis importer le dump mysql (en utilisant mysqlimport dans un fichier batch).

Vous devriez pouvoir automatiser cela assez facilement avec le planificateur de tâches et SSIS + Jobs dans SQL Server 2005.

Le vidage contient généralement des instructions SQL pour créer la table, la remplir ou les deux. Cependant, mysqldump peut également être utilisé pour générer des fichiers au format CSV, autre texte délimité ou au format XML.

J'opterais alors pour le format XML et le convertirais chaque fois que nécessaire en utilisant XSLT.

dans stackoverflow, ils ont indiqué cette solution: de mysql à mssql. Cela nécessite le chargement d'une instance mysql.

Si vos exigences sont gravées dans le marbre (je fais référence ici à votre commentaire sur "ne nécessite aucune intervention manuelle"), alors la meilleure solution pour votre organisation serait de payer quelqu'un pour programmer cette logique pour vous. Migrer des trucs entre bases de données nécessite une intervention, cela ne sera pas fait par des petits nains de jardin pendant que vous dormez. Quelqu'un devra en programmer la logique.

Après avoir écrit tout cela, exécuter mysql sur un serveur Windows est parfaitement correct et ne vous coûtera rien si vous exécutez l'édition communautaire. Vous pouvez toujours dépenser de l'argent en l'achetant à Oracle, d'ailleurs si c'est une exigence de gestion.


Une fois que votre nouveau serveur est en cours d'exécution, vous n'avez qu'à faire quelques choses.

Si vous effectuez une recherche sur Google, vous devriez pouvoir trouver des outils qui vous permettront d'exporter la conversion du dump. Ce n'est pas parfait mais c'est probablement la solution la plus simple.

Sinon, si cela ne fonctionne pas, vous pouvez créer un script qui, depuis Drupal, récupère les données d'une base de données, puis les insère dans l'autre base de données, en utilisant efficacement Drupal/PHP pour traduire le vidage. C'est beaucoup plus lent et nécessite plus de travail, mais a moins de chance d'échec.

Ce n'est tout simplement pas possible avec Drupal 6, et ce ne le sera jamais. C'est possible avec Drupal 7 sur IIS uniquement.

Drupal 7 a une couche d'abstraction de base de données, il peut donc être utilisé avec n'importe quelle base de données qui a 1) un pilote de base de données système et 2) un module pour faire la suppression de la base de données spécifique que vous souhaitez utiliser. Découvrez le projet Drupal SQLSRV pour 2.

Le titre indique qu'il s'agit d'un site fonctionnant sous Redhat Linux, mais la question indique Windows. Cela ne fonctionne que si vous utilisez IIS comme serveur Web.

Les pilotes système pour MSSQL sont à peine disponibles pour RHEL 5, récemment publiés par Microsoft en tant que pilote PDO en décembre (bien que ce type l'ait compilé pour une version Fedora, donc YYMV), et le module Drupal ne prend pas en charge les pilotes système RHEL à cette fois.


Si le serveur SQL est arrêté pendant la sauvegarde, vous devriez avoir les MDF. Vous pouvez également les avoir si VSS a été activé. Sinon, ils sont peut-être perdus - le MDF (et le LDF associé) sont maintenus ouverts par SQL Server afin que ntbackup ne puisse pas y accéder de manière exclusive.

Si l'agent SQL effectue des sauvegardes sur un fichier disque, vous pourrez peut-être localiser le fichier BAK correspondant et effectuer une restauration à partir de celui-ci.

Les fichiers MDF/LDF sont toujours ouverts par MSSQL, donc une exécution directe de ntbackup ne pourra pas les lire. Vous devrez configurer un plan de maintenance dans MSSQL pour exécuter une sauvegarde périodique de la base de données et des journaux de transactions (si vous avez besoin d'une récupération à un moment précis), ou activer le service VSS Writer (il n'est pas activé par défaut avant MSSQL 2008) pour activer la prise en charge de Volume Shadow, ce qui permettrait alors à ntbackup d'obtenir le MDF/LDF (mais vous ne pouvez pas effectuer une restauration à un instant donné avec ceux-ci.)

Dans votre cas, après coup, vous n'avez (malheureusement) probablement pas de chance.


4 réponses 4

Une sécurité réseau appropriée stipule que les serveurs DMZ ne devraient avoir aucun accès au réseau « de confiance ». Le réseau de confiance peut accéder à la DMZ, mais pas l'inverse. Pour les serveurs Web soutenus par DB comme le vôtre, cela peut être un problème, c'est pourquoi les serveurs de base de données se retrouvent dans des DMZ. Ce n'est pas parce qu'il se trouve dans une DMZ qu'il DOIT avoir un accès public, votre pare-feu externe peut toujours empêcher tout accès. Cependant, le serveur DB lui-même n'a pas accès à l'intérieur du réseau.

Pour les serveurs MSSQL, vous avez probablement besoin d'une 2e DMZ en raison de la nécessité de parler aux AD DC dans le cadre de son fonctionnement normal (à moins que vous n'utilisiez des comptes SQL plutôt que des comptes intégrés au domaine, auquel cas cela est discutable). Cette deuxième DMZ abriterait des serveurs Windows nécessitant un accès public quelconque, même s'il est d'abord proxy via un serveur Web. Les personnes chargées de la sécurité du réseau louchent lorsqu'elles considèrent que les machines domained bénéficiant d'un accès public ont accès aux contrôleurs de domaine, ce qui peut être difficile à vendre. Cependant, Microsoft ne laisse pas beaucoup de choix en la matière.


Dois-je pouvoir ouvrir une base de données personnelle convertie en MSSQL en tant que couche MSSQL ? - Systèmes d'information géographique

Cet article est destiné à aider les développeurs dBASE qui envisagent d'utiliser une base de données MS SQL Server nouvelle ou existante, ou pour les développeurs qui pourraient utiliser quelques astuces pour MS SQL Server basées sur nos expériences au fil des ans. Notre société possède toujours des applications dBASE 5.7 utilisant des bases de données de niveau 4, des applications dB2K utilisant des bases de données de niveau 7, des applications dB2K utilisant des bases de données SQL Server et des applications Java utilisant ces mêmes bases de données SQL Server. Nous utilisons MS SQL Server depuis l'an 2000.

Il y a plusieurs conseils vers la fin de cet article sur la configuration et la conception de bases de données MS SQL Server, mais il y a également une décision de configuration cruciale à prendre après cette étape. Il existe deux manières principales de configurer un alias BDE pour accéder à MS SQL Server. L'une consiste à utiliser un pilote BDE-SQLServer natif et l'autre consiste à utiliser un pilote ODBC-SQLServer. Cet article détaillera comment configurer les deux types d'alias BDE, puis discutera de certaines des différences entre les deux.

Brève histoire : utilisez le pilote SQLServer natif du BDE.

  • Configuration BDE
    • Le nom du serveur SQL
    • Ports du serveur MS SQL
    • Alias ​​BDE avec natif
    • Pilote SQL Server : configuration
    • Alias ​​BDE avec pilote ODBC : configuration
    • Paramètres BDE BLOB : Configuration
    • Pilote natif vs pilote ODBC
    • Pilote ODBC SQL Server : Erreurs perdues
    • Pilote ODBC SQL Server : paramètres de sortie de procédure stockée et valeurs de retour
    • Le serveur MS SQL doit-il être sensible à la casse ?
    • Comment utiliser les propriétaires de base de données, les utilisateurs et les identifiants de connexion ?
    • Recommandations pour les types de données de champ
    • Problèmes potentiels avec les champs TEXTE

    L'ID SQL Server utilisé par l'un ou l'autre type d'alias BDE sera soit un nom de réseau local, soit une adresse IP.

    Si le serveur de base de données est sur le réseau interne, cela peut être quelque chose comme SERVEUR SQL ou alors SERVEUR01 . Il peut être possible d'utiliser une connexion VPN (Virtual Private Network) à un réseau distant. Une fois la connexion VPN ouverte, le nom du réseau local peut être utilisé dans les paramètres BDE ou ODBC.

    Si le serveur SQL est accessible via Internet, une adresse IP statique peut être nécessaire pour accéder directement à ce serveur. Des pare-feu peuvent être configurés pour bloquer l'accès externe, auquel cas un accès via le pare-feu peut être requis pour l'adresse IP source.

    Ports du serveur MS SQL

    Par défaut, MS SQL Server autorise l'accès via le port 1433 ou 1450, mais il peut être défini sur un autre port. Il s'agit du port utilisé par MS Query Analyzer et ce sera le port utilisé par le BDE. Ce port doit être ouvert pour obtenir une connexion à la base de données. Cela s'applique aux serveurs MS SQL sur les intranets et sur Internet. MS Enterprise Manager peut être configuré pour utiliser un autre port, comme 1035, par défaut.

    Pilote SQL Server : configuration

    Une connexion BDE-ODBC peut avoir des difficultés à trouver automatiquement le bon numéro de port dans certains cas. Une option peut être d'utiliser l'utilitaire client/réseau SQL Server fourni avec les outils SQL Server. Créez un alias qui utilise TCP/IP (pas des canaux nommés) et le port exact peut être spécifié de cette façon. Utilisez le nouvel alias SQL Server comme nom de serveur lorsque le DSN ODBC est créé.

    Alias ​​BDE avec pilote natif SQL Server : configuration

    1. Créez un nouvel alias BDE dans l'administrateur BDE. Définissez le nom du pilote de base de données sur MSSQL .
    2. Définissez le nom de serveur de l'alias comme décrit ci-dessus.
    3. Définissez le nom de la base de données. Le nom de la base de données peut être le même qu'il apparaîtrait dans MS Query Analyzer.
    4. Le nom d'utilisateur n'est pas nécessaire, mais je recommande de le remplir en règle générale.

    Alias ​​BDE avec pilote ODBC : configuration

    1. Ouvrez le Source d'information ou alors Administrateur ODBC option de la Panneau de commande. Il est situé sous Outils administratifs dans le Panneau de commande pour Windows XP. Si un alias BDE qui utilise le pilote ODBC SQL Server existe déjà, il existe une option « Administrateur ODBC » dans le menu contextuel pour cet alias dans le Administrateur BDE.
    2. Créez un DSN système. Comme avec l'alias BDE natif, le nom du réseau local ou une adresse IP pour le nom du serveur peut être utilisé.

    Une fois l'alias DSN créé et testé, ouvrez le Administrateur BDE. Définissez le nom du pilote de la base de données sur "SQL Server". S'il n'est pas disponible dans la liste des pilotes, certains des outils MS SQL Server comme Enterprise Manager ou Query Analyzer devront peut-être être installés. La dernière version de MDAC contiendrait également la dernière version de ce pilote. Au 20 août 2003, il s'agissait de la version 2.8 de MDAC, je crois.

    Une précaution est de s'assurer que le pilote ODBC "SQL Server" utilisé n'est pas trop ancien. Il y a quelques bogues que Microsoft a confirmés avec les anciennes versions de ce pilote à partir de l'an 2000. Pour vérifier la version du pilote ODBC SQL Server, ouvrez le Administrateur ODBC et allez au Conducteurs languette. Il devrait y avoir un pilote nommé "SQL Server" dans cette liste, et la date à l'extrême droite de cette section devrait être de l'année 2001 ou plus tard.

    Paramètres BDE BLOB : Configuration

    Il existe des problèmes potentiels avec les propriétés liées aux BLOB par défaut dans les deux types d'alias BDE. En particulier, Taille de goutte et Blobs à mettre en cache peut avoir besoin d'être changé. Il existe plusieurs solutions possibles, dont l'une consiste à augmenter ces valeurs au-delà de leurs paramètres par défaut. Pour plus d'informations, consultez les conseils généraux sur SQL Server ci-dessous concernant le type de données de champ de texte.

    Pilote natif vs pilote ODBC

    Afin d'utiliser dBASE comme front-end pour MS SQL Server, nous avons le choix entre le pilote natif du BDE ou un pilote ODBC. Le pilote natif du BDE présente deux avantages. La première est que l'ODBC est en fait une deuxième couche ou niveau dans l'architecture d'accès à la base de données. Les informations et les instructions SQL doivent passer à la fois par le BDE et l'ODBC, ce qui peut diminuer un peu l'efficacité (bien que cette différence n'ait pas été mesurable dans mes tests personnels). Cela peut également augmenter la complexité de l'accès à la base de données et le risque d'erreurs.

    Ce qui nous amène à la deuxième raison, qui est qu'il y a deux bogues connus dans dBASE si le pilote ODBC est utilisé. Que ces deux bogues fassent partie de dBASE, du BDE ou du pilote ODBC est une question qu'il vaut mieux laisser aux âges et au fonctionnement interne de dBASE Inc. Je vais au moins spécifier les deux problèmes potentiels à surveiller si le pilote ODBC SQL Server est utilisé.

    Pilote ODBC SQL Server : Erreurs perdues

    L'objet dBASE Query ignore les erreurs SQL Server dans les circonstances suivantes.

    • Au cours d'un beginAppend ou beginEdit.
    • Si l'ensemble de lignes a un TEXTE champ en elle.
    • Si la TEXTE le champ a quelque chose d'autre que null qui lui est assigné.
    • Si un type d'erreur SQL Server se produit lorsque jeu de lignes.save() est appelé.

    Il existe une solution de contournement, qui consiste à laisser le TEXTE hors de l'ensemble de lignes et enregistrez-le séparément après le premier jeu de lignes.save() a été complété. Ceci n'est pas possible si le TEXTE field doit être un champ obligatoire, mais cela fonctionne généralement. Il permet la première jeu de lignes.save() pour renvoyer correctement les erreurs SQL Server dont il a besoin.

    Ce problème existe uniquement si le pilote ODBC SQL Server est utilisé. Le pilote MS SQL natif renvoie correctement les erreurs dans cette situation.

    Pilote ODBC SQL Server : paramètres de sortie de procédure stockée et valeurs de retour

    Ce pilote a un deuxième problème qui n'existe pas pour le pilote MS SQL natif. le StockéProc La classe dans dBASE peut utiliser des paramètres de sortie et des valeurs de retour pour les procédures stockées sur le serveur SQL. Tandis que le StockéProc La classe fonctionne correctement dans la plupart des cas avec un pilote ODBC SQL Server, elle reçoit toujours l'erreur suivante si la procédure stockée a des valeurs de sortie ou de retour définies : [Microsoft][Pilote ODBC SQL Server]Erreur de syntaxe ou violation d'accès .

    Il existe également une solution à ce problème, qui consiste à renvoyer un "faux" ensemble de lignes, chaque champ de l'ensemble de lignes correspondant à une valeur de sortie ou de retour nécessaire. L'article sur les procédures stockées dans ce numéro de dBulletin contient plus de détails et un exemple de cette solution de contournement.

    Comme pour la section précédente, je décris cela comme un problème potentiel car il peut s'agir d'un problème de configuration et aucun de ces problèmes ne peut exister pour les autres développeurs dBASE. Si quelqu'un trouve une solution à l'un des problèmes ci-dessus ou ne peut pas reproduire ces problèmes, j'aimerais certainement en entendre parler dans les groupes de discussion dBASE.

    Récapitulatif de l'histoire courte

    Le pilote natif MS SQL et le pilote ODBC fonctionnent tous les deux correctement à tous les autres égards que je connais. J'utilise le pilote ODBC depuis plusieurs années maintenant avec seulement les deux problèmes ci-dessus, mais je conseillerais aux développeurs dBASE de choisir le pilote natif si possible. Il y a, bien sûr, un peu plus de conseils que je voudrais transmettre. (Pourquoi ai-je l'impression d'être un vieil homme assis au sommet d'une montagne ?) La connexion BDE est une décision importante, mais il existe plusieurs autres décisions de configuration et de conception sur un serveur MS SQL qui doivent être prises en compte avec soin.

    Conseils généraux sur MS SQL Server

    Le serveur MS SQL doit-il être sensible à la casse ?

    Lors de l'installation de MS SQL Server pour la première fois, il est par défaut insensible à la casse. Je recommande de rendre le serveur MS SQL sensible à la casse, car une base de données sensible à la casse peut être utilisée sur un serveur insensible à la casse mais l'inverse peut présenter des difficultés de compatibilité pour le logiciel dBASE. Cela peut s'avérer crucial si la base de données est destinée à être utilisée par d'autres entreprises, dont beaucoup auront leurs propres paramètres SQL Server uniques.

    Dans cet esprit, je recommande de ne pas utiliser de noms à casse mixte pour les tables, les champs, les vues et les procédures stockées. Choisissez une norme de majuscule, propre ou minuscule afin que le code dBASE associé puisse être écrit de manière standard et que les nouveaux noms ne provoquent pas de conflits en raison des différents paramètres SQL Server.

    Comment utiliser les propriétaires de base de données, les utilisateurs et les identifiants de connexion ?

    Assurez-vous que toutes les tables, vues et procédures stockées appartiennent à un seul utilisateur. Cela facilitera la réalisation ultérieure de mises à jour de structure ou d'analyses de tables polyvalentes. J'ai tendance à utiliser la valeur par défaut dbo utilisateur en tant que propriétaire pour tout. Je m'assure que le dbo l'utilisateur d'une base de données particulière est associé au sql ID de connexion pour le serveur SQL, au lieu de la valeur par défaut sa Identifiant de connexion.

    Dans cet esprit, faites très attention à la façon dont les utilisateurs/connexions initiaux de SQL Server sont configurés pour une base de données. Cet utilisateur/login sera la façon dont les applications dBASE ouvrent une connexion à la base de données. Si d'autres clients de l'application dBASE ont des installations SQL Server différentes, l'importation ou l'exportation de données peut être très délicate s'ils ont des identifiants de connexion uniques à leur propre réseau et qui n'existent pas déjà sur le serveur SQL cible.

    Recommandations pour les types de données de champ

    Je recommande de ne pas utiliser le FLOTTER type de données pour MS SQL Server. Il stocke en fait un nombre approximatif, il peut donc être surprenant de constater qu'un simple 2.0 est plutôt stocké sous la forme 999999999. Essayez de standardiser tous les champs numériques pour qu'ils soient soit ENTIER ou alors NUMÉRIQUE(19,4) .

    Utiliser VARCHAR champs au lieu de CARBONISER champs dans la mesure du possible. CARBONISER champs ajouteront des espaces à la fin, alors que VARCHAR Les champs ne stockeront que le texte exact qui a été enregistré. cependant, CARBONISER les champs sont plus efficaces si le texte aura toujours une certaine longueur, comme un CHAR(1) colonne qui ne peut pas être nulle.

    je recommande que BIT les champs n'autorisent pas les valeurs NULL pour MS SQL Server. Le but d'un BIT Le champ conserve deux états possibles, 0 ou 1. Si les valeurs NULL sont autorisées, il peut en fait avoir trois états, 0 ou 1 ou NULL. Si un BIT n'autorise pas les valeurs NULL, veillez à créer une contrainte par défaut qui définit le champ sur zéro si aucune valeur n'est spécifiée.

    SQL Server utilise un DATEHEURE type de données pour la plupart des dates, même si l'heure n'est pas nécessaire. Ce type de données stocke la date en millisecondes, mais les millisecondes ont tendance à être très difficiles à utiliser dans dBASE. Sachez que ce champ créera une erreur s'il est utilisé avec une date antérieure au 1er janvier 1753. Pour afficher la partie date uniquement pour les grilles ou les champs dans dBASE, définissez le field.beforeGetValue() fonctionne comme ceci :

    Problèmes potentiels avec les champs TEXTE

    Soyez prudent avec TEXTE champs, qui sont l'équivalent de BLOB/Mémo champs dans dbf tableaux et contiennent de longues notes. Ceux-ci doivent être utilisés à la place d'un type de données de champ comme varchar (5000) mais dBASE et le BDE peuvent avoir des difficultés avec les paramètres par défaut. Plus précisément, si un query.rowset dans dBASE comprend un texte champ et a trop d'enregistrements, il peut y avoir un blob corrompu erreur ou une descripteur de blob non valide Erreur. Cette erreur est liée à dBASE uniquement et ne signifie pas que le serveur SQL a un problème de champ corrompu.

    Il existe trois solutions possibles :

    • Les groupes de discussion ont diverses discussions sur la modification des paramètres BDE par défaut pour un alias SQL Server afin d'autoriser une plus grande taille de mémo en mémoire. Recherchez les mots-clés "Blob Size" et "Blobs to Cache". Ce serait l'option préférée pour les applications dBASE, bien que je ne l'ai pas trouvé parfaitement fiable. Je conseille surtout la prudence et la recherche lors de l'utilisation des paramètres BDE par défaut et il existe un ensemble de lignes avec plus de quelques milliers d'enregistrements.
    • Une instruction SQL peut être utilisée pour convertir un TEXTE champ dans un VARCHAR champ à la volée, évitant ces erreurs potentielles. La syntaxe SQL peut être comme ceci :


    SELECTIONNER CONVERTIR (VARCHAR (50), DESCR) COMME DESCRIPTION DE MYTABLE

    Pour les nouveaux utilisateurs de SQL Server et des bases de données entièrement relationnelles, je recommande que les structures de base de données soient créées pour se conformer au moins à la troisième forme normale (concept de normalisation). Je recommande que les clés primaires, les clés étrangères, les clés uniques et les contraintes soient utilisées dans la mesure du possible. Cela a été le plus grand avantage de l'utilisation de MS SQL Server que j'ai trouvé, aidant à assurer une excellente intégrité des données. Ces deux suggestions sont des articles entiers en elles-mêmes, je vous laisse donc les étudier.

    Ah, les joies de SQL Server et des bases de données relationnelles. Tous les développeurs dBASE qui ont créé et utilisé des bases de données dBASE de n'importe quel niveau de table devraient pouvoir travailler en utilisant des bases de données relationnelles. Et sur la base de mon expérience et de l'historique de mon entreprise, une fois que vous aurez goûté aux avantages d'une base de données SQL Server, vous voudrez bientôt essayer l'intégralité du plat principal. C'est un repas satisfaisant, je vous assure.


    Vous ne pouvez pas restaurer automatiquement une sauvegarde MySQL dans SQLServer 2008. Vous pouvez écrire un script de conversion pour convertir les données ou utiliser un outil tel que Microsoft DTS (appelé de nos jours SQL Server Integration Services).

    Si vous avez toujours accès à la base de données dans MySQL, vous devriez pouvoir extraire les données de MySQL dans un format utilisable par MS SQL en utilisant la commande mysqldump et le commutateur de ligne de commande --compatible=mssql. Cependant, vous finissez parfois par devoir modifier le fichier de vidage manuellement s'il génère des erreurs lors de son importation dans SQL Server.

    Si vous n'avez accès qu'au fichier de sauvegarde, la même tactique peut fonctionner si vous l'importez dans une nouvelle instance de MySQL, puis le videz dans un nouveau fichier de sauvegarde.

    Utilisez un générateur de script SQL sur votre base de données MYSQL et exécutez le fichier de script sur votre base de données MSSQL. Tant que vous n'avez pas de types différents qui se chevauchent, vous devriez être bon.

    Pour créer un script de création de base de données :

    1. Ouvrez la fenêtre du navigateur de requêtes MySQL
    2. Ouvrir un nouvel onglet Script (Ctrl + Shift + T)
    3. Faites glisser les tables requises sur l'onglet de script
    4. Vous devriez voir le script CREATE TABLE généré

    Ensuite, vous devez exporter les données au format CSV pour pouvoir les importer.

    De plus, Redgate propose une première version de SQL Compare pour MYSQL avec laquelle vous pouvez jouer pour voir si cela peut aider à générer les scripts entre les deux types (je n'en ai aucune idée, car je ne l'ai pas encore essayé):