Ajout et référencement du pilote ODBC ASE 12 sur un poste Windows avec un client Sybase ASE 15

Introduction

Depuis la version 15 de Sybase Adaptive Server Enterprise, Sybase a repris en main le développement des pilotes ODBC et OLE DB et ne dépend plus de l'éditeur tiers MERANT. Pour plus d'informations sur les migrations des connexions ODBC et OLE DB lors du passage d'un client ASE 12.x vers un client ASE 15.x : ASE ODBC Driver and OLE DB Provider Migration Technical Whitepaper.

Les pilotes ODBC pour ASE 12 (MERANT) et ASE 15 diffèrent dans leur appellation et leur localisation dans le client Sybase :

Propriété Pilote ODBC ASE 12
Appellation Sybase ASE ODBC Driver
Localisation %SYBASE%\ODBC-3_5
Variable PATH %SYBASE%\ODBC-3_5;%PATH%
Pilote (dll) %SYBASE%\ODBC-3_5\SYODASE.DLL
Setup (dll) %SYBASE%\ODBC-3_5\SYODASES.DLL
Propriété Pilote ODBC ASE 15
Appellation Adaptive Server Enterprise
Localisation %SYBASE%\DataAccess\ODBC
Variable PATH %SYBASE%\DataAccess\ODBC\dll;%PATH%
Pilote (dll) %SYBASE%\DataAccess\ODBC\dll\sybdrvodb.dll
Setup (dll) %SYBASE%\DataAccess\ODBC\dll\sybdrvodb.dll

%SYBASE% désigne dans la suite de ce document le répertoire d'installation du client Sybase ASE sur le poste de travail Windows. Quelle que soit la version du client (Sybase ASE 12 ou Sybase ASE 15), le chemin d'installation %SYBASE% est le même (C:\Logiciel\sybase).

La conversion d'une connexion ODBC ASE 12 vers ODBC ASE 15 est relativement simple, toutefois dans des circonstances exceptionnelles, le composant ODBC ASE 12 doit être conservé et ajouté au client Sybase ASE 15.

Cet article décrit la procédure pour conserver sur un poste de travail Windows le composant ODBC ASE 12 dans un client Sybase ASE 15. L'objectif consiste à ne pas devoir migrer le(s) connexion(s) ODBC ASE 12 existante(s) sur ce poste de travail.

Pourquoi ne pas migrer une connexion ODBC ASE 12 ? Circonstance exceptionnelle : la connexion ODBC ASE 12 est par exemple utilisée dans une base Access 2003 avec tables attachées, base Access localisée sur un partage réseau et accédée par d'autres utilisateurs dont le poste de travail n'a pas encore été migré en Sybase 15 côté client. Le "réattachement" des tables dans cette base Access 2003 avec le composant ODBC 15 rendra inexploitable cette base pour tous les utilisateurs ayant encore un client ASE 12 sur leur poste.

Cette méthode présente également l'avantage de migrer les postes clients de la version Sybase 12 vers la version Sybase 15 sans modifier globalement toutes les connexions ODBC existantes sur un poste de travail avec des régressions éventuelles et pénalisantes pour le métier. Les connexions ODBC ASE 12 sont ensuite migrées unitairement et ultérieurement après revue d'impact.

Cas pratique

La connexion ODBC dans ce cas pratique s'appelle T_PROD et il s'agit d'une source de données ODBC utilisateur (User DSN - Data Source Name). Le pilote (ou driver) de la source de données T_PROD est le pilote Sybase ASE 12 MERANT (Sybase ASE ODBC Driver).

Panneau de configuration ODBC
User DSN ODBC ASE 12
Base de registres
% reg query "HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources" /v "T_PROD"
! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\ODBC Data Sources
    T_PROD      REG_SZ  Sybase ASE ODBC Driver
%reg query "HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\T_PROD"
! REG.EXE VERSION 3.0

HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\T_PROD
    Driver      REG_SZ  C:\Logiciel\sybase\ODBC-3_5\SYODASE.DLL
    Description REG_SZ
    ServerName  REG_SZ  DBA_T1_ASE
    Servers     REG_SZ
    Database    REG_SZ  master
    ...

Le client ASE 12 a été ici désinstallé pour être remplacé par le client ASE 15. Avec la désinstallation du client ASE 12, le répertoire %SYBASE%\ODBC-3_5 est également supprimé, répertoire qui contient le pilote ASE 12 "Sybase ASE ODBC Driver" utilisé par la connexion ODBC T_PROD. La source de données ODBC T_PROD devient inexploitable.

Voici les étapes pour réintégrer et utiliser le pilote ASE 12 sur un poste dont le client Sybase est en version 15.

Installation du client Sybase ASE 12 sur une machine vierge (ODBC-3_5)

Installer le client Sybase ASE 12 sur une machine vierge, et dans la mesure du possible au niveau de patch le plus élevé.

Dans le répertoire d'installation du client Sybase ASE 12, récupérer l'intégralité du répertoire ODBC-3_5 qui contient toutes les librairies DLLs nécessaires au pilote Sybase ASE 12 ODBC Merant (syodase.dll, syodases.dll...).

Incorporation du répertoire ODBC-3_5 dans le client ASE 15

Les sources ODBC systèmes et utilisateurs définies avec le pilote Sybase ASE ODBC Driver stockent en dur le chemin complet du pilote :

% reg query "HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\T_PROD"
...
HKEY_CURRENT_USER\Software\ODBC\ODBC.INI\T_PROD
    Driver      REG_SZ  C:\Logiciel\sybase\ODBC-3_5\SYODASE.DLL
...

Pour minimiser les impacts sur les sources de données, le répertoire ODBC-3_5 est donc installé à la racine du client ASE 15 : %SYBASE%\ODBC-3_5 (C:\Logiciel\sybase\ODBC-3_5).

Il est bien entendu possible à cette étape de décider d'installer le répertoire ODBC-3_5 dans un tout autre endroit du poste de travail Windows, mais ce choix nécessite des opérations supplémentaires car il est nécessaire de modifier dans ce cas toutes les sources ODBC systèmes et utilisateur afin de mettre à jour la clé "Driver" pour chacune de ces sources dans la base de registres.

Référencement du pilote Sybase ASE ODBC Driver dans la base de registres

Éditer un fichier de registres sybase-odbc-3_5.reg afin d'importer le référencement du pilote "Sybase ASE ODBC Driver" dans les clés de registre HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI et HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBC Drivers.

Les clés à importer sont les suivantes :

sybase-odbc-3_5.reg
[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\ODBC Drivers]
"Sybase ASE ODBC Driver"="Installed"

[HKEY_LOCAL_MACHINE\SOFTWARE\ODBC\ODBCINST.INI\Sybase ASE ODBC Driver]
"AltDefaults"="1"
"APILevel"="1"
"ConnectionFunctions"="YYY"
"Driver"="C:\\Logiciel\\sybase\\ODBC-3_5\\SYODASE.DLL"
"DriverODBCVer"="03.50"
"FileUsage"="0"
"Setup"="C:\\Logiciel\\sybase\\ODBC-3_5\\SYODASES.DLL"
"smProcessPerConnect"="Y"
"SQLLevel"="0"
"UsageCount"="1"

Les valeurs chaînes Driver et Setup sont à adapter en fonction du répertoire d'installation du répertoire ODBC-3_5.

Sauvegarder la base de registres (par sécurité) et dans une invite de commandes DOS, lancer l'import des clés avec l'utilitaire reg et l'option /S. L'option /S annule la demande de confirmation et la boîte de dialogues notifiant le succès de l'import :

% reg /S sybase-odbc-3_5.reg

Pour vérifier l'import des clés, utiliser l'option query de l'utilitaire reg :


% reg query "HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers" /v "Sybase ASE ODBC Driver"
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\ODBC Drivers
    Sybase ASE ODBC Driver      REG_SZ  Installed
% reg query "HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase ASE ODBC Driver"
! REG.EXE VERSION 3.0

HKEY_LOCAL_MACHINE\Software\ODBC\ODBCINST.INI\Sybase ASE ODBC Driver
    AltDefaults REG_SZ  1
    APILevel    REG_SZ  1
    ConnectionFunctions REG_SZ  YYY
    Driver      REG_SZ  C:\Logiciel\sybase\ODBC-3_5\SYODASE.DLL
    DriverODBCVer       REG_SZ  03.50
    FileUsage   REG_SZ  0
    Setup       REG_SZ  C:\Logiciel\sybase\ODBC-3_5\SYODASES.DLL
    smProcessPerConnect REG_SZ  Y
    SQLLevel    REG_SZ  0
    UsageCount  REG_SZ  1

Activation de la compatibilité du pilote Sybase ASE ODBC Driver avec l'Open Client Sybase 15 (copylibs.bat)

À cette étape, un premier test de configuration de la source de données ODBC T_PROD peut aboutir à une erreur système 126.

Sybase ASE ODBC Driver Erreur système 126

L'erreur n'est pas très grave et corrigée avec les opérations ci-dessous :

Vérifier tout d'abord que la variable %SYBASE_OCS% du client ASE 15 est bien définie (OCS-15_0) :

% echo %SYBASE%\%SYBASE_OCS%\dll
C:\Logiciel\sybase\OCS-15_0\dll

Vérifier ensuite que le chemin %SYBASE%\%SYBASE_OCS%\dll est bien présent dans la variable d'environnement %PATH% du poste de travail Windows :

% echo %PATH%
...;C:\Logiciel\sybase\OCS-15_0\dll;C:\Windows;C:\Windows\system32

Après vérification des variables d'environnement, si l'erreur 126 survient toujours, Dependency Walker (Dependency Walker 2.2 Home page), utilitaire très pratique qui analyse les dépendances de librairies DLLs, montre très rapidement que la librairie syodase.dll dépend des librairies libcs.dll et libct.dll, librairies qui sont alors à priori introuvables :

% depends -ocresult.log "C:\Software\sybase\sybase-15.0\ODBC-3_5\syodase.dll"
result.log
?,"LIBCS.DLL","Error opening file. Le fichier spécifié est introuvable (2).",,,,,,,,,,,,,,,,,,
?,"LIBCT.DLL","Error opening file. Le fichier spécifié est introuvable (2).",,,,,,,,,,,,,,,,,,

Les librairies libcs.dll et libct.dll sont des librairies du client Sybase ASE 12 et installées dans le répertoire %SYBASE%\OCS-12_0. Avec le client Sybase ASE 15, les librairies de la couche Open Client lib<nom> ont été renommées en libsyb<nom> à la suite de conflits avec d'autres produits. Les librairies libcs.dll et libct.dll sont respectivement renommées en libsybcs.dll et libsybct.dll dans le client ASE 15.

Afin que les applications développées avec des couches Open Client inférieures avec la version 15 continuent de fonctionner, comme c'est le cas ici, le script %SYBASE%\%SYBASE_OCS%\scripts\copylibs.bat avec l'option create copie les librairies nécessaires libsyb<nom> sous leur ancien nom lib<nom> dans le répertoire %SYBASE%\%SYBASE_OCS%\dll.

Lancer copylibs.bat avec l'option create :

% C:
% cd %SYBASE%\%SYBASE_OCS%\scripts

C:\Logiciel\sybase\OCS-15_0\scripts> copylibs.bat create
        1 fichier(s) copié(s).
        1 fichier(s) copié(s).
        1 fichier(s) copié(s).
        1 fichier(s) copié(s).
        1 fichier(s) copié(s).

Pour information, voici les librairies copiées et renommées sous leur ancien nom, dont libcs.dll et libct.dll :

SET DLLDIR=%SYBASE%\%SYBASE_OCS%\dll

 ...

:create
copy %DLLDIR%\libsybblk.dll %DLLDIR%\libblk.dll
copy %DLLDIR%\libsybcobct.dll %DLLDIR%\libcobct.dll
copy %DLLDIR%\libsybcs.dll %DLLDIR%\libcs.dll
copy %DLLDIR%\libsybct.dll %DLLDIR%\libct.dll
copy %DLLDIR%\libsybdb.dll %DLLDIR%\libdb.dll
copy %DLLDIR%\libsybsrv.dll %DLLDIR%\libsrv.dll
copy %DLLDIR%\libsybxadtm.dll %DLLDIR%\libxadtm.dll
GOTO end

 ...

Cette étape est optionnelle si le script de copie des librairires a été déjà exécuté.

Le pilote Sybase ASE ODBC Driver est dés lors opérationnel.