1.Oracle简介
1.1什么是Oracle?
Oracle是一家公司,他的核心产品是Oracle数据库。Oracle数据库是以分布式数据库为核心的一组软件产品,是目前最流行的客户/服务器(CLIENT/SERVER)或B/S 体系结构的数据库之一。
ORACLE 通常应用于大型系统的数据库产品。
ORACLE 数据库是目前世界上使用最为广泛的数据库管理系统,作为一个通用的数据库系统,它具有完整的数据管理功能;作为一个关系数据库,它是一个完备关系的产品;作为分布式数据库它实现了分布式处理功能。
ORACLE 数据库具有以下特点:
(1)支持多用户、大事务量的事务处理
(2)数据安全性和完整性控制
(3)支持分布式数据处理
(4)可移植性
1.2Oracle数据库体系结构
1.2.1数据库
Oracle 数据库是数据的物理存储。这就包括(数据文件 ORA 或者 DBF、控制文件、联机日志、参数文件)。其实 Oracle 数据库的概念和其它数据库不一样,这里的数据库是一个操作系统只有一个库。可以看作是 Oracle 就只有一个大数据库。
1.2.2实例
一个Oracle实例(Oracle Instance)有一系列的后台进程(Backguound Processes)
和内存结构(Memory Structures)组成。一个数据库可以有 n 个实例。
1.2.3数据文件(dbf)
数据文件是数据库的物理存储单位。数据库的数据是存储在表空间中的,
真正是在某一个或者多个数据文件中。而一个表空间可以由一个或多个数据文件
组成,一个数据文件只能属于一个表空间。一旦数据文件被加入到某个表空间后,
就不能删除这个文件,如果要删除某个数据文件,只能删除其所属于的表空间才
行。
1.2.4表空间
表空间是 Oracle 对物理数据库上相关数据文件(ORA 或者 DBF 文件)的逻辑映射。一个数据库在逻辑上被划分成一到若干个表空间,每个表空间包含了在逻辑上相关联的一组结构。每个数据库至少有一个表空间(称之为 system 表空间)。
每个表空间由同一磁盘上的一个或多个文件组成,这些文件叫数据文件
(datafile)。一个数据文件只能属于一个表空间。
注:表的数据,是有用户放入某一个表空间的,而这个表空间会随机把这些表数据放到一个或者多个数据文件中。
由于 oracle 的数据库不是普通的概念,oracle 是有用户和表空间对数据进行
管理和存放的。但是表不是由表空间去查询的,而是由用户去查的。因为不同用
户可以在同一个表空间建立同一个名字的表!这里区分就是用户了!
1.2.5用户
用户是在表空间下建立的。用户登陆后只能看到和操作自己的表。ORACLE的用户与 MYSQL 的数据库类似,每建立一个应用需要创建一个用户。
1.2.6 总的结构
实例与用户、表空间的关系:图中有实例 1 和实例 2 ,每个实例与用户、表空间都是一对多(1:N)的关系。即一个实例下可以有多个用户和多个表空间。
用户与表空间的关系:用户和表空间是多对一(N:1)的关系,意味着多个用户可以对应同一个表空间。比如实例 1 下的用户 LHB、LSZ 对应同一个表空间;实例 2 下的用户 LHB、ZZY 也对应同一个表空间。
表空间与数据文件的关系:一个表空间可以包含多个数据文件,像实例 1 的表空间下有 A.dbf、B.dbf、C.ora 这几个数据文件;实例 2 的表空间下有 D.dbf、E.ora、C.ora 这几个数据文件。
表与数据文件的关系:每个表随机存储在一个或者多个 dbf/ora 数据文件中,如实例 1 中用户 LHB 的表 1 和表 4,用户 LSZ 的表 2 和表 3,都分散存储在不同数据文件中;实例 2 中用户 LHB 的表 a ,用户 ZZY 的表 b 和表 c 也是如此 。
2.Oracle数据库和Mysql数据库的区别
2.1 基本区别
分类 | MySQL | Oracle |
---|---|---|
厂商 | Oracle 公司(开源社区版免费) | Oracle 公司(商业闭源,需付费授权) |
定位 | 轻量级、开源、适合中小型应用 | 企业级、高可靠、适合大型复杂系统 |
默认事务隔离 | REPEATABLE - READ | READ COMMITTED |
并发模型 | 多线程(单进程多线程) | 多进程(通过后台进程协作) |
存储引擎 | 支持多引擎(InnoDB、MyISAM等) | 单一存储引擎(Oracle Storage) |
成本 | 社区版免费,企业版收费 | 商业授权费用高 |
2.2 架构差异
-
实例与数据库关系
- MySQL:一个实例对应一个数据库(逻辑上可创建多库,但物理上通常单库)。
- Oracle:一个实例可管理多个数据库(通过“表空间”和“用户”逻辑隔离)。
-
内存管理
- MySQL:内存分配相对简单,依赖参数如 innodb_buffer_pool_size。
- Oracle:通过 SGA(系统全局区)和 PGA(程序全局区)精细控制内存,支持动态调整。
-
后台进程
- MySQL:后台线程(如主线程、IO线程)管理存储引擎。
- Oracle:多个独立进程(如 DBWn 写数据、LGWR 写日志、SMON 维护)协作。
2.3功能对比
功能 | MySQL | Oracle |
---|---|---|
事务支持 | InnoDB 支持 ACID | 完整 ACID,支持分布式事务(XA) |
高可用 | 主从复制、InnoDB Cluster | Data Guard、RAC(实时集群) |
分区表 | 支持简单范围/列表分区 | 支持范围、列表、哈希、复合分区 |
优化器 | 基于规则的优化器(简单场景快) | 基于成本的优化器(CBO),复杂查询优 |
并行查询 | 有限支持(如 8.0+) | 强大的并行执行(PQO) |
物化视图 | 不支持 | 支持物化视图及查询重写 |
闪回技术 | 无 | 支持闪回查询、闪回表(恢复误操作) |
2.4SQL 语法差异
-
分页查询
-
MySQL:LIMIT offset, row_count
SELECT * FROM table LIMIT 10 OFFSET 20;
-
Oracle:ROWNUM 或 FETCH(12c+)
SELECT * FROM (SELECT t.*, ROWNUM rn FROM table t) WHERE rn BETWEEN 21 AND 30; -- 或 12c+ SELECT * FROM table OFFSET 20 ROWS FETCH NEXT 10 ROWS ONLY;
-
-
字符串连接
-
MySQL:CONCAT(str1, str2)
-
Oracle:str1 || str2 或 CONCAT(str1, str2)
-
-
日期处理
-
MySQL:NOW() 获取当前时间
-
Oracle:SYSDATE 或 CURRENT_TIMESTAMP
-
-
自增主键
-
MySQL:AUTO_INCREMENT
-
Oracle:通过序列(Sequence)和触发器实现:
CREATE SEQUENCE seq_table_id; CREATE TRIGGER trg_table BEFORE INSERT ON table FOR EACH ROW BEGIN SELECT seq_table_id.NEXTVAL INTO :NEW.id FROM DUAL; END;
-
2.5性能优化
-
锁机制
- MySQL:行级锁(InnoDB),表级锁(MyISAM)。
- Oracle:行级锁 + 多版本并发控制(MVCC),支持更细粒度的锁。
-
索引类型
- MySQL:B-Tree、全文索引(InnoDB)、空间索引。
- Oracle:B-Tree、位图索引、函数索引、反向键索引。
-
执行计划
- MySQL:EXPLAIN 输出简单,适合基础优化。
- Oracle:EXPLAIN PLAN 提供详细步骤,支持 DBMS_XPLAN 高级分析。
2.6扩展与高可用
-
复制机制
- MySQL:异步主从复制(基于 binlog),半同步复制。
- Oracle:Data Guard(物理/逻辑同步),支持零数据丢失模式。
-
集群方案
- MySQL:InnoDB Cluster(基于 Group Replication)。
- Oracle:RAC(Real Application Clusters),多节点共享存储。
2.7安全性
安全功能 | MySQL | Oracle |
---|---|---|
权限控制 | 基于用户/库/表的权限 | 细粒度权限(如列级权限、VPD) |
加密 | 表空间加密(企业版) | TDE(透明数据加密) |
审计 | 企业版支持审计 | 标准审计 + 细粒度审计(FGA) |
2.8适用场景
-
MySQL:
Web 应用、中小型系统(如电商、博客)。
需要快速开发、低成本、轻量级部署的场景。
读写分离或分库分表的分布式架构(如通过 ShardingSphere)。 -
Oracle:
金融、电信等对事务一致性和高可用性要求高的领域。
复杂查询、海量数据(如数据仓库)、高并发 OLTP 系统。
需要企业级支持(如 24x7 服务、灾备方案)的场景。
2.9总结
选择 MySQL:成本敏感、轻量级、快速迭代、社区支持。
选择 Oracle:企业级需求、复杂业务逻辑、高可用性、预算充足。
3.什么是SQLPLUS?
3.1作用
SQL*Plus 是 Oracle 数据库提供的一个命令行交互工具,用于连接 Oracle 数据库并执行 SQL 语句、PL/SQL 程序,以及管理数据库对象。它是 Oracle 数据库的“经典工具”,类似于 MySQL 的 mysql 命令行客户端,但功能更强大且深度集成 Oracle 特性。
3.2SQL*PLUS与MySQL客户端的对比
特性 | SQL*Plus (Oracle) | MySQL 命令行客户端 |
---|---|---|
交互模式 | 支持变量绑定、脚本控制 | 基础交互,支持 \G 格式化输出 |
格式化 | 通过 COLUMN、SET 精细控制 | 简单表格或垂直格式(\G) |
脚本功能 | 支持复杂脚本和动态替换变量 | 支持基本脚本执行 |
管理功能 | 可直接启停数据库实例 | 仅支持查询和用户管理 |
扩展性 | 可调用操作系统命令(HOST) | 无直接操作系统交互 |