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

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

大家好,又见面了,我是你们的朋友全栈君。如果您正在找激活码,请点击查看最新教程,关注关注公众号 “全栈程序员社区” 获取激活教程,可能之前旧版本教程已经失效.最新Idea2022.1教程亲测有效,一键激活。

Jetbrains全系列IDE使用 1年只要46元 售后保障 童叟无欺

原理:

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]          ——-&gt> 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;

/

均可解决此问题;

版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请联系我们举报,一经查实,本站将立刻删除。

发布者:全栈程序员-站长,转载请注明出处:https://javaforall.net/193944.html原文链接:https://javaforall.net

(0)
全栈程序员-站长的头像全栈程序员-站长


相关推荐

  • Ice笔记–Ice的服务器实现技术[通俗易懂]

    Ice笔记–Ice的服务器实现技术[通俗易懂]服务器实现技术 1.      渐进的初始化如果我们使用servant定位器,locate返回的servant只能用于当前请求,也就是说Iceruntime不会把这个servant增加到ActiveServantMap中。一种常用的实现技术是,在loca

    2022年6月5日
    29
  • MySQL + PostgreSQL批量插入更新insertOrUpdate[通俗易懂]

    MySQL + PostgreSQL批量插入更新insertOrUpdate[通俗易懂]????周周有福利,周周有惊喜哪吒社区-风火轮计划????Java学习路线配套文章:Java学习路线总结,搬砖工逆袭Java架构师(全网最强)????Java经典面试题大全:10万字208道Java经典面试题总结(附答案)????简介:Java领域优质创作者????、CSDN哪吒公众号作者✌、Java架构师奋斗者????????扫描主页左侧二维码,加入群聊,一起学习、一起进步????欢迎点赞????收藏⭐留言????这里写目录标题一、百度百科1、MySQL2、Pos

    2022年7月27日
    4
  • mmc卡和sd卡区别「建议收藏」

    mmc卡和sd卡区别「建议收藏」转载:https://zhidao.baidu.com/question/296690750.html区别:1、尺寸不同:SD卡的技术是基于MultiMedia卡(MMC)格式上发展而来,大小和MMC卡差不多,尺寸为32mmx24mmx2.1mm。长宽和MMC卡一样,只是比MMC卡厚了0.7mm,以容纳更大容量的存贮单元。2、兼容性不同:SD卡与MMC卡保持着向上兼容,…

    2022年6月11日
    37
  • java专业是什么专业,写的太详细了「建议收藏」

    java专业是什么专业,写的太详细了「建议收藏」前言SQL语句执行慢的原因是面试中经常会被问到的,对于服务端开发来说也是必须要关注的问题。在生产环境中,SQL执行慢是很严重的事件。那么如何定位慢SQL、慢的原因及如何防患于未然。接下来带着这些问题让我们开启本期之旅!第1章:Dubbo的简史、后续的规划和整体架构大图————Dubbo高性能RPC通信框架1.1应用架构演进过程1.2Dubbo简介1.3Dubbo总体大图第2章:Dubbo的环境配置和基于Dubbo开发第一款应用程序————开发第一款Dubbo应用程序

    2022年7月7日
    25
  • jQuery可拖拽3D万花筒旋转特效

    这是一个使用了CSS3立体效果的强大特效,本特效使用jQuery跟CSS3transform来实现在用户鼠标按下拖动时,环形图片墙可以跟随鼠标进行3D旋转动画。效果体验:http://hovertr

    2021年12月28日
    37
  • 2020阿里笔试编程题[通俗易懂]

    2020阿里笔试编程题[通俗易懂]选择题很难做,阿里的秋招貌似非常难,大部分岗位都留给了实习生,但是两道编程题不怎么难。第一题有一个n*n的地图,一只兔子想要穿过这个地图,给出的地图是一个二维数组map[i][j],数值表示该位置的毒雾持续时间,当兔子在(x,y)位置时,它可以跳到(x+2,y)或者(x,y+2)位置,跳的时候需要对应等待map[x+1][y]或者map[x][y+1]的时间,兔子开始跳的位置从map[1][1…

    2022年5月23日
    31

发表回复

您的邮箱地址不会被公开。 必填项已用 * 标注

关注全栈程序员社区公众号