實作兩主機上的Oracle19c資料庫(CentOS7與windows10)之間建立分布式資料庫管理
- 前言
- 0 軟體版本
- 1 環境搭建程序(簡述)
- 2 啟動監聽和資料庫實體(均需切換到oracle用戶下)
- 2.1 啟動監聽行程
- 2.2 查看監聽狀態
- 2.3 啟動資料庫示例
- 2.4 在本地windows下使用Navicat連接資料庫
- 2.5 關閉監聽
- 2.6關閉資料庫實體
- 3 創建到另一個主機(虛擬機CentOS7)中的Oracle資料庫的鏈接服務
- 3.1 查看服務,確保本地oracle監聽已啟動
- 3.2 打開Net Manager—本地—服務命名—添加,彈出下面表單
- 3.3 訪問遠程資料庫的資料
- 3.3.1 在Navicat中登陸自己本機的Oracle資料庫
- 3.3.2 執行SQL腳本,創建database link
- 3.3.3 通過剛剛建立的資料庫連接link1,對服務器2資料庫進行一系列操作,比如select、delete等等,
- 4 表的建立以及分片技術的分析與實作
- 4.1 在本地和虛擬機分別創建一個學生表(保證各欄位名稱及型別相同)
- 4.2 向兩個表插入不同的資料
- 4.3 在本地oracle中的用戶hr建立chinese_students和math_students的全域視圖
前言
Oracle分布式分片技術實作兩主機上的Oracle19c資料庫(CentOS7與windows10)之間建立鏈接,對資料庫進行水平分片,實作不同的磁區策略,從而達到多場地下分布式資料庫的訪問,
本篇主要講述如何單機模擬Oracle分布式資料庫環境的搭建,創建到不同場地資料庫的鏈接,以及依據站點特性對資料庫水平分片的實作,
0 軟體版本
OS:一臺Windows10的電腦和在其上搭建一臺CentOS7的虛擬機
資料庫:Oracle19c
圖形化工具:Navicat for Oracle
(建議直接從官網下載,也可以從我之前的博客中獲取,里面講述如何安裝和使用這些軟體)
1 環境搭建程序(簡述)
在CentOS7中安裝Oracle19c資料庫,按照博客園中的這篇博客和CSDN中的這篇博客文中的步驟即可成功安裝!
需要注意的是,檔案中有一處細微的問題(關于啟動安裝oracle命令./runInstaller):
切換到oracle用戶下時,注意不可以在root下是使用 su oracle來切換,要使用系統右上角的切換用戶來切換,然后登錄oracle用戶,才能執行:./runInstaller
然后開始進行安裝Oracle的步驟(與在Windows10下安裝程序大致相同,可查看我之前的博客),直到安裝成功!
2 啟動監聽和資料庫實體(均需切換到oracle用戶下)
2.1 啟動監聽行程
lsnrctl start

2.2 查看監聽狀態
lsnrctl status
2.3 啟動資料庫示例
sqlplus / as sysdba
SQL> startup

2.4 在本地windows下使用Navicat連接資料庫

注意:服務名需填寫自己在oracle資料庫實體時設定的
可以成功連接,說明在Linux下已成功安裝Oracle19c資料庫,并配置好了環境!
2.5 關閉監聽
lsnrctl stop
2.6關閉資料庫實體
SQL> shutdown normal (正常關閉)
或 SQL> shutdown immediate (立即關閉)
3 創建到另一個主機(虛擬機CentOS7)中的Oracle資料庫的鏈接服務
3.1 查看服務,確保本地oracle監聽已啟動

3.2 打開Net Manager—本地—服務命名—添加,彈出下面表單

自命名服務名,為了明白本服務對應的服務器,我在此處填入服務器2(CentOS7中的Oracle)的服務名wjw(添自己的),下一步:

選擇默認的TCP/IP協議,下一步:

填寫服務器2(CentOS7)的IP地址和Oracle埠號1521(默認),下一步:

填入服務器2的服務名wjw,連接型別選擇默認設定或者共享服務器,下一步:

選擇測驗:

此處如果測驗未成功,出現如下錯誤:
ORA-01017: invalid username/password; logon denied

說明所連接的oracle資料庫未解鎖Scott用戶!
接下來需到CentOS中解鎖Scott用戶:
(1)登陸資料庫:
sqlplus / as sysdba
(2)創建scoot用戶:
create user scott identified by tiger;
(3)解鎖scoot用戶:
alter user scott account unlock;
(4)授予scott用戶資料庫管理員權限:
grant dba to scott;
再次測驗連接:

發現連接測驗成功,成功連接上CentOS7中Oracle資料庫中的scott用戶!

到此,成功創建了不同場地(Windows10到CentOS7)資料庫的鏈接服務,
3.3 訪問遠程資料庫的資料
3.3.1 在Navicat中登陸自己本機的Oracle資料庫
3.3.2 執行SQL腳本,創建database link
SQL腳本為:
create database link link1 connect to scott identified by tiger using 'wjw';

這樣,就建立了一個使用本地服務wjw(實際上是指向服務器2的服務wjw)、名為link1的資料庫鏈接,該鏈接通過服務器2的用戶名scott登入對方資料庫,
3.3.3 通過剛剛建立的資料庫連接link1,對服務器2資料庫進行一系列操作,比如select、delete等等,
select table_name, tablespace_name, status from user_tables @link1;
查詢結果如下圖:

因為該scott用戶是我們新建的,所有里面沒有表,但我們可以為scott用戶創建、修改、洗掉表操作,
4 表的建立以及分片技術的分析與實作
4.1 在本地和虛擬機分別創建一個學生表(保證各欄位名稱及型別相同)
本地oracle中的用戶hr創建名為chinese_students的表:
CREATE TABLE chinese_students(
s_id NUMBER(10) primary key,
s_name VARCHAR2(10),
subject VARCHAR2(10),
s_score NUMBER(10));

虛擬機oracle中的用戶scott創建名為math_students的表:
CREATE TABLE math_students(
s_id NUMBER(10) primary key,
s_name VARCHAR2(10),
subject VARCHAR2(10),
s_score NUMBER(10));

4.2 向兩個表插入不同的資料
對chinese_students
INSERT INTO chinese_students VALUES(001,'***','語文',91.2);
INSERT INTO chinese_students VALUES(002,'***','語文',84.9);
INSERT INTO chinese_students VALUES(003,'***','語文',92.0);
SELECT * FROM chinese_students;


對math_students
INSERT INTO math_students VALUES(001,'***','數學',92.3);
INSERT INTO math_students VALUES(002,'***','數學',95.7);
INSERT INTO math_students VALUES(003,'***','數學',88.8);
SELECT * FROM math_students;


4.3 在本地oracle中的用戶hr建立chinese_students和math_students的全域視圖
CREATE VIEW total_student AS
SELECT * FROM CHINESE_STUDENTS WHERE SUBJECT='語文'
UNION ALL
SELECT * FROM math_students@link1 WHERE subject='數學';

可在本地oracle的用戶hr直接透明查詢到所有學生表的資訊,這樣就達到了oracle分布式資料庫水平分片的效果:
可以看到可以建立了磁區視圖:

建立磁區視圖后,可以在本地oracle資料庫的hr用戶下,對遠程資料庫物件透明訪問:
SELECT * FROM TOTAL_STUDENT;

總結:單機模擬Oracle分布式資料庫環境的搭建,創建到不同場地資料庫的鏈接,以及依據站點特性對資料庫水平分片的實作,
后續會繼續更新有關Oracle分布式資料庫的內容!
(注:第11次發文,如有錯誤和疑問,歡迎在評論區指出,再次感謝!)
——2021.10.12
轉載請註明出處,本文鏈接:https://www.uj5u.com/qita/313184.html
標籤:其他
