1. 程式人生 > >oracle與mysql連線原理整理筆記

oracle與mysql連線原理整理筆記

oracle和mysql連線方式對比

一、oracle的客戶端連線方式:
oracle net 用於客戶端和伺服器之間的會話連線,並負責維護該會話
net在客戶端是一個後臺應用程序,在伺服器端則包含監聽器的活動程序
(這也就是為什麼客戶端需要安裝基礎的oracle元件,其實是在連線時後臺跑了一個程序)
oracle net 同時也支援異構資料庫的連線,如連線到db2,sqlserver等
二、oracle net實現機制
使用者發出連線與使用者程序進行互動 ----》使用者程序通過oracle net與伺服器程序進行互動----》伺服器程序與例項進行互動(由net進行維護)----》例項通過與後臺程序進行互動實現資料庫讀寫

三、oracle net實現所需要的配置需求:
1. 網路配置(網必須通)
2. 節點所在的位置 (IP和hostname的解析)
3. 應用程式(起碼有個oracle環境)
4. 所使用的協議(TCP/IP等協議)

四、oracle net支援的連線型別:
1.客戶端-伺服器模式(sqlplus)
2.Java應用程式(JDBC)
3.Web客戶端應用程式(weblogic?)
4.Http直接連線到oracle伺服器 OEM

五、net連線方式
本地客戶端連線的資料庫(client和server在同一臺機器)也要使用net來進行資料庫連線,但是中間不通過listener,中間通過IPC協議,該協議允許同一主機內的程序間進行互相通訊
非本地客戶端連線,是在伺服器端啟用listener程序,客戶端通過tnsname,LDAP或easy connect解析字串,正確後進行連線,一旦連線成功,listener服務停止,也不會影響該會話

easy connect (TCP協議)不支援failover source routing load balance
sql>conn username/
[email protected]
:port/service_name

本地名稱解析(tnsnames.ora)
支援oracle net所支援的所有協議,支援failover,source routing,load banlance

tnsnames.ora和listener.ora檔案中的server_name要互相對應
當客戶端發出連線請求時,監聽器首先使用客戶端連線描述符中的SERVICE_NAME相匹配。
如果客戶端連線描述符中使用的是SID,則不再嘗試匹配該值,而是對監聽器中設定的SID_NAME進行匹配

當客戶端使用的是SID連線引數,則匹配偵聽器配置檔案中的SID_NAME項    (主要用於相容以前的老版本,8i或更早版本)
否則當使用的是SERVICE_NAME,則匹配偵聽器配置檔案中的SERVICE_NAME項 (現在多用SERVICE_NAME項)

與mysql使用者驗證方式的對比:
1. oracle使用者程序和伺服器程序進行連線(中已經有包含使用者名稱密碼等系資訊),server端根據不同的認證方式進行認證,然後分配pga,sga等記憶體空間
oracle使用者有兩種認證方式:
• 作業系統認證(要求該使用者屬於本地DBA組,然後通過作業系統認證登入oracle,從而啟動資料庫)
• 密碼檔案認證
oracle使用哪種認證方式決定在於兩個引數:
1.remote_login_passwordfile=none|exclusive|shared
• none:不使用密碼檔案認證。如果選擇了這個值,就相當於遮蔽了密碼檔案的內容了。
• exclusive:要密碼檔案認證,自己獨佔使用(預設值)
• shared:要密碼檔案認證,不同例項dba使用者可以共享密碼檔案

2.位於$ORACLE_HOME/network/admin/sqlnet.ora
SQLNET.AUTHENTICATION_SERVICES=none|all|nts• none:關閉作業系統認證,只能密碼認證
• all:用於linux/unix平臺,關閉本機密碼檔案認證,採用作業系統認證
• nts:用於windows平臺


2.mysql首先沒有oracle net,監聽器的概念,原理就是基於tcp等網路協議,
當客戶端發起一個連線請求時,首先會根據tcp的三次握手方式與伺服器端建立連線,(此階段只是發了一個握手的小包用於連線),然後客戶端再向伺服器端傳送使用者名稱密碼等資訊進行驗證,伺服器收到驗證之後會進行驗證並回復客戶端(驗證部分是基於mysql底層實現,中間的通訊就是基於tcp協議實現)
處於等待使用者發驗證資訊的過程中 在mysql中 show processlist時 會看到
unauthenticted user
連線超時引數connect_timeout
,如果使用者傳送驗證資訊超時則斷開連線

3.mysql經常會遇到sock檔案的問題
sock檔案在mysqld程序啟動時會自動建立,在redhat6時 伺服器掉電會導致mysql程序不能正常關閉,導致在重啟服務的時候會報已經存在mysql.sock,不能啟動的bug ,該bug需要升級mysql-server包好像就可以解決

mysql -h127.0.0.1 –P3306 –uxxx –pxxx [TCP通訊方式] 通過網路
mysql-uxxx –pxxx –S/usr/mysql/mysql.sock [unix socket通訊方式] sock也可以不寫,這個是在本機上連線資料庫時可以通過sock檔案進行訪問,基於sock允許同機器上的程序進行通訊的協議,這個其實就是localhost的主機名建立連線,如果sock檔案被刪了,則本地只能通過127.0.0.1 TCP進行連線






相關推薦

oraclemysql連線原理整理筆記

oracle和mysql連線方式對比一、oracle的客戶端連線方式:oracle net 用於客戶端和伺服器之間的會話連線,並負責維護該會話 net在客戶端是一個後臺應用程序,在伺服器端則包含監聽器的活動程序 (這也就是為什麼客戶端需要安裝基礎的oracl

Oraclemysql的欄位型別整理

Oralce的欄位型別整理如下: Mysql的欄位型別整理如下: 最後面一欄是對應JAVA的基本型別。希望對初學者有用,初學者在學習JAVA的時候,不知道怎麼把JAVA的物件指向到ORALCE或者MYSQL的欄位中,通過這個表格 可以很清楚的瞭解到,物件對映成資

Oracle Mysql 多表連線對比

oracle:   select a.aid aid , b.bid bid ,c.cid cid , d.did did , e.eid eid   fromtablea a ,   tableb 

一起學微軟Power BI系列-使用技巧(1)連線OracleMysql資料庫

  說起Oracle資料庫,以前沒用過Oracle不知道,但是這1年用Oracle後,發現真的是想狂吐槽,特別是那個.NET驅動和連結字串,特別奇葩。總歸是和其他資料庫不一樣,標新立異,不知道為何。另外如果想去Oracle官網搞點東西,比啥都難,密碼設定強度要求很高,經常記不住,每次都是重置密碼再進去,總

OracleMysql的字元連線函式concat||

1、Oracle版本: 1.1、執行語句:SELECT 'k' as a1,'a' as a2 ,'y' as a3 FROM sr_main ----------------------------------------------------------------

JDBC連線OracleMySQL的URL格式

Oracle: import java.sql.*; public class JDBC { public static void main(String[] args) throws ClassN

C++重載運算類型轉換 整理筆記

img 運算 log logs alt 分享 jpg 技術 筆記 C++重載運算與類型轉換 整理筆記

oraclemysqlsqlserver的分頁

興趣 href 查詢 lac 博文 簡單的 數據庫 分頁查詢 agen  假設當前是第PageNo頁,每頁有PageSize條記錄,現在分別用Mysql、Oracle和SQL Server分頁查詢student表。 1、Mysql的分頁查詢:  1 SELECT 2

oraclemysql的區別

一個 trace isa 支持 正常 靈活性 sqlt 級別 session 一、並發性 並發性是oltp數據庫最重要的特性,但並發涉及到資源的獲取、共享與鎖定。 mysql: mysql以表級鎖為主,對資源鎖定的粒度很大,如果一個session對一個表加鎖時間過長

mybatis foreach批量插入數據:OracleMySQL區別

pos blog acl logs name 代碼 each mys ... mybatis foreach批量插入數據:Oracle與MySQL不同點: 主要不同點在於foreach標簽內separator屬性的設置問題: separator設置為",&qu

Oracle刪除表中資料的時候應該注意的問題 OracleMySql他們一些表之間的區別

1. 刪除表的注意事項 在刪除一個表中的全部資料時,須使用TRUNCATE TABLE 表名;因為用DROP TABLE,DELETE * FROM 表名時,TABLESPACE表空間該表的佔用空間並未釋放,反覆幾次DROP,DELETE操作後,該TABLESPACE上百兆的空間就被耗光了。

OracleMySQL的SQL語句區別

1.表   1.1建立表(同)     create table tableName(       cloumnName1 int,       cloumnName2 int     )   1.2刪除表(異)        MySQL:       drop table 

OracleMysql建立儲存過程

<1>Oracle如下: create or replace procedure aa //建立無參儲存過程 is begin for i in 1…100000 loop //定義迴圈 insert into jz(jz_object_id,cid,customer_id,co

JavaMySQL連線的工具類JDBCUTils

幾種JDBCUtils 第一種 public class JDBCUtils { public static String driver; public static String url; public static String user;

MySQL儲存過程中的3種迴圈,儲存過程的基本語法,ORACLEMYSQL的儲存過程/函式的使用區別,退出儲存過程方法

  學無止境 部落格園   首頁   新隨筆   聯絡   訂閱  管理 隨筆-1968  評論-103  文章-4&

oracle mysql批量插入的 sql 總結

mysql 方案一:帶列名 INSERT INTO example (example_id, name, value, other_value) VALUES (100, 'Name 1', 'Value 1', 'Other 1'), (101,

MySQL高版本的情況下,建立MySQL連線的時候提示需要進行SSL加密

警告信心如下: Fri Nov 16 19:19:23 CST 2018 WARN: Establishing SSL connection without server's identity verification is not recommended. Accordi

資料庫遷移之-Oracle MySQL互相轉換

       理論上來說, MySQL 已經被Oracle 收購, 這兩者之間的Migrate 應該比較容易, 但實際的遷移還是有一些問題, 以下就說一說一些實現的方式和問題。 方式一:手動方式匯入匯出 手動的方式匯入, 就是操作步驟會比較繁瑣一些。  對Table 的

OracleMysql等資料庫通用SQL優化技巧

a. 資料表的處理順序 oracle 在解析一個查詢語句FROM後面的一系列資料表是按照從右往左的順序進行的.也就是說最後的資料表將是最先被oracle處理的,所以我們在寫多個表關聯的查詢語句時,把資料量最小的表或者是經過條件篩選後得到資料量最小的表放到最後,資料量大的表就放在最前面. select col1

oraclemysql分頁

1、mysql分頁採用limit分頁 select * from test limit start,size; 查詢test表中從第start行開始,查詢size數量行的資料,注意表的下標是從0開始的,即如果要查表最開始的前10行,分頁語句應該這麼寫: select * from tes