Oracle分布式分片技术——实现两主机上的Oracle19c数据库(CentOS7与windows10)之间建立分布式数据库管理
Posted 雨落i
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了Oracle分布式分片技术——实现两主机上的Oracle19c数据库(CentOS7与windows10)之间建立分布式数据库管理相关的知识,希望对你有一定的参考价值。
实现两主机上的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)之间建立分布式数据库管理的主要内容,如果未能解决你的问题,请参考以下文章
12.2新特性Oracle Sharding分片级别的高可用实现
Java Oracle 本地主机连接错误 (ORA-12505)
Oracle案例02——ORA-12034: "SCOTT"."USER_TABLE" 上的实体化视图日志比上次刷新后的内容新