Oracle通过DBLink连接MySQL

本文涉及的产品
RDS MySQL Serverless 基础系列,0.5-2RCU 50GB
云数据库 RDS MySQL,集群版 2核4GB 100GB
推荐场景:
搭建个人博客
云数据库 RDS MySQL,高可用版 2核4GB 50GB
简介: Oracle通过创建DBLink连接MySQL,查看修改MySQL表数据

一、概述

        linux环境下,Oracle数据库通过DBLink远程连接MySQL数据库。

二、环境信息

1、Oracle

    ①操作系统:Linux X86-64
    ②数据库版本:11.2.0.4.0
    ③字符集:SIMPLIFIED CHINESE_CHINA.AL32UTF8

2、MySQL

    ①操作系统:Linux i686
    ②数据库版本:5.7.21
    ③字符集:UTF8

三、配置UnixODBC

1、下载UnixODBC安装包

软件地址:ftp://ftp.unixodbc.org/pub/unixODBC/unixODBC-2.3.0.tar.gz

2、安装

①root用户执行

    cd /usr/local
    tar zxvf unixODBC-2.3.0.tar.gz

② 编译安装

    cd unixODBC-2.3.0/
    ./configure --prefix=/usr/local/unixODBC-2.3.0 --includedir=/usr/include --libdir=/usr/lib64 --bindir=/usr/bin --sysconfdir=/etc

    make
    make install

3、测试

执行命令:odbcinst -j,如果安装成功会显示:

[root@vbox66 local]# odbcinst -j
unixODBC 2.3.0
DRIVERS............: /etc/odbcinst.ini
SYSTEM DATA SOURCES: /etc/odbc.ini
FILE DATA SOURCES..: /etc/ODBCDataSources
USER DATA SOURCES..: /root/.odbc.ini
SQLULEN Size.......: 8
SQLLEN Size........: 8
SQLSETPOSIROW Size.: 8
[root@vbox66 local]# 

        unixODBC所需的头文件都被安装到了/usr/inlucde下,编译好的库文件安装到了/usr/lib64下,与unixODBC相关的可执行文件安装到了/usr/bin下,配置文件放到了/etc下。

四、配置odbc连接MyDQL

1、下载文件

https://cdn.mysql.com//Downloads/Connector-ODBC/5.1/mysql-connector-odbc-5.1.13-1.x86_64.rpm

2、rpm安装

rpm -ivh mysql-connector-odbc-5.1.13-1.x86_64.rpm

3、配置odbc.ini文件

vi /etc/odbc.ini
[testdb]
Description = mysql
Driver = MySQL ODBC 5.1 Driver
Server = 192.169.31.103            //MySQL服务器IP
Database = test                   //MySQL数据库名
Port = 3306                      //端口
USER = user_name                //数据库用户名
Password = passwd                //用户民密码
Socket =
Option = 3
Stmt =
CHARSET = UTF8                  //数据库字符集

4、测试odbc连接MySQL

运行命令: isql testdb -v //testdb为odbc.ini文件中中括号中的内容


[root@vbox66 lib64]# isql testdb -v
+---------------------------------------+
| Connected!                            |
|                                       |
| sql-statement                         |
| help [tablename]                      |
| quit                                  |
|                                       |
+---------------------------------------+
SQL> show databases;
+-----------------------------------------------------------------+
| Database                                                        |
+-----------------------------------------------------------------+
| information_schema                                              |
| aaa                                                             |
| jrjctest                                                        |
| mysql                                                           |
| otter                                                           |
| performance_schema                                              |
| sbtest                                                          |
| sys                                                             |
| test                                                            |
| test1                                                           |
| test_wr                                                         |
| wr                                                              |
| wr_test1                                                        |
| www                                                             |
+-----------------------------------------------------------------+
SQLRowCount returns 14
14 rows fetched

odbc连接MySQL成功!

五、配置Oracle通过DBLink访问MySQL

1、修改环境变量

su - oracle
vi .bash_profile
export ODBCINI=/etc/odbc.ini

2、配置Oracle监听

①cd $ORACLE_HOME/network/admin

vi listener.ora
添加如下信息:
SID_LIST_LISTENER=
  (SID_LIST=
      (SID_DESC=
         (SID_NAME=dg4odbc)
         (ORACLE_HOME=/u01/app/oracle/product/11.2.0/db_1)
         (PROGRAM=dg4odbc)
      )
  )

官方文档解释如下:
image

②修改tnsnames.ora

vi tnsnames.ora
添加如下信息:
dg4odbc =
  (DESCRIPTION=
    (ADDRESS = (PROTOCOL =tcp)(HOST = vbox66)(PORT = 1521))
    (CONNECT_DATA =
      (SID = dg4odbc))
      (HS=OK)
  )

官方文档解释如下:
image
image

③配置ODBC监听

cd $ORACLE_HOME/hs/admin
vi initdg4odbc.ora  //注意,这里init后面的内容要和之前配置 SID_NAME(dg4odbc)一致
HS_FDS_CONNECT_INFO=testdb
HS_FDS_TRACE_LEVEL = on
HS_FDS_SHAREABLE_NAME=/usr/lib64/libodbc.so
HS_FDS_SUPPORT_STATISTICS=FALSE
HS_LANGUAGE="simplified chinese_china.al32utf8"    //提供具有非oracle数据源的字符集、语言和区域信息的异构服务
HS_NLS_NCHAR=UCS2     //NVARCHAR/NCHAR和图形数据类型通常以Unicode格式存储数据。unicode字符集因数据库的不同而不同,设置此参数外部数据库保持一致

set ODBCINI=/etc/odbc.ini

④重启测试监听配置

oracle用户执行:

lsnrctl stop
lsnrctl start
alter system register;(数据库中执行)
lsnrctl status;

image

tnsping dg4odbc

image

显示以上信息则表示监听配置成功!

3、创建DBLink

①su - oracle

sqlplus / as sysdba
create public database link myodbc connect to "wangrui" identified by "wangrui" using 'dg4odbc'; --注意:wangrui和wangruit是MySQL用户名和密码,都需要使用双引号,dg4odbc使用单引号。

②select * from "a2"@myodbc1;

image

六、可能会遇到的问题

1、

SYS@vbox66in>select "id" from t1@myodbc1;
select "id" from t1@myodbc1
*
第 1 行出现错误:
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息:
[

原因:有一些内容显示不全,检查odbc监听文件,查看HS_LANGUAGE参数,配置为和数据库字符集一致

2、

SYS@vbox66in>select "id" from "t1"@myodbc1;
select "id" from "t1"@myodbc1
*
第 1 行出现错误:
ORA-28500: 连接 ORACLE 到非 Oracle 系统时返回此信息: ORA-28541:
HS 初始化文件的第 8 行发生错误。 ORA-02063:
紧接着 2 lines (起自 MYODBC1)

原因:NVARCHAR/NCHAR和图形数据类型通常以Unicode格式存储数据。unicode字符集因数据库的不同而不同,需要修改HS_NLS_NCHAR=UCS2
image

3、

SYS@vbox66in>select * from a2@myodbc1;
select * from a2@myodbc1
*
第 1 行出现错误:
ORA-00942: 表或视图不存在
[MySQL][ODBC 5.1 Driver][mysqld-5.7.21-log]Table 'test.A2' doesn't exist
{42S02,NativeErr = 1146}
ORA-02063: 紧接着 2 lines (起自 MYODBC1)

原因:MySQL数据中是区分大小写的,表需要用双引号引起来

相关实践学习
如何在云端创建MySQL数据库
开始实验后,系统会自动创建一台自建MySQL的 源数据库 ECS 实例和一台 目标数据库 RDS。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助     相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
相关文章
|
8天前
|
Oracle 关系型数据库 MySQL
Mysql和Oracle数据库死锁查看以及解决
【8月更文挑战第11天】本文介绍了解决MySQL与Oracle数据库死锁的方法。MySQL可通过`SHOW ENGINE INNODB STATUS`查看死锁详情,并自动回滚一个事务解除死锁;也可手动KILL事务。Oracle则通过查询V$LOCK与V$SESSION视图定位死锁,并用`ALTER SYSTEM KILL SESSION`命令终止相关会话。预防措施包括遵循ACID原则、优化索引及拆分大型事务。
|
11天前
|
SQL 关系型数据库 MySQL
Go语言中如何连接 MySQL,基础必备!
在现代应用中,数据库操作至关重要。本教程将指导你使用Go语言进行MySQL的CRUD操作。首先,确保已创建`test_db`数据库及`users`表。接着安装MySQL驱动:`go get -u github.com/go-sql-driver/mysql`。通过示例代码,你将学会连接数据库、创建、查询、更新及删除用户记录。尽管此方法直接,但在实际项目中可能略显繁琐,后续会介绍更高效的库如sqlx或gorm。现在,让我们从基础开始,掌握Go语言中的数据库交互技巧。
34 3
|
4天前
|
SQL 关系型数据库 MySQL
MySQL - 左连接、右连接、内连接、完全外连接、交叉连接 & 一对多、多对一、多对多 & 联合连接
介绍MySQL中不同类型的SQL连接操作,包括左连接、右连接、内连接、完全外连接、交叉连接,以及数据库关系中的一对多、多对一、多对多和联合连接的概念和使用场景。
10 0
|
4天前
|
关系型数据库 MySQL 数据库连接
UiPath 连接 Mysql 报错: 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
UiPath 连接 Mysql 报错: 在指定的 DSN 中,驱动程序和应用程序之间的体系结构不匹配
|
5天前
|
Oracle 关系型数据库
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
Navicat 连接Oracle ORA-28547: connection to server failed, probable Oracle Net admin error
12 0
|
5天前
|
关系型数据库 MySQL 网络安全
MySQL⭐二、使用Navicat连接到服务器上的MySQL
MySQL⭐二、使用Navicat连接到服务器上的MySQL
|
6天前
|
存储 关系型数据库 MySQL
MySQL——数据库备份上传到阿里云OSS存储
MySQL——数据库备份上传到阿里云OSS存储
20 0
|
9天前
|
SQL 存储 关系型数据库
"MySQL增列必锁表?揭秘InnoDB在线DDL,让你的数据库操作飞一般,性能无忧!"
【8月更文挑战第11天】在数据库领域,MySQL凭借其稳定高效的表现深受开发者喜爱。对于是否会在给数据表添加列时锁表的问题,MySQL的行为受版本、存储引擎等因素影响。从5.6版起,InnoDB支持在线DDL,可在改动表结构时保持表的可访问性,避免长时间锁表。而MyISAM等则需锁表完成操作。例如,在使用InnoDB的表上运行`ALTER TABLE users ADD COLUMN email VARCHAR(255);`时,通常不会完全锁表。虽然在线DDL提高了灵活性,但复杂操作或大表变更仍可能暂时影响性能。因此,进行结构变更前应评估其影响并择机执行。
31 6
|
6天前
|
缓存 NoSQL Redis
一天五道Java面试题----第九天(简述MySQL中索引类型对数据库的性能的影响--------->缓存雪崩、缓存穿透、缓存击穿)
这篇文章是关于Java面试中可能会遇到的五个问题,包括MySQL索引类型及其对数据库性能的影响、Redis的RDB和AOF持久化机制、Redis的过期键删除策略、Redis的单线程模型为何高效,以及缓存雪崩、缓存穿透和缓存击穿的概念及其解决方案。
|
9天前
|
固态存储 关系型数据库 MySQL
"惊!20亿数据秒速入MySQL,揭秘数据库极速插入的黑科技,你不可不知的绝密技巧!"
【8月更文挑战第11天】面对20亿级数据量,高效插入MySQL成为挑战。本文探讨优化策略:合理设计数据库减少不必要的字段和索引;使用批量插入减少网络往返;优化硬件如SSD和内存及调整MySQL配置;并行处理加速插入;附Python示例代码实现分批导入。这些方法将有效提升大规模数据处理能力。
25 2

推荐镜像

更多