Oracle数据库基础知识介绍
作者: 字符空间 发布时间: 2025-11-06 阅读: 11
Oracle Database,常简称为Oracle,是美国甲骨文公司的一款关系数据库管理系统。它是世界上最早商业化的关系型数据库之一,以其强大的性能、高可靠性、安全性和可扩展性而闻名,广泛应用于大型企业、金融机构和政府单位的核心业务系统。
一、 Oracle数据库体系结构
理解Oracle的体系结构是学习它的基础,其核心组件包括:
| 组件类别 | 组件名称 | 描述 |
|---|
| 内存结构 | 系统全局区 (SGA) | 数据库实例启动时分配的共享内存区域,包含数据库缓冲区缓存、共享池、重做日志缓冲区等。 |
| 程序全局区 (PGA) | 服务器进程启动时分配的私有内存区域,用于存储会话变量、游标状态等私有数据。 |
| - | - |
| 进程结构 | 用户进程 | 运行应用程序或Oracle工具的进程。 |
| 服务器进程 | 处理连接到实例的用户进程的请求。 |
| 后台进程 | 维护和增强数据库的物理结构和内存结构的之间的关系,包括PMON、SMON、DBWn、LGWR等。 |
| - | - |
| 存储结构 | 表空间 (Tablespace) | 数据库的逻辑存储单元,一个数据库由多个表空间构成(如SYSTEM, SYSAUX, USERS等)。 |
| 数据文件 (Datafile) | 表空间在物理上的体现,对应操作系统上的一个或多个文件。 |
| 段 (Segment)、区 (Extent)、块 (Block) | 数据库存储的层次结构,数据块是Oracle最小的I/O单元。 |
二、 核心概念
| 概念 | 描述 |
|---|
| 数据库 (Database) | 物理概念,是存储在磁盘上的数据集合,包括数据文件、控制文件、重做日志文件等。 |
| 实例 (Instance) | 内存概念,是访问数据库的一套后台进程和内存结构。一个实例只能打开一个数据库,但在RAC环境中,多个实例可以同时打开一个数据库。 |
| 模式 (Schema) | 数据库对象的集合,与用户名同名。一个用户对应一个模式。 |
| 数据字典 | 一组只读的表和视图,存储了关于数据库本身及其所有对象的元数据信息。 |
三、 常用数据类型
| 类别 | 数据类型 | 说明 |
|---|
| 字符类型 | CHAR(n) | 定长字符串,长度不足时用空格填充。例如:CHAR(10) 'ABC' 实际存储为'ABC '。 |
| VARCHAR2(n) | 可变长字符串,最常用的字符类型。例如:VARCHAR2(10) 'ABC' 仅存储'ABC'。 |
| NCHAR(n), NVARCHAR2(n) | 用于存储Unicode国家字符集数据。 |
| - | - |
| 数值类型 | NUMBER(p, s) | 可变长数值,p是精度(总位数),s是小数位数。例如:NUMBER(5,2) 可存储123.45。 |
| INTEGER, FLOAT | NUMBER的子类型,为兼容ANSI标准而存在。 |
| BINARY_FLOAT, BINARY_DOUBLE | IEEE标准浮点数类型,运算速度比NUMBER快。 |
| - | - |
| 日期时间 | DATE | 存储日期和时间信息,精确到秒。例如:'2023-10-27 14:30:00'。 |
| TIMESTAMP | 比DATE精度更高,可以精确到小数秒。 |
| INTERVAL | 存储时间间隔。 |
| 大对象类型 | CLOB, BLOB | CLOB存储大文本数据,BLOB存储大二进制数据(如图片、视频)。 |
四、 基本SQL操作
1. 数据定义语言 (DDL)
| 操作 | 语法示例 |
|---|
| 创建表 | CREATE TABLE employees ( emp_id NUMBER PRIMARY KEY, emp_name VARCHAR2(50) NOT NULL, salary NUMBER(8,2), hire_date DATE DEFAULT SYSDATE ); |
| 创建序列 | CREATE SEQUENCE emp_seq START WITH 1 INCREMENT BY 1 NOCACHE; |
| 创建索引 | CREATE INDEX idx_emp_name ON employees(emp_name); |
2. 数据操作语言 (DML)
| 操作 | 语法示例 |
|---|
| 插入数据 | INSERT INTO employees (emp_id, emp_name, salary) VALUES (emp_seq.NEXTVAL, '张三', 8000); |
| 查询数据 | SELECT emp_id, emp_name, salary FROM employees WHERE salary > 5000 ORDER BY salary DESC; |
| 更新数据 | UPDATE employees SET salary = salary * 1.1 WHERE emp_id = 1001; |
| 删除数据 | DELETE FROM employees WHERE emp_id = 1001; |
五、 PL/SQL 简介
PL/SQL是Oracle对SQL语言的过程化扩展,它集成了程序化语言的特点,允许编写包含SQL语句的程序块。
| PL/SQL组件 | 描述 | 简单示例 |
|---|
| 匿名块 | 没有名字的PL/SQL块,一次性执行。 | BEGIN DBMS_OUTPUT.PUT_LINE('Hello, Oracle!'); END; |
| 存储过程 | 存储在数据库中的命名PL/SQL程序块,可被多次调用。 | CREATE OR REPLACE PROCEDURE raise_salary( p_emp_id IN NUMBER, p_percent IN NUMBER ) AS BEGIN UPDATE employees SET salary = salary * (1 + p_percent/100) WHERE emp_id = p_emp_id; COMMIT; END; |
| 函数 | 必须返回一个值的存储程序。 | CREATE OR REPLACE FUNCTION get_emp_name( p_emp_id IN NUMBER ) RETURN VARCHAR2 AS v_name VARCHAR2(50); BEGIN SELECT emp_name INTO v_name FROM employees WHERE emp_id = p_emp_id; RETURN v_name; END; |
| 触发器 | 在特定数据库事件(如INSERT, UPDATE)发生时自动执行的PL/SQL块。 | CREATE OR REPLACE TRIGGER audit_emp_salary BEFORE UPDATE OF salary ON employees FOR EACH ROW BEGIN INSERT INTO salary_audit VALUES (:old.emp_id, :old.salary, :new.salary, SYSDATE); END; |
六、 Oracle特色功能
| 功能 | 描述 |
|---|
| RAC (实时应用集群) | 多个实例共享一个数据库,提供高可用性和可扩展性。 |
| Data Guard | 提供数据保护和灾难恢复解决方案,通过创建和维护备用数据库来保护数据。 |
| 分区表 | 将大表物理上分割成多个小表,提高查询性能和管理效率。 |
| 物化视图 | 存储查询结果的物理副本,用于汇总数据和提高复杂查询性能。 |
| 闪回技术 | 允许查看和恢复过去某个时间点的数据,无需从备份中恢复。 |
七、 学习建议
- 理解体系结构:掌握SGA、PGA、后台进程等核心概念。
- 熟练SQL和PL/SQL:这是使用Oracle的基础,特别是PL/SQL是Oracle的特色和优势。
- 掌握管理工具:熟悉SQL*Plus, SQL Developer, OEM等工具的使用。
- 实践性能优化:学习执行计划、索引策略、SQL调优等高级主题。
- 关注高可用方案:了解RAC、Data Guard等企业级功能的原理和应用。
❤️收藏
👍点赞
用户评论
发表评论