I'm connecting to an Oracle DB with WE8MSWIN1252 encoding from a webserver that displays content in UTF-8 using MariaDB Connect Engine.
The code used for connecting the tables is like this:
CREATE TABLE mytable ENGINE=CONNECT TABLE_TYPE=ODBC TABNAME='oracle_table_name' CONNECTION='DSN=orcl;UID=someuser;PWD=passwd';
I know I have to pass somewhere the expected charset, but not sure about the syntax using this engine.
I'm able to correctly display the characters connecting directly from php using this code:
oci_connect('someuser', 'passwd', 'host', 'AL32UTF8');
The odbc.ini file looks like this:
[orcl]
Driver = Oracle 12c ODBC driver
Servername = host
I have tried putting Charset = UTF-8 in this file but it didn't work.
After many tries and a lot of investigation I understood that it was a matter of the environment setup.
I finally solved it writing the next line in /etc/init.d/mysql:
NLS_LANG=SPANISH_COLOMBIA.WE8MSWIN1252 ; export NLS_LANG
And to connect from isql the next line was needed in /root/.bash_profile:
NLS_LANG=SPANISH_COLOMBIA.AL32UTF8 ; export NLS_LANG
I was on CentOS 6, so I suppose in other environments this could not work.
Related
i'm trying to load from a local file into a db2 database using jdbc. the code looks like below:
stmt = jdbc.connection.prepareCall("call sysproc.db2load(....)")
stmt.regParameter(3, "load client from D:\\a.del of del insert into a")
but it doesn't work. The "SYSPROC.DB2LOAD" option is incompatible with the "CLIENT" option
so is there any way i can use jdbc to load local file into db2??
I've tried several attempt to connect Oracle DB but still unable to connect. Following is my code to connect. However, I could connect Oracle DB through the terminal like this:
$ sqlplus64 uid/passwd#192.168.0.5:1521/WSVC
My evironment: Ubuntu 16.04 / 64bit / Python3.5
I wish your knowledge and experience associated with this issue to be shared. Thank you.
import os
os.chdir("/usr/lib/oracle/12.2/client64/lib")
import cx_Oracle
# 1st attempt
ip = '192.168.0.5'
port = 1521
SID = 'WSVC'
dsn_tns = cx_Oracle.makedsn(ip, port, SID)
# dsn_tns = cx_Oracle.makedsn(ip, port, service_name=SID)
db = cx_Oracle.connect('uid', 'passwd', dsn_tns)
cursor = db.cursor()
-------------------------------------------------
# 2nd attempt
conn = "uid/passwd#(DESCRIPTION=(SOURCE_ROUTE=OFF)(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.0.5)(PORT=1521)))(CONNECT_DATA=(SID=WSVC)(SRVR=DEDICATED)))"
db = cx_Oracle.connect(conn)
cursor = db.cursor()
------------------------------------------------------
# ERROR Description
cx_Oracle.InterfaceError: Unable to acquire Oracle environment handle
The error "unable to acquire Oracle environment handle" is due to your Oracle configuration being incorrect. A few things that should help you uncover the source of the problem:
when using Instant Client, do NOT set the environment variable ORACLE_HOME; that should only be set when using a full Oracle Client or Oracle Database installation
the value of LD_LIBRARY_PATH should contain the path which contains libclntsh.so; the value you selected looks like it is incorrect and should be /usr/lib/oracle/12.2/client64/lib instead
you can verify which Oracle Client libraries are being loaded by using the ldd command as in ldd cx_Oracle.cpython-35m-x86_64-linux-gnu.so
I've installed Oracle Instant Client 64 bits, when connecting with SchemaSpy I get the error message below.
PLEASE NOTE: Both these files exist
C:\app\instantclient_12_1\ojdbc6.jar
C:\app\instantclient_12_1\ocijdbc12.dll
And "C:\app\instantclient_12_1\" is in the PATH.
I've tried C:\app\instantclient_12_1\ojdbc7.jar as well, same result.
Windows 7 64 bits.
Would greatly appreciate any help from anyone who got this to work correctly.
Error message:
Failed to load driver [oracle.jdbc.driver.OracleDriver] from classpath [file:/C:/app/instantclient_12_1/ojdbc6.jar]
Make sure the reported library (.dll/.lib/.so) from the following line can be
found by your PATH (or LIB*PATH) environment variable
java.lang.UnsatisfiedLinkError: C:\app\instantclient_12_1\ocijdbc12.dll: Specified process not found
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(Unknown Source)
at java.lang.ClassLoader.loadLibrary(Unknown Source)
at java.lang.Runtime.loadLibrary0(Unknown Source)
at java.lang.System.loadLibrary(Unknown Source)
at oracle.jdbc.driver.T2CConnection$1.run(T2CConnection.java:4115)
at java.security.AccessController.doPrivileged(Native Method)
at oracle.jdbc.driver.T2CConnection.loadNativeLibrary(T2CConnection.java:4111)
at oracle.jdbc.driver.T2CConnection.logon(T2CConnection.java:308)
at oracle.jdbc.driver.PhysicalConnection.connect(PhysicalConnection.java:662)
at oracle.jdbc.driver.T2CDriverExtension.getConnection(T2CDriverExtension.java:54)
at oracle.jdbc.driver.OracleDriver.connect(OracleDriver.java:560)
at net.sourceforge.schemaspy.SchemaAnalyzer.getConnection(SchemaAnalyzer.java:582)
at net.sourceforge.schemaspy.SchemaAnalyzer.analyze(SchemaAnalyzer.java:157)
at net.sourceforge.schemaspy.Main.main(Main.java:42)
E=3I=3
Here's how to run SchemaSpy 6 against an Oracle database:
Dependecies
Make sure you have the following available on your machine:
The lastest version from schemaspy.org, the following will describe the process for schemaspy-6.0.0-rc1.
The Oracle JDBC thin driver, otherwise you'll have to mess around with Oracle OCI. You can get it from Oracle Database 12.1.0.2 JDBC Driver & UCP Downloads
SchemaSpy uses GraphViz to generate the diagrams, get it from graphviz.org. You'll need to update you PATH variable, add C:\Program Files (x86)\Graphviz2.38\bin to it (make sure the version fits the one you downloaded).
Database Type
Note, SchemaSpy supports Oracle OCI (-t ora) and Oracle Thin (-t orathin) as database types. To get the list of available database types:
java -jar schemaspy-6.0.0-rc1.jar -dbhelp
Configuration
You can put most configuration parameters into a file called schemaspy.properties, put this file into the same directory as schemaspy-6.0.0-rc1.jar.
Example schemaspy.properties:
# type of database. Run with -dbhelp for details
schemaspy.t=orathin
# path to the dowloaded oracle jdbc drivers, for example
schemaspy.dp=C:\tools\dbdoc\drivers\ojdbc7.jar
# database properties: host, port number, name user, password
schemaspy.host=[orcale database host]
schemaspy.port=[orcale database port, usualy 1521]
schemaspy.db=[database name or SID]
schemaspy.u=[username]
schemaspy.p=[password, for complexer ones, put it in quotation marks]
# output dir to save generated files
schemaspy.o=C:\tools\dbdoc\output
# db scheme for which generate diagrams
schemaspy.s=[scheme name]
Generate documentation
With the configuration in place, now all you have to do is run:
java -jar schemaspy-6.0.0-rc1.jar
we have utf8 sql files and using liquibase. I was setting up liquibase from ground up and had issues with utf8 encoded sql files for mysql.
I set everything from env variable to mysql connection string to guarante to use utf8 encoding but nothing worked. Tipps i tried: Setting env like file.encoding, setting utf8 into the connection string for mysql connection, setting the encoding for the database, client and server.
What worked was switching from Liquibase 3.5.1 to 3.4.2.
Did something change the behaviour or does Liquibase 3.5.1 has a new/different behaviour on how to handle utf8 files properly?
Example Error message when i use 3.5.1 instead of 3.4.2 (nothing else is different):
"Unexpected error running Liquibase: You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near 'INSERT INTO " ...
#sigi I may have encountered the same issue starting version 3.5.0 (3.5.1)
Token errors suggest that it must have to with the Lexical analysis added in version 3.5
https://liquibase.jira.com/projects/CORE/issues/CORE-2843
Fixed in version 3.5.2
SimpleSqlGrammer.jj
S_CHAR_LITERAL didn't support the escaped single quote within a string literal \'
quick workaround would be to replace escaped single quote \' with two quotes '' which is also working well in MySQL string literals
I am stuck with connecting to Oracle DB, have read lots of stuff but no help on result.
I have remote Oracle DB, I am connecting to it using DBVisualizer setting connection like this:
DB Type : Oracle
Driver (jdbc) : Oracle thin
Database URL: jdbc:oracle:thin:#10.10.100.10:1521/VVV.LOCALDOMAIN
UserIdf: SomeUser
Pass: SomePass
Connection works ok.
What I do in Ruby is :
require 'oci8'
require 'dbi'
...
conn = OCI8.new('SomeUser','SomePass','//10.10.100.10:1521/VVV.LOCALDOMAIN')
...
What I get is:
ORA-12545: Connect failed because target host or object does not exist
oci8.c:360:in oci8lib.so
the third parameter needs to be the TNS hostname, if you use SQL plus it is also the third parameter in the connectstring, you can find it also in the tnsnames.ora file in the oracle maps
in SQLPlus : connect user/password#hostname;
in oci8 : conn = OCI8.new('SomeUser','SomePass',hostname)
Here a working sample, obfuscated the parameters of course
require 'oci8'
oci = OCI8.new('****','***','****.***')
oci.exec('select * from table') do |record|
puts record.join(',')
end