Windows環境下,本地Oracle創建dblink連接遠程mysql

来源:http://www.cnblogs.com/achigwwblog/archive/2017/11/19/7859502.html
-Advertisement-
Play Games

前言 我的情況是,本地安裝了oracle(安裝完成後帶有SQL Developer,不需要再安裝instantclient),創建dblink去連接遠程的mysql。有些朋友可能是 本地使用PL\SQL(需安裝instantclient)去連接 遠程oracle,連接成功後創建並使用dblink去連 ...


前言

我的情況是,本地安裝了oracle(安裝完成後帶有SQL Developer,不需要再安裝instantclient),創建dblink去連接遠程的mysql。有些朋友可能是 本地使用PL\SQL(需安裝instantclient)去連接 遠程oracle,連接成功後創建並使用dblink去連接遠程mysql,這時候要註意的是在遠程的oracle環境中配置對應的mysql-odbc。如果還是無法實現,可以看看我在文章里對於這個過程的理解,再對照自己的情況,逐步排查問題,希望對你有幫助。

實現參考:Oracle連接odbc數據源 http://www.cnblogs.com/mellowsmile/p/5218882.html

oracle 不同安裝包的區別(結合網上答案,自己整合琢磨的,如有錯誤,請大佬指出):

 

 

個人的Oracle安裝情況

oracle安裝參考教程:https://www.cnblogs.com/hoobey/p/6010804.html

我安裝的是32位的Oracle Database 11g R2(之所以選擇32位,是因為成功的案例都是用32位的,具體選擇的依據我沒查出來,有知道的大佬請不吝賜教,謝謝~),具體路徑見下截圖

oracle_home D:\guowenwen\product\11.2.0\dbhome_1,錯誤信息查找是在D:\guowenwen\product\11.2.0\dbhome_1\hs\trace目錄下

 

個人的安裝記錄

1、安裝32位mysql odbc驅動

下載路徑:https://dev.mysql.com/downloads/connector/odbc/

我是選擇尾碼為.msi的包進行安裝的,如果選擇zip文件那就不用再安裝了。安裝mysql odbc註意選擇32位/64位,選擇的依據不是根據你的操作系統的位數,而是根據軟體(Oracle版本)的位數,我安裝的oracle位數是32位,所以這裡選擇安裝32位的mysql odbc。如果你不知道怎麼選擇,那就64位和32位的mysql odbc都安裝了,你可以在C:\Program Files (x86)\Mysql中查看到32位的odbc,在C:\Program Files\MySQL中查看到64位的odbc(這邊查看的odbc的路徑或有不同,在這裡,我給出我的安裝路徑,目的是為了指出在C:\Program Files (x86)中安裝的是32位的程式,在C:\Program Files安裝的是64位的程式,我之前一直沒有搞清楚)

2、新建32位系統DSN(unicode driver)並需要測試成功

這裡需要清楚,安裝了32位的odbc那就需要新建32位的系統DSN。

   1】在控制面板=》管理工具=》數據源(ODBC)=》新建系統DSN(unicode driver) 是64位的

   2】在C:\Windows\SysWOW64\odbcad32.exe路徑下 新建的系統DSN  是32位的

註意這裡的Data Source Name,我這裡設置的是TESTMYSQL,在接下來的配置中會用到這個名稱。在TCP/IP中輸入你要遠程連接的mysql資料庫的IP地址,要點擊Test按鈕進行測試,測試成功方可

       

3、在D:\guowenwen\product\11.2.0\dbhome_1\NETWORK\ADMIN目錄的listener.ora 文件中添加紅色的信息(如果該目錄下沒有listener.ora文件,那就自己新建一個,下麵是我所有的配置內容)

 

#ORACLE_HOME按需替換
SID_LIST_LISTENER = (SID_LIST = (SID_DESC= (SID_NAME=TESTMYSQL) #這裡SID_NAME一定要和第二步建立的odbc名字一致 (ORACLE_HOME=D:/guowenwen/product/11.2.0/dbhome_1) (PROGRAM=dg4odbc) #一定要寫dg4odbc ) (SID_DESC= (SID_NAME=dg4odbc) (ORACLE_HOME=D:\guowenwen\product\11.2.0\dbhome_1) (PROGRAM=dg4odbc) )
#就我本人來說,這個目錄下是沒有listener.ora文件的,此時我可以用SQL Developer連接上本地oracle資料庫,但是我自己配置了listener.ora文件後,就無法連接本地oracle了 #解決方案就是添加以下的代碼塊,再重啟監聽就可以了
(SID_DESC = (GLOBAL_DBNAME = ORCL) (ORACLE_HOME = D:\guowenwen\product\11.2.0\dbhome_1) (SID_NAME = ORCL) ) ) LISTENER = (DESCRIPTION_LIST = (DESCRIPTION = (ADDRESS = (PROTOCOL = IPC)(KEY = PNPKEY)) (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ) )

4、在D:\guowenwen\product\11.2.0\dbhome_1\NETWORK\ADMIN目錄的tnsnames.ora文件中添加紅色的信息(如果該目錄下沒有tnsnames.ora文件,那就自己新建一個,下麵是我所有的配置內容)

 

#這裡的內容和listener.ora是對應的
LISTENER_ORCL = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) ORCL = (DESCRIPTION = (ADDRESS = (PROTOCOL = TCP)(HOST = localhost)(PORT = 1521)) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = ORCL) ) ) TESTMYSQL = (DESCRIPTION= (ADDRESS=(PROTOCOL=TCP)(HOST=localhost)(PORT=1521)) #ORACLE伺服器的IP,我是在本地oracle上創建dblink,所以HOST填localhost (CONNECT_DATA= (SID=TESTMYSQL)) #這裡的SID和第二步的odbc名字一致 (HS=OK) #一定要加 ) dg4odbc = (DESCRIPTION= (ADDRESS=(PROTOCOL=tcp)(HOST=localhost)(PORT=1521)) (CONNECT_DATA=(SID=dg4odbc)) (HS=OK) )

 

 5、在D:\guowenwen\product\11.2.0\dbhome_1\hs\admin目錄下創建initXXX.ora文件,XXX的名字要與第二步odbc的名字一致,本例中創建 initTESTMYSQL.ora文件,添加以下代碼

HS_FDS_CONNECT_INFO = TESTMYSQL #註意這裡的名字
HS_FDS_TRACE_LEVEL = debug #調試狀態,如果連接出錯,在路徑D:\guowenwen\product\11.2.0\dbhome_1\hs\trace下可以看到錯誤信息

 

 6、重啟監聽

兩個選擇,一是圖形化界面操作,二是打開cmd操作,這裡選擇第二種

 右鍵單擊cmd,以管理員身份運行(不然可能會提示:TNS-01190: The user is not authorized to execute the requested listener command),輸入以下命令(都需要執行成功,有錯誤自己找一下解決方案)

C:\Users\guowenwen>lsnrctl stop
C:\Users\guowenwen>lsnrctl start
C:\Users\guowenwen>tnsping MYSQL_LOCAL

 

7、打開SQL Developer,創建DBLINK

如果使用dblink出錯,查看Oracle_HOME\hs\trace的報錯信息,如果出現類似內容Access denied for users 'mysql用戶名'@‘mysql的ip地址’,原因可能是創建dblink時用戶名和密碼沒加“ ”

create database link MYSQL_LOCAL connect to "mysql用戶" identified by “mysql用戶密碼” using 'MYSQL_LOCAL'; //using後面的名字應該與第二步odbc名字一致

 

8、使用DBLINK

select * from "表名"@MYSQL_LOCAL;

 

個人的原理解析

參考:oracle HS 深入解析 及協同Gateway工作流程 http://www.cnblogs.com/wwwiori/archive/2009/06/22/1508068.html

要點(個人的理解,沒有深入研究,如果有錯誤請大佬們不吝賜教):oracle——dg4odbc——odbc——mysql

在本地oracle上使用dblink時(步驟7,8),oracle會連接到HS,HS會去對應目錄下查找設置的Agent Componet Code(步驟5),因為我是直接安裝了Oracle database(預設安裝ODBC Agent),對應的Agent Componet Code是dg4odbcc.exe(對應的步驟3,4,這也是步驟4中設置PROGRAM=dg4odbc的原因),Agent Componet Code接下來去查找Driver(需要連接的資料庫的驅動,即步驟1步驟的操作),連接到Driver後,Driver去連接DB(即步驟2,其意義是讓Driver知道怎麼連接對應的DB),遠程DB接收到來自本地Oracle的命令,執行並一步步返回。

 總結

實現需求的過程中,搜索問題的解決方案時我發現有些文章說需要用到Database Gateways(舉的例子是sqlserver),當時也不知道連接mysql不成功是不是因為沒安裝Gateways的原因(雖然現在知道對於連接mysql來說並不需要),就去找Gateways的知識。但問題是,我找gateways的下載路徑就找了很久,更別說其他,現在貼出相關的鏈接,給有需要的朋友一點參考,減少搜索時間。

gateway下載地址參考:http://www.cnblogs.com/tuyile006/p/4142395.html

oracle database gateway for odbc 介紹:https://docs.oracle.com/database/122/ODBCU/database-gateway-for-odbc-introduction.htm#ODBCU100

 

最後,還是這句話,如果在閱讀的過程中發現了任何問題,還請各位大佬們不吝賜教,感謝~~


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • 每次寫代碼總會忘記一些東西,又要重新Goooooooooogle,好煩吶~ ...
  • 本文介紹了Android 7系統原生支持的多視窗分屏顯示及VR系統的兩種分屏顯示模式。 ...
  • protobuf 交叉編譯筆記 目標是使用 android ndk 的工具鏈編譯出 android armeabi v7a 可用的 protobuf 庫。 交叉編譯環境配置 windows 平臺 1. 下載 "NDK x86_64" 或者 "NDK x86" 並解壓縮 2. 下載 "protobuf ...
  • 概述 最近因為業務的需求寫了一段時間存儲過程,發現之前寫的存儲過程存在一些不嚴謹的地方,特別是TRY...CATCH中嵌套事務的寫法;雖然之前寫的並沒有錯,但是還是埋藏著很大的隱患在裡面。希望這篇文章能給大家一些參考;文章內容有點長還望耐心閱讀。 1.插入測試數據 創建表 DROP TABLE sc ...
  • [20171120]11g select for update skip locked.txt--//11G在select for update遇到阻塞時可以通過skipped locked跳過阻塞的記錄,測試看看:1.環境:SCOTT@book> @ &r/ver1PORT_STRING VERS ...
  • 有序集SortedSet算是redis中一個很有特色的數據結構,通過這篇文章來總結一下這塊知識點。 原文地址:http://www.jianshu.com/p/75ca5a359f9f 一、有序集SortedSet命令簡介 redis中的有序集,允許用戶使用指定值對放進去的元素進行排序,並且基於該已 ...
  • 一.環境的搭建 1.安裝配置mysql rpm –ivh MySQL-server-5.6.14.rpm rpm –ivh MySQL-client-5.6.14.rpm 啟動mysql 創建hive用戶 grant all on *.* to hadoop@’%’ identified by ‘h ...
  • 語法規則: SELECT * FROM tableName t WHERE 1 = 1 AND 2 = 2 AND EXISTS (SELECT * FROM tableName t2 WHERE t.id = t2.proj_id) SELECT * FROM tableName t WHERE ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...