Oracle Instant Client for ARM based Debian device - oracle

As the title suggest Oracle doesn't provide a ARM based instant client.
Which is necessary to communicate with the DB server. (this is the only way we need for our project)
So can any one help us to install/compile/modify the oracle instant client to make it work on Debian arm based system ? Targer oracle database 11g
Instant Client for Microsoft Windows (x32)
Instant Client for Microsoft Windows 64-bit Itanium
Instant Client for Microsoft Windows (x64)
Instant Client for Linux x86
Instant Client for Linux x86-64
Instant Client for Linux Itanium
Instant Client for Linux AMD64 (32-bit and 64-bit)
Instant Client for Linux on Power (32-bit)
Instant Client for Linux on Power (64-bit)
Instant Client for z/Linux (31-bit and 64-bit)
Instant Client for Mac OS X (Intel x86) (32-bit and 64-bit)
Instant Client for Mac OS X (PPC)
Instant Client for Solaris Operating System (SPARC) (64-bit)
Instant Client for Solaris Operating System (SPARC) (32-bit)
Instant Client for Solaris x86
Instant Client for Solaris x86-64
Instant Client for HP-UX PA-RISC (64-bit)
Instant Client for HP-UX PA-RISC (32-bit)
Instant Client for AIX5L (64-bit)
Instant Client for AIX5L (32-bit)
Instant Client for HP Tru64 UNIX
Instant Client for HP-UX Itanium (64-bit)
Instant Client for HP-UX Itanium (32-bit)
Last questions i check on this were very old like 2-3 yrs back i guess there might be some method now ?

As far as I know, Oracle does not, and never has, and probably never will in a near future provide an Instant Client for ARM-based Linux. As it is a proprietary software, there is little chances that you could "compile" it...
An option would be to write your own driver implementing of Oracle's wire-protocol. But this is far from trivial. Not mentioning the (possible) legal implications as this is a proprietary protocol.
For now, your best bet if you want to connect directly from your ARM box to an Oracle server, is probably to use the JDBC thin-driver as it is pure-java and should run on a JVM for ARM. If your application is not written in Java, you will probably need to write some kind of gateway yourself -- or wrap your own stuff through JNI maybe (sounds like a kludge, no?)
Depending on your needs and your project requirements, maybe you should investigate the option of having some kind of "web service" acting as a gateway to Oracle and running on an x86/amd64 box somewhere on your network. Then your clients (ARM-based or not) would access to the underlying DB through it.
There are many clients for open-sources RDMBS that you can use on ARM devices. Maybe you could manage to synchronize data between Oracle an one of these RDBMS ?
As of myself, I would push toward the third solution. But once again, this is all depending on your actual needs.
Given your various comments below, I would say that the choice of an ARM target was an error given your absolute need to embed instant client to connect to an Oracle RDBMS.
Maybe a small form-factor Intel's Atom based board would have been a better choice here? A Take a look for example at MinnowBoard or even Intel Galileao. Those are only suggestions. And I never worked with any of them. You will probably be able to find other/better options by googling a little. Check for the Linux compatibility/ease of install -- and you will have a full fledged x86 architecture at hand.

For readers coming on this question, Oracle has now released Instant Client for Linux ARM64 https://www.oracle.com/database/technologies/instant-client/linux-arm-aarch64-downloads.html

Related

Does Oracle Linux come with Oracle-DB

I can't seem to find any information whether Oracle Linux comes with pre-installed Oracle-DB or not.
It does not come pre-installed. Oracle Linux is just an operating system - specifically a clone/derivative of Red Hat Linux - suitable for many uses and not just as a database server. It does come with certain kernel tweaks meant to make it a better database server should you choose to use it for that, and with available RPM packages to help you pre-configure the server for database installation, but not with an actual installed database instance.

moving oracle client from win7/32 to win10/64

I'm trying to set up the Oracle instant client ODBC driver on Windows 10 because we're moving applications from Windows 7 / 32 bit to Windows 10 / 64 bit. The Windows 7 platform works using the Microsoft ODBC Driver for Oracle but that driver is deprecated. So I'm trying to install the 64 bit Oracle instant client. When trying to connect, I'm getting a TNS adapter protocol error. Every search that I've done leads me to solutions around checking the server but the server is working fine in the enterprise. I don't have an actual Oracle client installed, just the ODBC driver. Using the following connection string
Driver={Oracle in instantclient_11_2};Server=(DESCRIPTION=(ADDRESS=(PROTOCOL = TCP)(HOST = redacted)(PORT = 1521))(CONNECT_DATA = (SERVER = DEDICATED)(SID=redacted))); Uid=redacted;Pwd=redacted;
Which client application do you use?
If this is a 32-bit application (which seems to be the case because before you used the Microsoft ODBC Driver which exist only for 32-bit) then the ODBC driver must be also 32-bit! You cannot mix the architectures.
Of course you can install 32-bit applications/drivers on a 64-bit Windows.
The ODBC driver requires and Oracle client, however it looks like you installed it already.
Remove the space character from the connection string.
If you need to install both, the 32-bit and the 64-bit ODBC driver, follow this instruction: BadImageFormatException. This will occur when running in 64 bit mode with the 32 bit Oracle client components installed
I solved the issue.
I created an ODBC data source for the connections I want to use and altered the connection strings to
dsn=redacted;uid=redacted;pwd=redacted
Also installed tnsnames.ora in c:\oracle\instantclient_19_10\network\admin\ directory and set TNS_ADMIN system environment variable to c:\oracle\instantclient_19_10

Oracle ODBC, 64bit and 32bit, same name

we upgraded a user to windows 10 and we are having issues configuring the ODBC connect with Oracle.
We got both the 64bit and 32bit drivers installed. I know the OBDC for 32bit is syswow64 and 64bit is on the system32.
I guess the user has two version of the same application. One uses the 64bit drivers and the other version uses the 32bit driver. They both use the same name inside the obdc connect. When we try to add the 32bit connection it overwrites the 64bit connection. I'm guessing because its the same name.
Is there a way to add two odbc connections with the same name, but one being a 32bit and the other being a 64bit?
The user say you have to map the two drivers together and something and about using the odac oracle install. When i installed i just uses the oracle client install as administrator. The oracle version is 12.2
When I've had this issue, I've had to set up two versions of the driver and reference them independently. I'll have "Oracle32" and "Oracle64" and then reference the one the application calls for. I hope that helps!
In earlier Oracle versions by default both drivers had the same name and the ORACLE_HOME were equal, e.g. OraClient11g_home1.
Now in Oracle 12 or newer this changed by default to OraClient12Home1_32bit and OraClient12Home1
I assume you can simply rename the ODBC driver in registry, i.e.
HKLM\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\Oracle in OraClient12Home1_32bit rename key to Oracle in OraClient12Home
HKLM\SOFTWARE\WOW6432Node\ODBC\ODBCINST.INI\ODBC Drivers\Oracle in OraClient12Home1_32bit rename to Oracle in OraClient12Home1
As far as I know when you add a "User DSN" then the DSN is platform independent, i.e. tries to load the 32/64 bit driver depending on the invoking process. Thus, if you add the same DSN again, it will overwrite the existing one. In order to determine the platform you have to add a "System DSN".
This answer may help you for installation: BadImageFormatException. This will occur when running in 64 bit mode with the 32 bit Oracle client components installed

Use 32-bit version of ODBC on 64-bit Windows 7?

I'm having problem with ODBC and an application written with Visual Basic 6 (so it's 32-bit). It seems that the ODBC library of VB6 is not compatible with the 64-bit ODBC of Windows 7.
The error code returned is -2147220992 and it's rambling about incompatible architectures.
Can I install a 32-bit version of ODBC? Or any other alternatives?
use the 32-bit odbc manager to add your DSN:
C:\Windows\SysWOW64\odbcad32.exe
that should be able to see the 32-bit odbc driver.
You need to use the 32 bit version of ODBC. You can't mix 32 and 64 bit code in the same process.
However, that may not be your problem. That error code is, I think, CONNECT_E_NOCONNECTION and there could be all sorts of reasons why you get that, and no necessarily down to 32/64 bit driver issues. For example, did you define the ODBC connection (DSN) with 32 bit admin tools?
Finally, I would recommend that you quote precise error messages rather than using phrases like "rambling about incompatible architectures". Precise information will help track down the problem.
As mentioned above:
C:\windows\SysWow64\odbcad32.exe is the location for the 32-bit version of the ODBC Administrator.

Can i use a 32 Bit ODBC Driver for my 64 Bit app

I have a Win32 application that makes ODBC-Connections. We connect using SQLDriverConnect()
which displays a dialog to select the data source. In the x64-Version the Dialog shows and offers 2 different 32 Bit MS ACCESS Drivers. When i select one of these, in the 32 Bit version i would see a open file dialog to select a .mdb file. In the 64 Bit version the call to SQLDriverConnect() at this point returns with -1.
SQLError() returns: "[Microsoft][ODBC Driver Manager] Data source name not found and no default driver specified"
Is it in general possible to use a 32 Bit ODBC Driver from a 64-Bit executable? Why are these driver shown? As far as i can find there is no 64 Bit MS Access OBDC driver so far. What can i do?
You absolutely cannot mix 32bit application and 64bit driver (or vice-versa).
Basically, an ODBC driver is, typically, a dll (windows) or a shared object (linux...) which is loaded by its parent application.
All executables, dlls, etc that share the same process space must be the same bit'ness...
In order to "bridge" from a 64bit application to a 32bit ODBC driver you would need to employ an ODBC to ODBC Bridge such as -
http://uda.openlinksw.com/odbc-odbc-mt/
This has a 64bit ODBC client component which connects vis sockets to 32bit server components. The server components bridge to a pre-configured 32bit Access ODBC DSN.
Client component can be either on the local machine or a server machine...
Well, I don't know why SQLDriverConnect() works the way you describe it, but perhaps this Blog post from Microsoft
http://blogs.msdn.com/b/psssql/archive/2010/01/21/how-to-get-a-x64-version-of-jet.aspx
can help you a little bit.
Seems there will be no native 64 bit ODBC driver for MS Access in near future, but those ACE components mentioned there may be an alternative.
You can't, but you have the alternative to compile your app in 32bits, and use the 32bit odbc driver. In my case, I use GoLang just change GOARCH environment variable SET GOARCH=386 then compile your project go build and your all set.

Resources