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

Posted 雨落i

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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

以上是关于Oracle分布式分片技术——实现两主机上的Oracle19c数据库(CentOS7与windows10)之间建立分布式数据库管理的主要内容,如果未能解决你的问题,请参考以下文章

oracle11g网络配置

12.2新特性Oracle Sharding分片级别的高可用实现

ora-12537 tns 连接关闭怎么解决

Java Oracle 本地主机连接错误 (ORA-12505)

限制指定机器IP访问oracle数据库

Oracle案例02——ORA-12034: "SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新