Pour faire suite à l’article Créer un server lié vers Oracle :
Vous pouvez rencontrer l’erreur ci-dessous :
The OLE DB Provider "OraOLEDB.Oracle" for linked server "TEMCLN" reported an error. Access denied. Cannot obtain the required interface ("IID_IDBSchemaRowset") from OLE DB provider "OraOLEDB.Oracle" for linked server "TEMCLN". (MS SQL Server Error 7399)
Pour résoudre cette erreur, il suffit de modifier le provider OraOleDB.Oracle et de cocher l’option « Allow inProcess » comme ci-dessous :
Pourquoi cela est nécessaire ? Selon MSDN le rôle de cette option est le suivant :
Allow inprocess SQL Server allows the provider to be instantiated as an in-process server. When this option is not set, the default behavior is to instantiate the provider outside the SQL Server process. Instantiating the provider outside the SQL Server process protects the SQL Server process from errors in the provider. When the provider is instantiated outside the SQL Server process, updates or inserts referencing long columns (text, ntext, or image) are not allowed.
Nous pouvons donc imaginer que notre serveur oracle lié fait appel à des types non autorisés lorsque le provider n’est pas initialisé dans SQL Server. Mais ce n’est qu’une supposition …