Remarque
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de vous connecter ou de modifier des répertoires.
L’accès à cette page nécessite une autorisation. Vous pouvez essayer de modifier des répertoires.
S'applique à :SQL Server
Cet article énumère plusieurs problèmes pouvant survenir lorsque vous configurez et utilisez un Oracle Publisher.
Une erreur s'est produite avec le logiciel client et réseau d'Oracle
Vous devez accorder au compte sous lequel Microsoft SQL Server s’exécute sur le distributeur les permissions de lecture et d’exécution pour le répertoire et tous les sous-répertoires où le logiciel réseau client Oracle est installé. Si vous n’accordez pas les autorisations ou si les composants clients Oracle ne sont pas installés correctement, vous recevez le message d’erreur suivant :
« Échec de la connexion au serveur avec [Fournisseur Microsoft OLE DB pour Oracle]. Les composants client et réseau Oracle sont introuvables. Ces composants sont fournis par Oracle Corporation dans l'installation client d'Oracle Version 7.3.3 (ou ultérieure). Vous ne pourrez pas utiliser ce fournisseur avant d'avoir installé ces composants. »
Si vous installez un client Oracle approprié chez le distributeur, assurez-vous d’arrêter puis de redémarrer SQL Server après la fin de l’installation client. Cette étape est nécessaire pour que SQL Server reconnaisse les composants clients.
Si vous accordez les permissions et installez correctement les composants mais que l’erreur persiste, vérifiez que les paramètres du registre sont HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\MSDTC\MTxOCI corrects :
Pour Oracle 10g, les bons réglages sont :
OracleOciLib = oci.dll
OracleSqlLib = orasql10.dll
OracleXaLib = oraclient10.dll
Pour Oracle 9i, les bons réglages sont :
OracleOciLib = oci.dll
OracleSqlLib = orasql9.dll
OracleXaLib = oraclient9.dll
Le distributeur SQL Server ne peut pas se connecter à l'instance Oracle de la base de données
Si le distributeur SQL Server ne peut pas se connecter à Oracle Publisher, assurez-vous que :
Le logiciel Oracle requis est installé sur le serveur de distribution.
La base de données Oracle est en ligne et vous pouvez vous y connecter en utilisant un outil comme SQL*Plus.
La réplication de connexion utilisée pour se connecter au serveur de publication Oracle a des autorisations suffisantes. Pour plus d’informations, consultez Configurer un serveur de publication Oracle.
Le fichier tnsnames.ora liste les noms TNS que vous avez définis lors de la configuration de l’Oracle Publisher.
Vous utilisez le bon Oracle Home et le bon chemin. Même si vous n'avez qu'un ensemble de fichiers binaires Oracle installés sur le serveur de distribution SQL Server , vérifiez que les variables d'environnement relatives au dossier de base d'Oracle sont définies correctement. Si vous modifiez des valeurs pour les variables d'environnement, vous devez arrêter et redémarrer SQL Server pour que les modifications soient prises en compte.
Pour plus d’informations sur la configuration et le test de la connectivité, consultez « Installation et configuration de logiciels réseau clients Oracle sur le serveur de distribution SQL Server » dans Configurer un serveur de publication Oracle.
L’Oracle Publisher est associé à un autre distributeur
Un serveur de publication Oracle peut être associé avec un seul serveur de distribution SQL Server. Si un autre distributeur est associé à Oracle Publisher, abandonnez-le avant d’utiliser un autre distributeur. Si vous ne coupez pas d’abord le distributeur, vous recevez l’un des messages d’erreur suivants :
« L’instance de serveur Oracle '<OraclePublisherName> a été précédemment configurée pour utiliser '<SQLServerDistributorName> en tant que serveur de distribution. Pour démarrer l’utilisation de '<NewSQLServerDistributorName> en tant que serveur de distribution, vous devez supprimer la configuration de réplication actuelle sur l’instance de serveur Oracle, ce qui entraînera également la suppression de toutes les publications sur cette instance de serveur. »
« Le serveur Oracle '<OracleServerName> est déjà défini comme serveur de publication '<OraclePublisherName> sur le serveur de distribution '<SQLServerDistributorName>.<DistributionDatabaseName>. Supprimez l’éditeur ou le synonyme public '<SynonymName>' pour le recréer.
Lorsque vous retirez un Oracle Publisher, les objets de réplication dans la base de données Oracle sont automatiquement nettoyés. Cependant, dans certains cas, vous devez supprimer manuellement les objets de réplication Oracle. Pour nettoyer manuellement des objets de réplication Oracle créés par réplication :
Connectez-vous au serveur de publication Oracle avec des autorisations d'administrateur de base de données.
Lancez la commande SQL
DROP PUBLIC SYNONYM MSSQLSERVERDISTRIBUTOR;.Lancez la commande SQL
DROP USER <replication_administrative_user_schema>``CASCADE;.
L’erreur SQL Server 21663 est signalée concernant l’absence de clé primaire
Les articles des publications transactionnelles doivent avoir une clé primaire valide. S’ils n’ont pas de clé primaire valide, vous recevez le message d’erreur suivant lorsque vous tentez d’ajouter un article :
« Aucune clé primaire valide n’a été trouvée pour la table source [<TableOwner>].[<TableName>] »
Pour des informations sur les exigences des clés primaires, voir la section « Index et contraintes uniques » dans l’article Considérations de conception et limitations pour les éditeurs Oracle.
L’erreur SQL Server 21642 se produit en raison d’une connexion associée à un serveur lié dupliquée
Lorsque vous configurez initialement un Oracle Publisher, le processus crée une entrée serveur liée pour la connexion entre le Publisher et le distributeur. Le serveur lié a le même nom que le service TNS d'Oracle. Si vous essayez de créer un serveur lié portant le même nom, vous voyez le message d’erreur suivant :
« Les serveurs de publication hétérogènes requièrent un serveur lié. Un serveur lié appelé '<LinkedServerName> existe déjà. Supprimez ce serveur ou choisissez un autre nom de serveur de publication. »
Cette erreur peut survenir si vous tentez de créer directement le serveur lié ou si vous avez précédemment abandonné la relation entre Oracle Publisher et le distributeur SQL Server, et que vous essayez maintenant de la reconfigurer. Si vous recevez cette erreur en tentant de reconfigurer le serveur de publication, supprimez le serveur lié avec sp_dropserver (Transact-SQL).
Si vous devez vous connecter au serveur de publication Oracle par l’intermédiaire d’une connexion de serveur lié, créez un autre nom de service TNS puis utilisez ce nom lors de l’appel de sp_addlinkedserver (Transact-SQL). Pour des informations sur la création de noms de service TNS, consultez la documentation d'Oracle.
Une erreur SQL Server 21617 est signalée
La publication via Oracle utilise l’application Oracle SQL*Plus pour télécharger le package de code de prise en charge de Publisher dans la base de données Oracle. Avant de tenter de configurer le serveur de publication Oracle, SQL Server vérifie que SQL*PLUS est accessible via le chemin d’accès système sur le serveur de distribution. S’il est impossible de charger SQL*PLUS, le message d’erreur suivant s’affiche :
« Impossible d'exécuter SQL*PLUS. Assurez-vous qu'une version actuelle du code client Oracle est installée sur le serveur de distribution. »
Essayez de localiser SQLPLUS sur le distributeur. Pour une installation client Oracle 10g, le nom de cet exécutable est sqlplus.exe. Il est généralement installé dans %ORACLE_HOME%/bin. Pour vérifier que le chemin de SQLPLUS apparaît dans le chemin système, examinez la valeur de la variable système Path :
Cliquez avec le bouton droit sur Poste de travail, puis cliquez sur Propriétés.
Cliquez sur l'onglet Avancé , puis sur Variables d'environnement.
Dans la boîte de dialogue Variables d'environnement , dans la liste Variables système , sélectionnez la variable Path , puis cliquez sur Modifier.
Dans la boîte de dialogue Modifier la variable système : si le chemin vers le dossier contenant sqlplus.exe n’est pas présent dans la boîte de texte Valeur variable , modifiez la chaîne pour l’inclure.
Cliquez sur OK sur chaque boîte de dialogue ouverte pour quitter et enregistrer les modifications.
Si vous ne trouvez pas sqlplus.exe sur le distributeur, installez une version actuelle du logiciel client Oracle sur le distributeur. Pour plus d’informations, consultez Configurer un serveur de publication Oracle.
Une erreur SQL Server 21620 est signalée
Si vous vous connectez à une base de données Oracle antérieure à la version 8.1, Oracle publishing exige que le logiciel client Oracle installé sur le distributeur soit de la version 9. Si vous vous connectez à une base de données Oracle version 8.1 ou ultérieure, utilisez le logiciel client Oracle version 10 ou ultérieure.
Avant de tenter de configurer le serveur de publication Oracle, la publication Oracle vérifie que la version de SQL*PLUS accessible via le chemin d'accès système sur le serveur de distribution est de version 9 ou ultérieure. Si ce n’est pas le cas, le message d’erreur suivant s’affiche :
« La version de SQL*PLUS qui est accessible via la variable système Path n'est pas assez récente pour prendre en charge la publication dans Oracle. Assurez-vous qu'une version actuelle du code client Oracle est installée sur le serveur de distribution. »
Si vous avez plusieurs versions du logiciel client Oracle installées sur le distributeur, assurez-vous que la version la plus récente est au moins la version 9 et que la variable chemin système fait d’abord référence à cette version (les références à d’autres versions peuvent apparaître tant que la plus récente apparaît en premier). Pour plus d’informations sur la modification de la variable de chemin système, voir la section « SQL Server is Raised » plus tôt dans cet article.
Une erreur SQL Server 21624 ou 21629 est signalée
Pour les serveurs de distribution en 64 bits, la publication Oracle utilise le fournisseur Oracle OLEDB pour Oracle (OraOLEDB.Oracle). Assurez-vous que le fournisseur Oracle OLEDB est installé et enregistré sur le distributeur. Si le fournisseur n’est pas installé et enregistré, vous voyez un ou les deux messages d’erreur suivants :
« Impossible de trouver le fournisseur Oracle OLEDB enregistré, OraOLEDB.Oracle, sur le serveur de distribution '%s'. Assurez-vous qu'une version actuelle du fournisseur Oracle OLEDB est installée et enregistrée sur le serveur de distribution.»
La clé de registre CLSID indiquant que le fournisseur Oracle OLEDB pour Oracle, OraOLEDB.Oracle, a été enregistré n’est pas présente sur le distributeur. Assurez-vous que le fournisseur Oracle OLEDB est installé et enregistré sur le serveur de distribution. »
Si vous utilisez Oracle client version 10g, le fournisseur est OraOLEDB10.dll; pour la version 9i, c’est OraOLEDB.dll. Le fournisseur est installé dans %ORACLE_HOME%\BIN (par exemple, C:\oracle\product\10.1.0\Client_1\bin). Si vous constatez que le fournisseur Oracle OLEDB n’est pas installé sur le distributeur, installez-le depuis le disque d’installation du logiciel client Oracle fourni par Oracle. Pour plus d’informations, consultez Configurer un serveur de publication Oracle.
Si le fournisseur Oracle OLEDB est installé, assurez-vous qu’il est enregistré. Pour enregistrer la DLL fournisseur, exécutez la commande suivante depuis le répertoire où la DLL est installée, puis arrêtez et redémarrez l’instance SQL Server :
-
regsvr32 OraOLEDB10.dllouregsvr32 OraOLEDB.dll.
L’erreur SQL Server 21626 ou l’erreur 21627 se produit
Pour vérifier que l’environnement de publication Oracle est correctement configuré, SQL Server tente de se connecter à Oracle Publisher en utilisant les identifiants de connexion que vous avez spécifiés lors de la configuration. Si le distributeur SQL Server ne peut pas se connecter à Oracle Publisher, vous voyez le message d'erreur suivant :
- « Impossible de se connecter au serveur de base de données Oracle '%s' au moyen du fournisseur Oracle OLEDB OraOLEDB.Oracle. »
Si vous voyez ce message d’erreur, vérifiez la connectivité à la base de données Oracle en exécutant SQL*PLUS directement en utilisant la même connexion et mot de passe que vous avez spécifiés lors de la configuration de Oracle Publisher. Pour plus d'informations, voir la section « Le distributeur SQL Server ne peut pas se connecter à l'instance Oracle Database » plus tôt dans cet article.
L’erreur SQL Server 21628 est affichée
Pour les serveurs de distribution en 64 bits, la publication Oracle utilise le fournisseur Oracle OLEDB pour Oracle (OraOLEDB.Oracle). SQL Server crée une entrée de Registre pour permettre au fournisseur Oracle de s'exécuter en processus avec SQL Server. S’il y a un problème pour lire ou écrire cette entrée du registre, le message d’erreur suivant apparaît :
« Impossible de mettre à jour le Registre du serveur de distribution '%s' pour permettre au fournisseur Oracle OLEDB OraOLEDB.Oracle de s'exécuter avec SQL Server. Vérifiez que la connexion actuelle est autorisée à modifier les clés de Registre dont SQL Server est propriétaire. »
La publication Oracle exige que l’entrée de registre existe et soit définie sur 1 pour les Distributeurs 64 bits. Si l'entrée n'existe pas, SQL Server tente de la créer. Si l'entrée existe mais est réglée à 0, le paramètre ne change pas et la configuration de l'Oracle Publisher échoue.
Pour afficher et modifier les paramètres du Registre :
Sélectionnez Démarrer, puis Exécuter.
Dans la boîte de dialogue Exécuter, tapez regedit, puis sélectionnez OK.
Accédez à HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Microsoft SQL Server\<InstanceName>\Providers.
Dans la section Fournisseurs, trouvez un dossier nommé
OraOLEDB.Oracle. Dans ce dossier, trouvez le nom de valeur DWORD AllowInProcess avec une valeur de 1.Si vous constatez que AllowInProcess est réglé à 0, mettez à jour l’entrée du registre à 1 :
Faites un clic droit sur l’entrée, puis sélectionnez Modifier.
Dans la boîte de dialogue Modification de la chaîne , tapez 1 dans la zone Données de la valeur .
L’erreur SQL Server 21684 est générée
Si le compte utilisateur administratif ne dispose pas de privilèges suffisants, vous voyez le message d’erreur suivant :
« Les autorisations associées à la connexion administrateur du serveur de publication Oracle '% s' ne suffisent pas. »
Pour vérifier les autorisations accordées à l’utilisateur, effectuez la requête suivante : SELECT * from session_privs. La sortie doit ressembler à ce qui suit :
PRIVILEGE
------------------
CREATE SESSION
CREATE TABLE
CREATE PUBLIC SYNONYM
DROP PUBLIC SYNONYM
CREATE VIEW
CREATE SEQUENCE
CREATE PROCEDURE
CREATE TRIGGER
Vous rencontrez des problèmes d’autorisations pour le schéma utilisateur de réplication
Le schéma utilisateur de réplication doit avoir les autorisations décrites dans la section « Création manuelle du schéma utilisateur » de la rubrique Configurer un serveur de publication Oracle.
Erreur Oracle ORA-01000
La réplication utilise des curseurs sur le serveur de publication Oracle au cours du processus d'ajout d'articles à une publication. Il est possible que le nombre maximal de curseurs disponibles sur le serveur de publication soit dépassé au cours de ce processus. Si cela se produit, l'erreur suivante est signalée :
« ORA-01000 : Nombre maximum de curseurs ouverts atteint »
Pour éviter ce problème, vérifiez que le paramètre max_open_cursors des bases de données Oracle est défini à un nombre suffisamment élevé (au moins 1 000). Pour plus d'informations sur ce paramètre, consultez la documentation Oracle.
Erreur Oracle ORA-01555
L'erreur de base de données Oracle suivante n'est pas liée à la réplication d'instantané ; elle est liée à la façon dont Oracle construit des vues de données cohérentes en lecture :
« ORA-01555 : Instantané trop ancien »
À l’aide d’objets appelés segments d’annulation, Oracle construit des vues cohérentes en lecture des données telles qu’elles existaient au moment où une instruction SQL est émise. Une erreur « instantané trop ancien » peut se produire quand des informations de restauration sont écrasées par d'autres sessions concurrentes. Avant Oracle 9i, la méthode recommandée pour réduire la fréquence de cette erreur était d'augmenter la taille et/ou le nombre de segments d'annulation, et d'attribuer les grosses transactions à un segment d'annulation spécifique.
Dans Oracle 9i, Oracle a introduit le concept d’espace de tables UNDO, qui remplace le segment de rollback. Pour éviter l'erreur « instantané trop ancien » dans Oracle 9i, les actions suivantes sont recommandées :
Créer un tablespace UNDO avec une quantité appropriée d'espace libre.
Définir la garantie de rétention pour l’espace de table (Oracle 10g et versions ultérieures).
Configurer les paramètres d'initialisation d'Oracle UNDO_MANAGEMENT et UNDO_RETENTION.
Pour plus d'informations sur la façon d'éviter l'erreur « instantané trop ancien », consultez la documentation d'Oracle.
Erreur Oracle ORA-22285
Si une table comprend une colonne BFILE, les données pour cette colonne sont stockées dans le système de fichiers. Vous devez accorder au compte utilisateur administrateur de la réplication l’accès au répertoire où les données sont stockées en utilisant la syntaxe suivante :
GRANT READ ON DIRECTORY <directory_name> TO <replication_administrative_user_schema>
Si vous n’accordez pas l’accès, l’agent du lecteur de journal génère l’erreur suivante :
« ORA-22285 : répertoire ou fichier inexistant pour l'opération fileopen »
Modifications nécessitant une reconfiguration du Publisher
Si vous modifiez les tables ou procédures de métadonnées de réplication, vous devez supprimer et reconfigurer le Publisher. Pour reconfigurer le Publisher, vous devez abandonner le Publisher et le reconfigurer en utilisant SQL Server Management Studio, Transact-SQL ou RMO. Pour plus d’informations sur la configuration du Publisher, voir Configurer un Oracle Publisher.
Supprimer un Oracle Publisher (SQL Server Management Studio)
Connectez-vous au serveur de distribution correspondant au serveur de publication Oracle dans SQL Server Management Studio et développez le nœud du serveur.
Cliquez avec le bouton droit sur Réplication, puis cliquez sur Propriétés du serveur de distribution.
Sur la page Serveurs de publication de la boîte de dialogue Propriétés du serveur de distribution , désactivez la case à cocher pour le serveur de publication Oracle.
Cliquez sur OK.
Pour supprimer un serveur de publication Oracle (Transact-SQL)
- Exécutez sp_dropdistpublisher. Pour plus d’informations, consultez sp_dropdistpublisher (Transact-SQL).