2025年mysql 数据库连接_java连接oracle数据库

mysql 数据库连接_java连接oracle数据库原理 Oracle 数据网关 就像一个桥梁 贯通 oracle 数据库和 non oracle 数据库 在配置过程中 我们经常讲到的三个重要文件 第一 tnsnames ora 第二 lisener ora 第三 init ora 他们是如何工作呢 比如对一个连接数据库的查询 select from tablename linkdbname oracle 首先从 linkdbname 开始

原理:

Oracle数据网关,就像一个桥梁,贯通oracle数据库和non-oracle数据库。在配置过程中,我们经常讲到的三个重要文件:第一、tnsnames.ora;第二、lisener.ora;第三、init.ora。他们是如何工作呢?

比如对一个连接数据库的查询,select * from “tablename”@linkdbname;oracle首先从linkdbname开始,通过dba_db_links表查到建表时所属于的tnsname;然后在tnsnames.ora中找到tnsname对应的sid;

接着在lisener.ora中找该SID所对应的应用程序PROGRAM(如:PROGRAM=dg4msql或PROGRAM=dg4odbc),而且这个程序到哪找,就要注明oracle_home(ORACLE_HOME=/opt/oracle/product/gw);找到

程序之后,oracle会在程序所在目录的admin子目录下找到init.ora文件,读取里面的连接信息;然后通过连接信息与non-oracle数据库通信。因为只有明白这个原理,下面的配置就简单多了

连接的过程:oracle——dg4odbc——odbc——mysql,现在oracle——dg4odbc是监听到了,odbc——mysql也成功了,那现在的问题很有可能是出现在dg4odbc——odbc里,而事实上,报错的地方也确实

是在init.ora(这个文件就是dg4odbc——odbc的中介)

create database link mysql connect to “demo” identified by “demo” using ‘mytest’;

select “col3” from “demo”@mysql;

安装过程详解:

1. 安装mysql client or my server .安装完成后,确认可以连接mysql 数据库。

rpm –ivh MySQL-shared-community-5.1.38-0.rhel5.x86_64.rpm

rpm –ivh MySQL-devel-community-5.1.38-0.rhel5.x86_64.rpm

rpm –ivh MySQL-client-community-5.1.38-0.rhel5.x86_64.rpm

确认:mysql -h 123.196.125.7 –uroot –pqcmysql dem

mysql -udem -p -h 123.196.125.7 dem

2. 安装unxiodbc

gunzip unixODBC-2.2.14-p1.tar.gz

tar –xvf unixODBC-2.2.14-p1.tar

cd unixODBC-2.2.14-p1

export CFLAGS=”-DBUILD_REAL_64_BIT_MODE”

# ./configure –enable-gui=no (因没有安装qt 包,所以需要添加–enable-gui=no 参数)

make

make install

3 . 编译mysql-connector-odbc ????????????????????????????????????????????配置yum

yum install mysql-connector-odbc Ver:3.51.26

4 . 编辑odbc.ini

在unixodbc 的安装目录下(默认为/usr/local) ,进入etc/, 编辑odbc.ini 文件

vi /usr/local/etc/odbc.ini

[ODBC Data Sources]

mysql = MySQL ODBC Driver 2.2.14

[mysql]

DRIVER = /usr/lib64/libodbc.so

DATABASE = dem

DESCRIPTION = MySQL ODBC 5.1.5 Connector Sample

PORT = 3306

SERVER = 123.196.125.7

#UID = root

#PWD = qcmysql

CHARSET = lattin1

TRACEFILE = /tmp/odbc-demodsn.trc

TRACE = debug

##建立odbc 源。例如:该odbc 源的名称为myodbc3

vi /home/oracle/.odbc.ini

[ODBC Data Sources]

#mysql = MySQL ODBC Driver 5.1

mysql = MySQL ODBC Driver 2.2.14

[mysql] ——->> mysql 为dsn

DRIVER = /usr/lib64/libmyodbc5.so 11g用的是libmyodbc5.so

DATABASE = dem

DESCRIPTION = MySQL ODBC 5.1.5 Connector

PORT = 3306

SERVER = 123.196.125.7

UID = dem

PWD = dem

#UID = root

#PWD = qcmysql

CHARSET = latin1

TRACEFILE = /tmp/odbc-demodsn.trc

TRACE = off

###CHARSET = gbk

确保linux的odbc已经与mysql数据库连通后,测试语句是:isql 例如:oracle@qc002 admin]$ isql -v mysql

+—————————————+

| Connected! |

| |

| sql-statement |

| help [tablename] |

| quit |

| |

+————————————–

5 .配置hs

$ORACLE_HOME/hs/admin/initmysql.ora mysql 为ORACLE_SID=mysql

建立initmysql.ora 文件,内容如下:

HS_FDS_CONNECT_INFO=mysql

HS_FDS_TRACE_LEVEL = debug 当为’debug’时,用于检查报错,在$ORACLE_HOME/hs/log/下; 成功后最好设置为off;

HS_FDS_TRACE_LEVEL=255

HS_FDS_SHAREABLE_NAME =”libodbc.so”

set LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/u01/app/oracle/product/11.1.0.6 指定lib库oracle要有访问权限;

HS_FDS_QUOTE_IDENTIFIER=”`” 告诉odbc忽略掉‘

HS_LANGUAGE=AMERICAN_AMERICA.WE8ISO8859P15

set DBCINI=/home/oracle/.odbc.ini

set ORACLE_HOME=/u01/app/oracle/product/11.1.0.6

set HOME=/home/oracle

6.在listener.ora添加

(SID_DESC =

(ORACLE_HOME = /u01/app/oracle/product/11.1.0.6)

(SID_NAME = mysql)

(PROGRAM = dg4odbc)

(ENVS = LD_LIBRARY_PATH=/usr/local/lib:/usr/lib64:/u01/app/oracle/product/11.1.0.6)

7. 添加/u01/app/oracle/product/11.1.0.6/network/admin/tnsname.ora

向tnsnames.ora 添加

mysql =

(DESCRIPTION =

(ADDRESS_LIST =

(ADDRESS = (PROTOCOL = TCP)(HOST = 123.196.125.7)(PORT = 1521))

)

(CONNECT_DATA =

(SID = mysql)

)

(HS = OK)

)

8.

CREATE USER ‘dem’@’123.196.125.7%’ IDENTIFIED BY ‘dem’; mysql判断用户是用户名加主机地址来校验的

create database dem character set latin1;

grant all privileges on dem.* to ‘dem’@’123.196.125.7’identified by ‘dem’ with grant option;

flush privileges;

create public database link mysql connect to “dem” identified by “dem” using ‘mysql’; 为tnsname.ora里的mysql

select “col3” from “dem”@mysql;

说明一下,我的这个问题,是由于oracle在database link中需要使用双引号作为字段和表名的标识,而在mysql中,却是不允许的(果然是个bug)。结果造成了查询时出问题。

不信,可以在mysql中是双引号括住字段或表名,看有没有出错信息。

root用户登录mysql,mysql>SET GLOBAL sql_mode = ‘REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE’;

或者

vi /etc/rc.d/init.d/mysqld

/usr/bin/mysqld_safe –sql-mode=”REAL_AS_FLOAT,PIPES_AS_CONCAT,ANSI_QUOTES,IGNORE_SPACE” –datadir=”datadir” –socket=”socketfile” \

或者,直接在oracle里,执行下面语句:

SQL>

DECLARE

ret integer;

c integer;

BEGIN

c := DBMS_HS_PASSTHROUGH.OPEN_CURSOR@mysql;

DBMS_HS_PASSTHROUGH.PARSE@mysql(c, ‘SET SESSION SQL_MODE=”ANSI_QUOTES”;’);

ret := DBMS_HS_PASSTHROUGH.EXECUTE_NON_QUERY@mysql(c);

dbms_output.put_line(ret ||’ passthrough output’);

DBMS_HS_PASSTHROUGH.CLOSE_CURSOR@mysql(c);

END;

/

均可解决此问题;

编程小号
上一篇 2025-02-27 07:27
下一篇 2025-02-15 11:46

相关推荐

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 举报,一经查实,本站将立刻删除。
如需转载请保留出处:https://bianchenghao.cn/hz/111837.html