Posted 22. maggio 2012 17.47 in Informatica
Mentre in passato non avevo difficoltà a creare dei Linked Server su versioni a 32bit di Sql Server che giravano su sistemi operativi sempre a 32bit (es sql2005 su win2003), l’accoppiata x64 di Sql e OS oggi mi ha fatto un po’ penare. Riporto qui i passi per mia memoria e se serve a qualcuno.
Innanzittutto bisogna installare il client Oracle a 64bit (io ho usato la 11.1 scegliendo la voce Administration –700 e passa Mb - in quanto solo con l’Instant Client non andava), editare sqlnet.ora e tnsnames.ora con i propri parametri e accertarsi che tutto funzioni correttamente (io di solito lo faccio creando un file .udl e testando la connessione).
Anche se non richiesto un bel riavvio del server a questo punto ci vuole.
Come è noto è possibile usare due provider OleDB diversi: quello Oracle che si installa con il client (OraOLEDB.Oracle) oppure quello Microsoft (MSDAORA) che si trovava nel pacchetto MDAC di antica memoria. Pur avendo in passato prediletto quest’ultimo non sono riuscito (velocemente) a trovare il provider Ms a 64bit ed ho quindi optato per quello Oracle.
L’ultimo scoglio restava in sibillini messaggi di errore quando tentavo una query o una semplice enumerazione delle tabelle.
Il workaround è settare a true due parametri del Provider prima di creare i linked server:
EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'AllowInProcess', 1
GO
EXEC master.dbo.sp_MSset_oledb_prop N'OraOLEDB.Oracle', N'DynamicParameters', 1
GO
Successivamente basta eseguire gli script Sql per la creazione e per la security (che potrebbe essere diversa da quanto sotto secondo le esigenze):
EXEC master.dbo.sp_addlinkedserver @server = N'OracleLinkedSrv', @srvproduct=N'Oracle', @provider=N'OraOLEDB.Oracle', @datasrc=N'YOURSERVERNAME'
GO
EXEC master.dbo.sp_addlinkedsrvlogin @rmtsrvname=N'OracleLinkedSrv',@useself=N'False',@locallogin=NULL,@rmtuser=N'yourusername',@rmtpassword='yourpwd'
GO
E adesso posso fare query eterogenee anche su Sql2008 x64…
Posted 2. febbraio 2010 16.55 in Informatica
Dopo che ieri avevo trovato il modo di imbrogliare l’installer del client Oracle 11gR1 a 64bit (che ufficialmente non supporta Windows 7), oggi mi sono dovuto scontrare con un problema più rognoso: il client si era installato, riuscivo a fare una connessione al server Oracle, ma il mio progetto ASPX (con il suo DAL e un mio OracleHelper) dentro VS2008 non funzionavano.
Ricompilando infatti il DAL (Data Access Layer) con la Oracle.DataAccess.dll a 64 bit e facendo girare il sito sull’IIS 7.5 locale (che gira a 64bit) tutto funzionava, ma se facevo ricompilare il sito aspx mi beccavo una bella:
Could not load file or assembly 'Oracle.DataAccess, Version=2.111.6.0, Culture=neutral, PublicKeyToken=89b483f429c47342' or one of its dependencies. An attempt was made to load a program with an incorrect format.
In pratica la dll a 64bit a VS2008 (che ricordo è solo a 32bit) non andava giù…Ricompilando il DAL con una vecchia DLL (una 10.2) a 32 bit, il progetto web si ricompilava ma l’esecuzione nel browser dava un
The provider is not compatible with the version of Oracle client
Per farla breve ed evitarvi tutti i passaggi intermedi infruttosi (smanettare nella GAC, commentare l’assembly nel machine.config, sperare che il catamarano di Oracle si incagli sugli scogli, ecc) ecco come ho risolto:
- Disinstallare tutto e partire puliti :-)
- Installare il client 11gR1 a 32 bit (win32_11gR1_client, sempre col trucco del file refhost.xml); provando una connessione con un fle .udl vi dirà che non trova il provider… fa niente
- Installare il cliente 11gR1 a 64bit (win64_11gR1_client); ora l’udl si connette
- Ricompilare il vostro Dal o Helper con la Oracle.DataAccess a 32 bit (io ho usato la 1.111.6.0)
- Ricompilare il vostro progetto web con queste dll nella Bin; dovrebbe ricompilare bene e il sito girare nel webserver di VS (Cassini)
- Se volete che giri anche nell’IIS 7.5 (perchè magari volete testare bene authorization e authentication) allora dovete andare nelle Advanced Settings dell’Application Pool associato al vostro website e dire Enable 32-bit Application = True
Magari per qualcuno era logico, ma forse a qualcun altro risparmia qualche ora e qualche santo…
Posted 1. febbraio 2010 14.33 in Informatica
Quando ho iniziato a preoccuparmi di dover installare il cliente Oracle sul mio nuovo notebook Win7 x64 ero piú preoccupato per i 64 bit che non per il sistema operativo.
Invece sembra proprio che fino all’arrivo della “planned” 11g R2 Windows 7 non sia ufficialmente supportato.
Lanciando il setup si ottiene infatti un :
Controllo dei requisiti del sistema operativo in corso...
Risultato previsto: Uno di 5.0,5.1,5.2,6.0
Risultato effettivo: 6.1
Controllo completato. Risultato globale del controllo: Non superato <<<<
Problema: Oracle Database 11g non è certificato sul sistema operativo corrente.
Suggerimento: Accertarsi di installare il software sulla piattaforma corretta.
o in inglese
Checking operating system requirements ...
Expected result: One of 5.0,5.1,5.2,6.0
Actual Result: 6.1
Check complete. The overall result of this check is: Failed <<<<
Problem: Oracle Database 11g is not certified on the current operating system.
Recommendation: Make sure you are installing the software on the correct platform.
Il trucco per forzare l’avvio della procedura di setup sta nel modificare il file refhost.xml che sta in
\win32_11gR1_client\client\stage\prereq\client\
e aggiungere un nodo
<!--Microsoft Windows 7-->
<OPERATING_SYSTEM>
<VERSION VALUE="6.1"/>
</OPERATING_SYSTEM>
dopo il 6.0 di Vista (prima della chiusura di </CERTIFIED_SYSTEMS> )
Non so se tutti i tool (SqlPlus, ecc) funzionano… ho provato solo a fare un File .udl e la connection va a buon fine.
Un altro “errore” in cui potreste incappare è quello della directory dell’installazione: il PATH NON DEVE AVERE DENTRO DEGLI SPAZI ! (e questo nel 2010 mi pare un po’ grave…)
Quindi scordatevi la C:\Program Files\Oracle e optate per la vostra C:\users\Nomeutente oppure per la “vecchia” e brutta C:\Oracle