首先準備數據庫的必要信息。
查詢當前數據庫實例名
方法一:select instance_name from v$instance;
方法二:show parameter instance
查詢數據庫服務名
方法一:show parameter service_name
ora文件:
單實例的2中配法:
//通過SERVICE_NAME配置
SINGLE1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.1)(PORT = 1521))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = db1)
)
)
//通過SID配置
SINGLE1 =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.1)(PORT = 1521))
(CONNECT_DATA =
(SID = db1)
)
)
//SERVICE_NAME (數據庫服務名)和 SID(數據庫實例名)是有區別的。
一般情況下,單實例,我們會把SERVICE_NAME (數據庫服務名)和 SID(數據庫實例名)寫成一樣的,
那麼上面的2中配置就等效。
如果配置的不一樣,或者在集羣下,SID是有多個的,SERVICE_NAME用的是同一個。
即SERVICE_NAME: dbcommon
SID: db1,db2,db3......
那麼上面的2中配置就不同了,我們一般用SERVICE_NAME那種配置。
oracle集羣:
集羣下,登錄oracle用戶,在plsql裏改的數據,會自動同步,這就是集羣。
你可以等一臺機器,建一張表,然後登另一臺,查這張表。
注意要加上用戶名
例如 select * from scott.t_aaa;
所以ora的配置文件中有個LOAD_BALANCE=yes就是負載均衡,雖然是隨機分發請求。
但是,無論訪問哪個實例,最後的數據都是同步的。
根本原因就是集羣是實例的集羣,數據文件在底層都是同一個。
在集羣下:
rac_group =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.1)(PORT = 1521))
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.2)(PORT = 1521))
)
(LOAD_BALANCE=yes)
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbcommon)
)
)
yml文件:
spring:
datasource:
url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.22.1)(PORT=1521))(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.22.2)(PORT=1521))(FAILOVER=on)(LOAD_BALANCE=on))(CONNECT_DATA=(SERVICE_NAME=dbcommon)))
username: test
password: Test@123
driver-class-name: oracle.jdbc.driver.OracleDriver
initialSize: 5
minIdle: 5
maxActive: 200
maxWait: 60000
如果,你在集羣的oracle機器外又使用了浮動ip。
簡單介紹下浮動ip的原理:
浮動ip即在你的應用服務器之外專門有一臺機器做轉發,對請求來說,只有一個ip。
這個浮動ip會按照一定的算法把請求轉發到後面的任意一臺機器上。
當應用有宕機的時候,就不會抓飯到宕機的機器上。
浮動ip原理介紹:
https://wenku.baidu.com/view/ed2b639b770bf78a6529546a.html
這個原理跟springcloud中的api網關很類似。
如果你的數據庫也做了浮動ip,比如192.168.22.56 端口是 8888
那麼在配置oracle集羣時即可以這樣配置一個ip:
rac =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = 192.168.22.56)(PORT = 8888))
(CONNECT_DATA =
(SERVER = DEDICATED)
(SERVICE_NAME = dbcommon)
)
)
yml文件:
spring:
datasource:
url: jdbc:oracle:thin:@(DESCRIPTION=(ADDRESS_LIST=(ADDRESS=(PROTOCOL=TCP)(HOST=192.168.22.56)(PORT=8888))(FAILOVER=on)(LOAD_BALANCE=on))(CONNECT_DATA=(SERVICE_NAME=dbcommon)))
username: test
password: Test@123
driver-class-name: oracle.jdbc.driver.OracleDriver
initialSize: 5
minIdle: 5
maxActive: 200
maxWait: 60000