Oracle分布式分片技术——实现两主机上的Oracle19c数据库(CentOS7与windows10)之间建立分布式数据库管理

前言

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

  • 11
    点赞
  • 31
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 4
    评论
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

雨落i

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值