【DB寶44】Oracle rac集羣中的IP類型簡介

[toc]

Oracle rac集羣中的IP類型簡介

在Oracle RAC中,Public IP、Private IP、Virtual IP、SCAN IP、GNS VIP及HAIP的作用分別是什麼?

從Oracle 11g開始,安裝RAC至少需要7個IP地址,兩塊網卡(一塊公網網卡,一塊私網網卡),其中public、vip和scan都在同一個網段,使用的是公網網卡,private在另一個網段,使用的是私網網卡。主機名不能包含下橫線,如:RAC_01是不允許的。通過執行ifconfig -a檢查兩個節點的網絡設備名稱是否一致。另外,在配置了/etc/hosts文件後,在安裝RAC之前,公網、私網共4個IP可以ping通,其它3個IP不能ping通才是正常的。

從Oracle 18c開始,scan建議至少爲3個。

在安裝RAC時,其IP地址的規劃類似於下表所示:

其在/etc/hosts文件中的配置如下所示:

[root@raclhr-19c-n1 ~]# more /etc/hosts
127.0.0.1   localhost localhost.localdomain localhost4 localhost4.localdomain4
::1         localhost localhost.localdomain localhost6 localhost6.localdomain6

#Public IP
192.168.59.52            raclhr-19c-n1
192.168.59.53            raclhr-19c-n2

#Private IP
192.168.2.52             raclhr-19c-n1-priv
192.168.2.53             raclhr-19c-n2-priv

#Virtual IP
192.168.59.54            raclhr-19c-n1-vip
192.168.59.55            raclhr-19c-n2-vip

#Scan IP
192.168.59.56            raclhr-19c-scan
192.168.59.57            raclhr-19c-scan
192.168.59.58            raclhr-19c-scan

下面分別介紹一下RAC環境中的幾種IP及其作用。

(一)Public IP

Public IP稱爲公網IP,它是網卡上的真實IP。每個節點在安裝Oracle軟件之前都需要事先配置Public IP。Oracle通過Public IP對外提供網絡服務。如果RAC中Public IP所在的網卡設備故障,那麼該節點將無法繼續對外提供服務,所以,建議通過開啓操作系統層面的多網卡綁定技術來實現IP Failover。如果是雙節點RAC環境,那麼需要在tnsnames.ora文件中寫入對應兩個節點的Public IP、端口號以及通信協議。如果沒有開啓負載均衡功能(軟/硬件),那麼當tnsnames.ora文件中第一個ADDRESS對應的主機故障或關機,那麼在客戶端連接時,Oracle會等待一個網絡超時,然後繼續連接第二個ADDRSS對應的數據庫實例。即使RAC一個節點依然可以對外提供服務,用戶每次連接都需要等待幾秒鐘。網絡超時會讓用戶體驗相當不好。所以,在Oracle 10g RAC中VIP(Virtual IP)的出現完美地解決了這個問題。

需要注意的是,這裏的Public IP不是雲平臺上的彈性公網IP(Elastic IP,簡稱EIP),在雲平臺上,EIP提供獨立的公網IP資源,包括公網IP地址與公網出口帶寬服務。可以與彈性雲服務器、裸金屬服務器、虛擬IP、彈性負載均衡、NAT網關等資源靈活地綁定及解綁。一個彈性公網IP只能綁定一個雲資源使用。

使用EIP就可以連接到公共的網絡資源,該IP是對外開放的IP,是屬於收費的內容。

(二)Private IP

對於Oracle集羣來說,私網通信是非常重要的,因爲節點和節點之間的通信絕大部分都是要通過私網來實現的。私網通信基本上可以分爲兩種:第一種是集羣層面之間的通信;第二種是數據庫實例之間的通信。第一種通信(例如:節點間的網絡心跳)的主要特點是持續存在、實時性要求高,但是數據量比較小,所以通過TCP/IP協議傳遞就可以了。第二種通信是緩存融合(Cache Fusion)造成的實例之間的數據傳輸,其特點是數據量很大,而且速度要求非常高,TCP/IP協議此時已經不能滿足要求了,所以需要使用UDP或者RDS,同時Oracle也一直建議用戶對集羣的私網進行高可用性和負載均衡的配置。

與Public IP一樣,Private IP稱爲私網IP或心跳IP,它也是網卡上的真實IP,每個節點在安裝Oracle集羣軟件之前都需要事先配置Private IP。Private IP用於集羣間多節點心跳同步和Cache Fusion等任務,在Oracle 12c中還需要擔任Flex ASM的任務。當然,如果不設置Private IP而是由Public IP也可以去完成這些任務。但是,這樣做只會使Public IP所在網卡負載過大,一旦網卡設備發生故障,集羣將會分裂踢出掉一部分節點保證一致性,使RAC性能不穩定。從Oracle 11g開始,都需要配置Private IP。

對於Oracle 10g和11gR1版本的集羣,Oracle並不提供私網的高可用性和負載均衡特性,而是建議用戶在操作系統層面配置(例如Linux bonding、AIX etherchannel等),從而開啓操作系統層面的多網卡綁定技術實現IP Failover。從Oracle 11.2.0.2版本開始推出的HAIP技術提供了私網的高可用性和負載均衡特性,從而替代了操作系統層面的網卡綁定技術,功能更強大更兼容,但是HAIP的bug較多,在雲平臺上安裝rac,一般會禁用掉HAIP。

(三)Virtual IP(VIP)

VIP是Oracle 10g RAC的新特性,稱爲虛擬IP。VIP是在Public IP所在的網卡上由Oracle集羣軟件虛擬出來的一個IP,需要和Public IP設置在同一個子網網段中。Oracle集羣軟件安裝之前只需定義好(/etc/hosts文件)即可,而無需事先配置。在正常情況下,VIP和Public IP的功能是一模一樣的。後臺進程PMON對每個節點的VIP所在的監聽器註冊實例信息,本地監聽器中會看到兩個地址host,一個是Public IP,一個是VIP。當節點故障時,Oracle集羣軟件會把VIP自動飄逸到其它節點上,但是本地監聽器卻沒有飄逸到其它節點上。客戶端tnsnames.ora文件中host選項不再需要配置Public IP而選擇配置VIP,這樣做的好處是在雙節點RAC架構中當第一個節點故障時,第二個節點會有兩個VIP,客戶端連接第一個VIP失敗後會立即連接第二個VIP對應的實例,整個切換過程是非常短暫的,用戶完全感受不到RAC架構中有節點故障。整個連接過程可以說對用戶是透明瞭。但是並非真正意義上的透明,用戶還是可以知道整個RAC架構是由多少個節點組成,所以,Oracle 11g RAC中推出了SCAN IP的新概念,可以實現對用戶連接的透明性,用戶不再需要知道整個RAC架構中是由多少個節點組成的。

VIP的特點:

(1)VIP是通過VIPCA腳本創建的。

(2)VIP作爲Nodeapps類型的CRS Resource註冊到OCR中,並由CRS維護狀態。

(3)VIP會綁定到節點的Public網卡上,故Public網卡有兩個地址。

(4)當某個節點發生故障時,CRS會把故障節點的VIP轉移到其它節點上。

(5)每個節點的LISTENER會同時監聽Public網卡上的Public IP和VIP。

(6)客戶端的tnsnames.ora一般會配置指向節點的VIP。

可以使用如下命令讓節點1的VIP強制漂移到節點2上去:

crsctl relocate resource ora.raclhr-11gr2-n1.vip -n raclhr-11gR2-N2 -f

以下命令針對Oracle 11g版本之前:

crs_relocate ora.lhr-11gr2-rac1.vip -c lhr-11gR2-rac2 -f

(四)SCAN IP

從Oracle 11gR2 RAC開始引入SCAN(Single Client Access Name,集羣的單客戶端訪問名稱)IP的概念,相當於在客戶端和數據庫之間增加一層虛擬的網絡服務層,即是SCAN IP和SCAP IP LISTENER。在客戶端的tnsnames.ora配置文件中,只需要配置SCAN IP,然後用戶即可訪問數據庫,並且實現了負載均衡的功能。客戶端通過SCAN IP、SCAN IP LISTENER來負載均衡地連接到RAC數據庫。同之前各版本的RAC相比,使用SCAN IP的好處就是,當後臺RAC數據庫添加、刪除節點時,客戶端配置信息無需修改。SCAN提供一個域名來訪問RAC,域名可以解析1個到3個(注意,最多3個)SCAN IP,可以通過DNS、GNS或/etc/hosts文件來解析實現。需要注意的是,SCAN IP、VIP和Public IP必須屬於同一子網。

SCAN監聽器可以監聽到集羣中運行的所有數據庫,它是實現SCAN負載均衡的原理所在。SCAN監聽器跟着SCAN VIP隨機分配到節點服務器上,如果某個節點發生故障,那麼運行在此節點上的SCAN VIP會進行漂移,這時候SCAN監聽器也跟着漂移到正常的節點上,繼續爲SCAN VIP監聽連接請求。當PMON進程下次動態更新實例信息到該SCAN監聽器之後,它又重新接收客戶端的連接。這和VIP產生漂移的時候是有所區別的。

要使用SCAN IP來連接rac數據庫,並且實現負載均衡的功能,那麼需要在數據庫中配置參數remote_listener:

alter system set remote_listener='raclhr-19c-scan:1521' sid='*';

其中,raclhr-19c-scan是集羣的scan名稱。

通過設置這個參數,任何數據庫實例都會向SCAN監聽器註冊,主要用於註冊遠程數據庫實例,所以SCAN監聽器能夠負載均衡地分發連接請求到節點本地監聽器上,也就是連接到其本地節點上實例上。

scan監聽器的監聽狀態如下:

[root@raclhr-19c-n1 ~]# lsnrctl status LISTENER_SCAN1

LSNRCTL for Linux: Version 19.0.0.0.0 - Production on 02-MAR-2021 15:06:21

Copyright (c) 1991, 2019, Oracle.  All rights reserved.

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=LISTENER_SCAN1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER_SCAN1
Version                   TNSLSNR for Linux: Version 19.0.0.0.0 - Production
Start Date                02-MAR-2021 09:54:36
Uptime                    0 days 5 hr. 11 min. 45 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/19.3.0/grid/network/admin/listener.ora
Listener Log File         /u01/app/grid/diag/tnslsnr/raclhr-19c-n1/listener_scan1/alert/log.xml
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=LISTENER_SCAN1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=192.168.59.56)(PORT=1521)))
Services Summary...
Service "86b637b62fdf7a65e053f706e80a27ca" has 2 instance(s).
  Instance "rac19c1", status READY, has 1 handler(s) for this service...
  Instance "rac19c2", status READY, has 1 handler(s) for this service...
Service "9188f464f9113646e053343ba8c0fe51" has 2 instance(s).
  Instance "rac19c1", status READY, has 1 handler(s) for this service...
  Instance "rac19c2", status READY, has 1 handler(s) for this service...
Service "pdblhr1" has 2 instance(s).
  Instance "rac19c1", status READY, has 1 handler(s) for this service...
  Instance "rac19c2", status READY, has 1 handler(s) for this service...
Service "rac19c" has 2 instance(s).
  Instance "rac19c1", status READY, has 1 handler(s) for this service...
  Instance "rac19c2", status READY, has 1 handler(s) for this service...
Service "rac19cXDB" has 2 instance(s).
  Instance "rac19c1", status READY, has 1 handler(s) for this service...
  Instance "rac19c2", status READY, has 1 handler(s) for this service...
Service "rac19c_CFG" has 2 instance(s).
  Instance "rac19c1", status READY, has 1 handler(s) for this service...
  Instance "rac19c2", status READY, has 1 handler(s) for this service...
The command completed successfully

接下來做負載均衡測試:

[root@raclhr-19c-n2 ~]# more lhr_load_banlance.sh 
#!/bin/bash  
for i in {1..100}
do
echo $i
sqlplus -S "sys/[email protected]/rac19c as sysdba" <<EOF
select instance_name from v\$instance;
EOF
done
exit 0
EOF
[root@raclhr-19c-n2 ~]# chmod +x lhr_load_banlance.sh
[root@raclhr-19c-n2 ~]# ./lhr_load_banlance.sh > a.txt
[root@raclhr-19c-n2 ~]# more a.txt | grep rac19c1 | wc -l
42
[root@raclhr-19c-n2 ~]# more a.txt | grep rac19c2 | wc -l 
58

可以看到,通過SCAN IP基本上是負載均衡的連接到rac的2個節點上。

(五)GNS VIP

GNS VIP是Oracle 11g RAC新特性。在傳統RAC架構中,Public IP、Private IP、Virtual IP、SCAN IP都是預先配好的。如果開啓了GNS服務只需要預先配置Public IP、Private IP即可,Virtual IP、SCAN IP都是由GNS服務從DHCP服務器動態獲取的。配置GNS服務需要事先配置DNS和DHCP服務,GNS VIP可以綁定在任意一個節點的Public網卡上來實現GNS服務,如果沒有配置GNS服務就不需要配置GNS VIP。配置起來相對傳統架構來說複雜一些,所以,在Oracle 11g RAC架構中很少會看到GNS VIP。12c Flex Cluster架構必須配置GNS VIP。

(六)HAIP(Highly Available IP)

在Oracle 11.2.0.2之前,私網的冗餘一般是通過在OS上做網卡綁定(如Bond等)來實現的,從Oracle 11.2.0.2版本開始推出HAIP(Highly Available IP)技術替代了操作系統層面的網卡綁定技術,功能更強大、更兼容。HAIP通過其提供的獨特的169.254.*網段的IP地址實現集羣內部鏈接的高可用及負載均衡。所以,在11.2.0.2或更高版本安裝RAC的時候需要注意169.254.*的IP地址不能被佔用。有了HAIP技術則可以不再需要藉助任何第三方的冗餘技術來實現私網網卡的冗餘。

資源ora.cluster_interconnect.haip將會啓動一個到四個本地HAIP地址附在Private網絡適配器上(私網網卡)。通過HAIP完成Oracle RAC和ASM等內部通訊。如果某一個私有網卡物理損壞,那麼該網卡上的HAIP地址會漂移到其它的可用的私有網絡上。多個私網網卡可以在安裝階段定義,也可以在GRID配置完成之後,通過調用$GRID_HOME/bin/oifcfg setif工具(命令爲:oifcfg setif -global eth2/192.168.1.0:cluster_interconnect)來配置HAIP。

HAIP的個數取決於GRID激活的私網網卡的個數。如果只有1塊私網網卡,那麼GRID將會創建1個HAIP。如果有兩塊私網網卡,那麼GRID將會創建兩個HAIP。若超過兩塊私網網卡則GRID創建4個HAIP。GRID最多支持4塊私網網卡,而集羣實際上使用的HAIP地址數則取決於集羣中最先啓動的節點中激活的私網網卡數目。如果選中更多的私網網卡作爲Oracle的私有網絡,那麼多餘4個的不能被激活。

管理ora.cluster_interconnect.haip這個資源的是ohasd.bin進程,其對應的log位於$GRID_HOME/log/$HOSTNAME/ohasd/ohasd.log以及$GRID_HOME/log/$HOSTNAME/agent/ohasd/orarootagent_root/orarootagent_root.log這兩個位置。需要注意的是,從Oracle 12c開始,集羣的告警日誌已經歸於ADR中,目錄位置在$GRID_BASE/diag/$HOSTNAME/crs/trace中,可以使用adrci命令來查看:

[root@raclhr-19c-n1 ~]# adrci

ADRCI: Release 19.0.0.0.0 - Production on Tue Mar 2 15:31:08 2021

Copyright (c) 1982, 2019, Oracle and/or its affiliates.  All rights reserved.

ADR base = "/u01/app/grid"
adrci> show home
ADR Homes: 
diag/asmcmd/user_oracle/raclhr-19c-n1
diag/asmcmd/user_grid/raclhr-19c-n1
diag/kfod/raclhr-19c-n1/kfod
diag/tnslsnr/raclhr-19c-n1/listener
diag/tnslsnr/raclhr-19c-n1/listener_scan2
diag/tnslsnr/raclhr-19c-n1/asmnet1lsnr_asm
diag/tnslsnr/raclhr-19c-n1/listener_scan3
diag/tnslsnr/raclhr-19c-n1/listener_scan1
diag/asm/+asm/+ASM1
diag/rdbms/_mgmtdb/-MGMTDB
diag/clients/user_root/host_4079108462_110
diag/clients/user_grid/host_4079108462_110
diag/crs/raclhr-19c-n1/crs

[root@raclhr-19c-n1 trace]# pwd
/u01/app/grid/diag/crs/raclhr-19c-n1/crs/trace
[root@raclhr-19c-n1 trace]# ll *ohasd*
-rw-rw---- 1 root oinstall  1358974 Mar  2 15:32 ohasd_cssdagent_root.trc
-rw-rw---- 1 root oinstall   262948 Mar  2 15:32 ohasd_cssdagent_root.trm
-rw-rw---- 1 root oinstall  1323737 Mar  2 15:32 ohasd_cssdmonitor_root.trc
-rw-rw---- 1 root oinstall   256254 Mar  2 15:32 ohasd_cssdmonitor_root.trm
-rw-rw---- 1 grid oinstall  2213526 Mar  2 15:32 ohasd_oraagent_grid.trc
-rw-rw---- 1 grid oinstall   405923 Mar  2 15:32 ohasd_oraagent_grid.trm
-rw-rw---- 1 root oinstall 17569942 Mar  2 15:32 ohasd_orarootagent_root.trc
-rw-rw---- 1 root oinstall  2998382 Mar  2 15:32 ohasd_orarootagent_root.trm
-rw-rw---- 1 root oinstall  7550545 Mar  2 15:32 ohasd.trc
-rw-rw---- 1 root oinstall  1170542 Mar  2 15:32 ohasd.trm

在HAIP資源online以後,通過操作系統命令ifconfig -a就能查看到多了類似於eth1:1的虛擬網卡,HAIP地址爲169.254.X.X。當然也可以在數據庫級別通過GV$CLUSTER_INTERCONNECTS視圖查看HAIP的地址。HAIP對應的地址由系統自動分配,無法由用戶手工進行指定。

SQL> select * from GV$CLUSTER_INTERCONNECTS;

   INST_ID NAME            IP_ADDRESS                                     IS_ SOURCE                              CON_ID
---------- --------------- ---------------------------------------------- --- ------------------------------- ----------
         2 ens37:1         169.254.12.150                                 NO                                           0
         1 ens37:1         169.254.15.64                                  NO                                           0

Oracle數據庫和ASM實例可以通過HAIP來實現私網通訊的高可用性和負載均衡。私網的流量會在這些私網網卡上實現負載均衡,如果某個網卡出現了故障,它上面的HAIP會自動切換到別的可用的私網網卡上,從而不影響私網的通訊。Windows平臺目前不支持HAIP技術。

但是,在有些客戶環境下,私網是通過VLAN劃出來的,而出於網絡管理要求,VLAN的IP地址與網卡必須是綁定的,私網IP也必須是固定的IP地址(雖然按Oracle RAC的安裝要求,私網應該是獨立隔離的網絡),這時HAIP會無法分配,導致依賴它的ASM資源無法啓動。HAIP存在不少Bug,若不幸碰到,則可以將HAIP功能禁用掉。麥老師目前已經碰到過2次了,而且查原因查了很久,慚愧啊。

如果用戶使用的是操作系統級別的綁定或者沒有使用私網的綁定,那麼可以通過在RDBMS和ASM的參數文件中設置cluster_interconnect指定私網地址將HAIP覆蓋(如果有多個私網地址,請用英文冒號分隔)。雖然說HAIP本身依然存在,但是ASM實例和RDBMS實例以後就不會使用HAIP。

-- 修改DB參數
alter system set cluster_interconnects="192.168.2.52" scope=spfile sid='rac19c1';
alter system set cluster_interconnects="192.168.2.53" scope=spfile sid='rac19c2';

-- 修改ASM參數
alter system set cluster_interconnects="192.168.2.52" scope=spfile sid='+ASM1';
alter system set cluster_interconnects="192.168.2.53" scope=spfile sid='+ASM2';


-- 重啓集羣
crsctl stop has -f
crsctl start has


-- DB和ASM查詢
SQL> select * from GV$CLUSTER_INTERCONNECTS;

   INST_ID NAME            IP_ADDRESS                                     IS_ SOURCE                              CON_ID
---------- --------------- ---------------------------------------------- --- ------------------------------- ----------
         2 ens37           192.168.2.53                                   NO  cluster_interconnects parameter          0
         1 ens37           192.168.2.52                                   NO  cluster_interconnects parameter          0

禁用HAIP

除了上邊修改cluster_interconnect參數外,我們也可以選擇禁用HAIP。在禁用HAIP後,ASM和DB默認使用私網的網卡地址。禁用HAIP的步驟如下所示。

使用root用戶執行以下命令。

1、停止所有節點的CRS

crsctl stop crs

2、依次在每個節點中執行以下命令(節點1執行完畢以下所有命令後再在節點2執行)

crsctl start crs -excl -nocrs
crsctl stop res ora.asm -init
crsctl modify res ora.cluster_interconnect.haip -attr "ENABLED=0" -init
crsctl modify res ora.asm -attr "START_DEPENDENCIES='hard(ora.cssd,ora.ctssd)pullup(ora.cssd,ora.ctssd)weak(ora.drivers.acfs)',STOP_DEPENDENCIES='hard(intermediate:ora.cssd)'" -init
crsctl stop crs

說明,ora.cluster_interconnect.haip的ENABLED屬性的原始值爲1:

ENABLED=1

ora.asm資源的START_DEPENDENCIES和STOP_DEPENDENCIES的原始值爲:

START_DEPENDENCIES=hard(ora.cssd,ora.ctssd)pullup(ora.cssd,ora.ctssd)weak(ora.cluster_interconnect.haip,ora.drivers.acfs)
STOP_DEPENDENCIES=hard(intermediate:ora.cssd,shutdown:ora.cluster_interconnect.haip)

3、依次在每個節點啓動CRS

crsctl start crs

4、檢查HAIP是否禁用

crsctl stat res -t -init

若ora.cluster_interconnect.haip爲offline則爲禁用狀態。

ora.cluster_interconnect.haip
      1        ONLINE  OFFLINE                               STABLE

然後執行如下命令:

ifconfig -a 或ip a |grep 169.254

查看是否還有169.254開頭的地址,如果沒有了,那麼說明已經禁用成功。

下面給出查看資源的屬性值的命令:

[root@rac2 ~]# crsctl stat res ora.cluster_interconnect.haip  -p -init | grep ENABLED
ENABLED=0
[root@rac2 ~]# crsctl stat res ora.asm  -p -init | grep START_DEPENDENCIES
START_DEPENDENCIES=hard(ora.cssd,ora.ctssd)pullup(ora.cssd,ora.ctssd)weak(ora.drivers.acfs)
[root@rac2 ~]# 
[root@rac2 ~]# crsctl stat res ora.asm  -p -init | grep STOP_DEPENDENCIES 
STOP_DEPENDENCIES=hard(intermediate:ora.cssd)

若啓用HAIP,則過程和禁用的過程一致,其主要修改命令如下:

crsctl modify res ora.cluster_interconnect.haip -attr "ENABLED=1" -init
crsctl modify res ora.asm -attr "START_DEPENDENCIES='hard(ora.cssd,ora.ctssd)pullup(ora.cssd,ora.ctssd)weak(ora.cluster_interconnect.haip,ora.drivers.acfs)',STOP_DEPENDENCIES='hard(intermediate:ora.cssd,shutdown:ora.cluster_interconnect.haip)'" -init

說明:

有關RAC中IP的更多內容可以參考:

http://blog.itpub.net/26736162/viewspace-2141223/ http://blog.itpub.net/26736162/viewspace-2132596/ http://blog.itpub.net/26736162/viewspace-2157362/ http://blog.itpub.net/26736162/viewspace-2157364/ http://blog.itpub.net/26736162/viewspace-2157372/

About Me


● 本文作者:小麥苗,部分內容整理自網絡,若有侵權請聯繫小麥苗刪除
● 本文在個人微 信公衆號(DB寶)上有同步更新
● QQ羣號: 230161599 、618766405,微信羣私聊
● 個人QQ號(646634621),微 信號(db_bao),註明添加緣由
● 於 2021年3月 在西安完成
● 最新修改時間:2021年3月
● 版權所有,歡迎分享本文,轉載請保留出處


●小麥苗的微店: https://weidian.com/?userid=793741433
●小麥苗出版的數據庫類叢書: http://blog.itpub.net/26736162/viewspace-2142121/
●小麥苗OCP、OCM、高可用、DBA學習班(Oracle、MySQL、NoSQL): http://blog.itpub.net/26736162/viewspace-2148098/
●數據庫筆試面試題庫及解答: https://mp.weixin.qq.com/s/Vm5PqNcDcITkOr9cQg6T7w


使用微信客戶端掃描下面的二維碼來關注小麥苗的微信公衆號(DB寶)及QQ羣(DBA寶典)、添加小麥苗微信, 學習最實用的數據庫技術。 小麥苗信息


發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章