赞
踩
分布式数据库
ORACLE(甲骨文)公司研发的
C/S 或 B/S 体系结构的数据库
特点:
(1) 支持多用户、大事务量的事务处理
(2) 数据安全性和完整性控制
(3) 支持分布式数据处理
(4) 可移植性(跨平台,支持不同操作系统上使用)
Oracle只有一个大数据库,跟别的数据库概念不一样
一个Oracle实例有一系列的后台进程和内存结构组成。一个数据库可以有n个实例。
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,真正是在某一个或多个数据文件中。而一个表空间可以由一个或多个数据文件组成,一个数据文件著能属于一个表空间(一对多)。一旦数据文件被加入到某个表空间后,就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才行。
一个数据库有多个表空间
每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫做数据文件。
oracle是有用户和表空间对数据进行管理和存放的。但是表不是由表空间去查询的,而是由用户去查的。因为不同用户可以在同一表空间建立同一个名字的表。这里区分就是用户了。
用户是在表空间下建立的。用户登录后只能看到和操作自己的表,ORACLE的用户与MYSQL的数据库类似,每建立一个应用需要创建一个用户。不同用户下可以有相同名字的表。
本地安装麻烦、卸载也麻烦,所以本文采用docker进行安装
虚拟机安装centos7版本的linux操作系统
安装oracle11gR2
使用docker v20.10
yum install -y docker
sudo systemctl start docker
sudo systemctl enable docker
sudo systemctl status docker
## 编辑文件
vim /etc/docker/daemon.json
## 填写内容,[]里的内容为阿里云容器中的,一人一个,这里是我自己的
{
"registry-mirrors": ["xxx"]
}
## 重启
sudo systemctl daemon-reload
sudo systemctl restart docker
docker pull registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g
docker run \
--name oracle_temp \
-p 1500:1521 \
--privileged=true \
-d \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest
docker exec -it oracle_temp /bin/bash
whereis oracle
如果以上方法不行,则
cd /home
查找oracle
里面,自己去寻找mkdir -p /root/server/oracle/data/app/oracle/oradata
docker cp oracle_temp:/home/oracle/app/oracle/oradata/ /root/server/oracle/data/app/oracle
chown -R 500:500 /root/server/oracle/data/app/oracle/oradata
docker rm -f oracle_temp
docker run \
-d \
--name my_oracle \
-p 1521:1521 \
--privileged=true \
-v /root/server/oracle/data/app/oracle/oradata:/home/oracle/app/oracle/oradata \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest
加了环境变量的写法(一定要根据实际情况选择加入-e)
docker run \
-d \
--name my_oracle \
-p 1521:1521 \
--privileged=true \
-e ORACLE_SID=ORCLCDB \
-e ORACLE_PDB=ORCLPDB1 \
-e ORACLE_PWD=123456 \
-e ORACLE_EDITION=standard \
-e ORACLE_CHARACTERSET=AL32UTF8 \
-v /root/server/oracle/data/app/oracle/oradata:/home/oracle/app/oracle/oradata \
registry.cn-hangzhou.aliyuncs.com/helowin/oracle_11g:latest
docker exec -it my_oracle bash
rm -rf /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl.bak #删除oracle的机制文件
cp /home/oracle/app/oracle/oradata/helowin/control01.ctl /home/oracle/app/oracle/flash_recovery_area/helowin/control02.ctl #拷贝
exit;
docker restart my_oracle #重启
docker exec -it my_oracle bash
source ~/.bash_profile
sqlplus / as sysdba #登录sqlplus
alter user system identified by 新密码; #修改system用户账号密码
alter user sys identified by 新密码; #修改sys用户账号密码
create user test identified by test; #创建内部管理员账号密码都是test
grant connect,resource,dba to test; #将dba权限授权给内部管理员账号和密码
ALTER PROFILE DEFAULT LIMIT PASSWORD_LIFE_TIME UNLIMITED; #修改密码规则策略为密码永不过期
alter system set processes=1000 scope=spfile; #修改数据库最大连接数据
create tablespace test
datafile '/home/oracle/app/oracle/oradata/helowin/test.dbf '
size 500m
autoextend on
next 10m
maxsize unlimited;
使用navicat或者DBeaver工具远程连接
用户名:system 密码: 123456 或者 用户名:test 密码: test
主机名: IP
端口:1521
SID: helowin
select userenv('language') from dual
XXX市自来水公司为更好地对自来水收费进行规范化管理,决定委托公司开发《自来水公司收费系统》。考虑到自来水业务数量庞大,数据并发量高,决定数据库采用ORACLE数据库。主要功能包括:
1、基础信息管理:
(1)业主类型设置
(2)价格设置
(3)区域设置
(4)收费员设置
(5)地址设置
2、业主信息管理:
(1)业主信息维护
(2)业主信息查询
3、收费管理:
(1)抄表登记
(2)收费登记
(3)收费记录查询
(4)欠费用户清单
4、统计分析:
(1)收费日报单
(2)收费月报表
表空间(Mysql里的数据库) -> 用户 -> 表
oracle连接的时候是以用户做连接,而不是表空间(Mysql是以连接数据库的)
CREATE TABLESPACE xxxx
LOGGING
DATAFILE '/home/oracle/app/oracle/oradata/helowin/xxx.dbf'
SIZE 100M
AUTOEXTEND ON
NEXT 10M
MAXSIZE 500M
EXTENT MANAGEMENT LOCAL;
1、CREATE TABLESPACE xxxx: 创建一个名为 “xxxx” 的表空间。
2、LOGGING: 指定该表空间启用日志记录,这意味着对该表空间中的数据更改将被记录在数据库的重做日志文件中,以支持恢复和回滚操作。
3、DATAFILE ‘/app/oracle/oradata/orcl/xxxx.dbf’: 指定该表空间的数据文件路径和名称为 ‘/app/oracle/oradata/orcl/xxxx.dbf’。数据文件是用于存储表空间中的数据的物理文件。
4、SIZE 100M: 设置数据文件的初始大小为 100MB。
5、AUTOEXTEND ON: 启用数据文件的自动扩展功能,当空间不足时,自动增加数据文件的大小以容纳更多数据。
6、NEXT 10M: 指定数据文件自动扩展时的增量大小为 10MB。当数据文件需要扩展时,会增加 10MB 的空间。
7、MAXSIZE 500M: 设置数据文件的最大大小限制为 500MB。即使自动扩展功能被启用,数据文件的大小也不会超过该限制。
8、EXTENT MANAGEMENT LOCAL: 指定表空间使用本地管理方式来管理数据块的分配。本地管理方式是一种较新的管理方式,它在表空间级别进行数据块分配,而不是在数据库级别进行分配。
create user wateruser
identified by 123456
default tablespace waterboss;
1、CREATE USER wateruser: 创建一个名为 wateruser 的用户。
2、IDENTIFIED BY 123456: 设置该用户的密码为 123456。用户在登录时需要提供该密码进行身份验证。
3、DEFAULT TABLESPACE waterboss: 指定用户的默认表空间为 waterboss。默认表空间是用户创建对象时的默认存储位置,如果未显式指定表空间,则使用默认表空间。
grant dba to wateruser;
语法
CREATE TABLE 表名称(
字段名 类型(长度) primary key,
字段名 类型(长度),
......
)
数据类型
1、字符型
(1)CHAR:固定长度的字符类型,最多存储2000个字节
(2)VARCHAR2:可变长度的字符类型,最多存储4000个字节
(3)LONG:大文本类型,最多可以存储2个G
2、数值型
NUMBER:数值类型
列如:NUMBER(5) 最大可存的数为99999
---------NUMBER(5,2) 最大可存的数为999.99
3、日期型
(1)DATE:日期时间型,精确到秒
(2)TIMESTAMP:精确到秒的小数位后9位
4、二进制型(大数据类型)
(1)CLOB:存储字符,最大可以存4个G
(2)BLOB:存储图像、声音、视频等二进制数据,最多可以存4个G
实例
创建业主表
create table t_owners
(
id number primary key,
name varchar2(30),
addressid number,
housenumber varchar2(30),
watermeter varchar2(30),
adddate date,
ownertypeid number
);
ALTER TABLE 表名称 ADD(列名1 类型 [DEFAULT 默认值],列名2 类型 [DEFAULT 默认值]...);
实例
ALTER TABLE T_OWNERS ADD
(
REMARK VARCHAR2(20),
OUTDATE DATE
);
ALTER TABLE 表名称 MODIFY(列名1 类型 [DEFAULT 默认值], 列明2 类型 [DEFAULT 默认值]...);
实例
ALTER TABLE T_OWNERS MODIFY
(
REMARK CHAR(20),
OUTDATE TIMESTAMP
);
ALTER TABLE 表名称 RENAME COLUMN 原列名 TO 新列名;
实例
ALTER TABLE T_OWNERS RENAME COLUMN OUTDATE TO EXITDATE;
ALTER TABLE 表名称 DROP COLUMN 列名1, 列名2;
实例
ALTER TABLE T_OWNERS DROP COLUMN REMARK;
DROP TABLE 表名称
INSERT INTO 表名[(列名1, 列名2, ...)] VALUES(值1, 值2, ...);
向业主表插入数据:
INSERT INTO T_OWNERS VALUES(1, '李斯', 2, '2-2', '2222', sysdate, 1);
UPDATE 表名 SET 列名1=值1, 列名2=值2, ...WHERE 修改条件;
需求:将ID为1的业主的登记日期更改为三天前的日期
UPDATE T_OWNERS SET adddate=adddate-3 where id=1;
DELETE FROM 表名 WHERE 删除条件;
需求:删除业主ID为2的业主信息
DELETE FROM T_OWNERS WHERE id=2;
TRUNCATE TABLE 表名称;
比较truncate与delete实现数据删除
1、delete删除的数据可以rollback
2、delete删除可能产生碎片,并且不释放空间
3、truncate是先摧毁表结构,再重构表结构
JDBC连接在现有项目中已经不常见了,都是框架集成,本文使用的是SpringBoot+Mybatis+druid调用oracle数据库。
若依框架自带有集成多数据库方法
<!--oracle-->
<dependency>
<groupId>com.oracle.database.jdbc</groupId>
<artifactId>ojdbc8</artifactId>
<version>19.3.0.0</version>
</dependency>
注意:oracle是以用户作为账号、密码进行连接
# 数据源配置 spring: datasource: type: com.alibaba.druid.pool.DruidDataSource druid: # 主库数据源 master: url: jdbc:mysql://127.0.0.1:3306/ry-vue?useUnicode=true&characterEncoding=utf8&zeroDateTimeBehavior=convertToNull&useSSL=true&serverTimezone=GMT%2B8 username: root password: 111111 # 从库数据源 slave: # 从数据源开关/默认关闭 enabled: true url: jdbc:oracle:thin:@//192.168.6.108:1521/helowin username: wateruser password: 123456 # 初始连接数 initialSize: 5 # 最小连接池数量 minIdle: 10 # 最大连接池数量 maxActive: 20 # 配置获取连接等待超时的时间 maxWait: 60000 # 配置连接超时时间 connectTimeout: 30000 # 配置网络超时时间 socketTimeout: 60000 # 配置间隔多久才进行一次检测,检测需要关闭的空闲连接,单位是毫秒 timeBetweenEvictionRunsMillis: 60000 # 配置一个连接在池中最小生存的时间,单位是毫秒 minEvictableIdleTimeMillis: 300000 # 配置一个连接在池中最大生存的时间,单位是毫秒 maxEvictableIdleTimeMillis: 900000 # 配置检测连接是否有效 validationQuery: SELECT 1 FROM DUAL testWhileIdle: true testOnBorrow: false testOnReturn: false webStatFilter: enabled: true statViewServlet: enabled: true # 设置白名单,不填则允许所有访问 allow: url-pattern: /druid/* # 控制台管理用户名和密码 login-username: ruoyi login-password: 123456 filter: stat: enabled: true # 慢SQL记录 log-slow-sql: true slow-sql-millis: 1000 merge-sql: true wall: config: multi-statement-allow: true
@DataSource(value = DataSourceType.SLAVE)
场景:测试库向生产库的一个数据迁移
一般不使用
)一下所有的用户名/密码都默认写system和其密码,可以理解为最高权限
exp 用户名/密码 full=y file=xxx.dmp
file=xxx.dmp是指定导出文件名,可写可不写
实例
exp system/123456 full=y file=water.dmp
imp 用户名/密码 full=y file=xxx.dmp
实例
imp system/123456 full=y file=water.dmp
exp 用户名/密码 owner=wateruser file=xxx.dmp
实例
exp system/123456 owner=wateruser file=water.dmp
imp 用户名/密码 file=xxx.dmp fromuser=需要导入的用户名
实例
imp system/123456 file=water.dmp fromuser=wateruser
exp 表的所在用户/密码 file=xxx.dmp tables=表名1, 表名2
实例
exp wateruser/123456 file=water.dmp tables=t_account, t_area
imp 表的所在用户/密码 file=water.dmp tables=表名1, 表名2
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。