Oracle 10g 基础教程
第一章:Oracle 数据库简介
1 什么是 Oracle 数据库?
Oracle 数据库是一个关系型数据库管理系统,它是一个结构化的数据集合,其中的数据以行和列的形式存储在表中,RDBMS 使用 SQL(结构化查询语言)来管理、查询和操作这些数据。

2 什么是 Oracle 10g?
- Oracle 10g 是 Oracle 公司于 2003 年发布的数据库版本。
- "g" 代表 "Grid Computing"(网格计算),这是其核心特性,旨在将多个服务器整合成一个单一的、巨大的计算资源池,以提高资源利用率和系统的可伸缩性。
- 尽管它很古老,但其核心的 SQL 方言、PL/SQL 语言、体系结构和许多基本概念至今仍在现代 Oracle 数据库(如 12c, 19c, 21c)中传承。
3 Oracle 数据库的核心组件
理解 Oracle 的架构是学习的第一步,主要组件包括:
- 数据文件: 存储数据库中所有数据的物理文件(
.dbf),一个或多个数据文件构成一个表空间。 - 控制文件: 一个小型二进制文件,记录了数据库的物理结构,如数据文件名、日志文件名、数据库创建时间戳等。恢复操作绝对依赖它。
- 重做日志文件: 记录对数据库所做的所有更改,当实例故障时,可以利用这些日志将未提交的更改应用到数据文件,实现实例恢复。
- 日志写入器: 后台进程,负责将内存中的重做日志缓冲区内容写入到重做日志文件中。
- 数据库写入器: 后台进程,负责将内存中的脏数据(已修改但未写入磁盘)写入到数据文件中。
- 系统全局区: 一个共享的内存区域,存储数据库实例的数据和控制信息,包含缓冲缓存、共享池、重做日志缓冲区等。
- 程序全局区: 为每个服务器进程分配的非共享内存区域,存储用户会话信息、游标信息等。
- 实例: 由 Oracle 内存结构和后台进程组成,一个数据库可以被多个实例打开(如 RAC 环境),但通常我们说的“一个数据库对应一个实例”。
第二章:安装与配置
1 系统要求
- 操作系统: Windows Server 2003, Red Hat Enterprise Linux 4 等。
- 硬件: 至少 1GB 内存(推荐 2GB+),几 GB 的可用磁盘空间。
- 软件: Oracle 10g 安装介质。
2 安装步骤(以 Windows 为例)
- 运行安装程序: 解压下载的安装包,找到
setup.exe并运行。 - 安装配置助手: 等待安装程序检查系统要求。
- 选择安装类型: 通常选择“企业版”或“标准版”。
- 指定主目录: 选择 Oracle 软件的安装路径。
- 安装数据库: 选择“仅安装数据库软件”或“安装并创建数据库”。
- 安装并创建数据库: 会引导你创建一个数据库实例,设置口令、数据文件位置等,这是新手最快的方式。
- 仅安装数据库软件: 只安装 Oracle 程序文件,稍后需要手动创建数据库。
- 配置管理工具: 安装 Oracle Enterprise Manager (OEM) 控制台。
- 完成安装: 按照向导完成最后步骤。
3 环境变量配置
安装完成后,需要配置 PATH 和 ORACLE_HOME 等环境变量,以便在命令行中使用 Oracle 工具。
- ORACLE_HOME: 指向 Oracle 软件安装的根目录。
- PATH: 在
PATH变量中添加%ORACLE_HOME%\bin(Windows) 或$ORACLE_HOME/bin(Linux)。
第三章:SQL 基础
SQL 是与 Oracle 数据库交互的语言,主要分为四类:
-
DDL (Data Definition Language - 数据定义语言):
(图片来源网络,侵删)CREATE: 创建数据库对象(表、视图等)。ALTER: 修改数据库对象。DROP: 删除数据库对象。TRUNCATE: 清空表数据。RENAME: 重命名对象。
-
DML (Data Manipulation Language - 数据操纵语言):
INSERT: 向表中插入数据。UPDATE: 更新表中的数据。DELETE: 从表中删除数据。
-
DQL (Data Query Language - 数据查询语言):
SELECT: 从表中查询数据。(DQL 是 DML 的一个子集,但通常单独列出)
-
DCL (Data Control Language - 数据控制语言):
GRANT: 授予权限。REVOKE: 撤销权限。
1 创建表
CREATE TABLE employees (
employee_id NUMBER(6) PRIMARY KEY,
first_name VARCHAR2(20),
last_name VARCHAR2(25) NOT NULL,
email VARCHAR2(25) UNIQUE,
hire_date DATE DEFAULT SYSDATE,
salary NUMBER(8, 2),
department_id NUMBER(4)
);
NUMBER(p, s): 精度 p,小数位数 s。VARCHAR2(s): 可变长度字符串,最大长度 s。DATE: 日期类型。PRIMARY KEY: 主键约束,值唯一且非空。NOT NULL: 非空约束。UNIQUE: 唯一约束,值唯一但可为空。DEFAULT SYSDATE: 默认值为当前系统时间。
2 插入数据
INSERT INTO employees (employee_id, first_name, last_name, email, salary, department_id)
VALUES (100, 'Steven', 'King', 'SKING', 24000.00, 90);
-- 插入多行
INSERT INTO employees (employee_id, first_name, last_name, email, department_id)
VALUES (101, 'Neena', 'Kochhar', 'NKOCHHAR', 17000.00, 90),
(102, 'Lex', 'De Haan', 'LDEHAAN', 17000.00, 90);
3 查询数据
-- 查询所有列 SELECT * FROM employees; -- 查询指定列 SELECT first_name, last_name, salary FROM employees; -- 使用 WHERE 子句过滤 SELECT * FROM employees WHERE salary > 20000; -- 使用 ORDER BY 排序 SELECT first_name, last_name, salary FROM employees ORDER BY salary DESC; -- 使用聚合函数 SELECT COUNT(*) AS total_employees, AVG(salary) AS average_salary FROM employees;
4 更新和删除数据
-- 更新数据 UPDATE employees SET salary = 25000.00 WHERE employee_id = 100; -- 删除数据 DELETE FROM employees WHERE employee_id = 102;
第四章:PL/SQL 编程基础
PL/SQL 是 Oracle 对 SQL 的过程化扩展,它允许在数据库服务器上编写逻辑块。

1 PL/SQL 块结构
DECLARE
-- 声明部分: 定义变量、游标等
v_employee_name VARCHAR2(50);
v_salary NUMBER(8, 2);
BEGIN
-- 执行部分: 包含 SQL 语句和 PL/SQL 逻辑
SELECT first_name || ' ' || last_name, salary
INTO v_employee_name, v_salary
FROM employees
WHERE employee_id = 100;
DBMS_OUTPUT.PUT_LINE('Employee: ' || v_employee_name);
DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary);
EXCEPTION
-- 异常处理部分: 处理错误
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employee not found.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error occurred: ' || SQLERRM);
END;
/
DECLARE(可选): 声明变量。BEGIN ... END;: 主执行逻辑。EXCEPTION ... END;(可选): 错误处理。DBMS_OUTPUT.PUT_LINE: 在控制台输出信息,需要先在 SQL*Plus 中执行SET SERVEROUTPUT ON;。
2 控制结构
-- IF 语句
DECLARE
v_score NUMBER := 85;
BEGIN
IF v_score >= 90 THEN
DBMS_OUTPUT.PUT_LINE('Grade: A');
ELSIF v_score >= 80 THEN
DBMS_OUTPUT.PUT_LINE('Grade: B');
ELSE
DBMS_OUTPUT.PUT_LINE('Grade: C');
END IF;
END;
/
-- LOOP 循环
DECLARE
i NUMBER := 1;
BEGIN
LOOP
DBMS_OUTPUT.PUT_LINE(i);
i := i + 1;
EXIT WHEN i > 5;
END LOOP;
END;
/
第五章:用户与权限管理
1 创建用户
-- 使用具有 DBA 权限的用户(如 SYSTEM)登录 CREATE USER scott IDENTIFIED BY tiger; -- 默认密码是 tiger
2 授予权限
新创建的用户没有任何权限,需要手动授予。
-- 授予连接数据库的权限 GRANT CONNECT TO scott; -- 授予创建表的权限 GRANT RESOURCE TO scott; -- 授予查询特定表的权限 GRANT SELECT ON employees TO scott;
3 角色
角色是权限的集合,可以简化权限管理。
-- 创建角色 CREATE ROLE app_user_role; -- 将权限授予角色 GRANT CREATE SESSION, CREATE TABLE TO app_user_role; -- 将角色授予用户 GRANT app_user_role TO scott;
第六章:常用工具
1 SQL*Plus
- 是什么: Oracle 提供的命令行工具,用于执行 SQL 和 PL/SQL 脚本。
- 如何启动: 在命令行输入
sqlplus /nolog,CONNECT username/password。 - 常用命令:
CONNECT username/password@database_alias: 连接数据库。SET SERVEROUTPUT ON;: 开启输出显示。DESC table_name;: 描述表结构。SPOOL filename;: 将屏幕输出保存到文件。@script.sql: 执行一个 SQL 脚本文件。
2 Oracle Enterprise Manager (OEM)
- 是什么: 基于 Web 的图形化管理控制台。
- 如何访问: 安装后,通常可以通过
http://localhost:1156/em访问(端口可能不同)。 - 功能: 可以通过图形界面执行几乎所有数据库管理任务,如启动/停止数据库、管理用户、查看性能、执行 SQL 等,非常直观。
3 SQL Developer
- 注意: SQL Developer 是在 Oracle 10g 发布之后推出的,但它完全兼容 10g,它是一个 免费 的图形化工具,比 OEM 更现代、更易用,强烈推荐使用。
- 如何使用: 下载并安装 SQL Developer,配置好 Oracle Home,即可连接和管理 10g 数据库。
第七章:数据备份与恢复基础
1 导出/导入 (EXP/IMP)
这是 10g 中最常用的逻辑备份工具。
-
导出数据:
exp system/manager@orcl file=d:\backup\expdat.dmp log=d:\backup\expdat.log full=y
system/manager: 具有导出权限的用户和密码。file: 导出文件路径。log: 日志文件路径。full=y: 导出整个数据库。
-
导入数据:
imp system/manager@orcl file=d:\backup\expdat.dmp log=d:\backup\impdat.log full=y
fromuser/touser: 指定从哪个用户导入到哪个用户。
2 RMAN (Recovery Manager)
RMAN 是 Oracle 提供的 powerful 物理备份和恢复工具,它比 EXP/IMP 更强大、更可靠,是生产环境的首选。
- 启动 RMAN:
rman target / # 连接到本地数据库实例
- 执行备份:
RMAN> BACKUP DATABASE PLUS ARCHIVELOG; -- 备份数据库和归档日志
- 执行恢复:
RMAN> RESTORE DATABASE; -- 从备份中恢复数据文件 RMAN> RECOVER DATABASE; -- 应用重做日志进行恢复
总结与学习建议
- 打好基础: 熟练掌握 SQL 是一切的基础,多写多练
SELECT,INSERT,UPDATE,DELETE,JOIN,SUBQUERY。 - 理解架构: 不要只停留在命令层面,要理解 SGA、PGA、数据文件、日志文件等是如何协同工作的。
- 动手实践: 安装一个虚拟机(如 VirtualBox),在里面装一个 Linux 系统,再安装 Oracle 10g,亲手去创建用户、建表、写 PL/SQL 块,体验真实的环境。
- 善用工具: 优先使用 SQL Developer,它能让你更专注于学习,而不是被命令行的繁琐操作所困扰。
- 关注文档: Oracle 的官方文档是权威的,虽然 10g 的文档比较老旧,但依然是最好的参考资料。
虽然 Oracle 10g 已经过时,但它所包含的数据库核心思想和技术至今仍然适用,掌握了这些基础,你将能轻松过渡到更新的 Oracle 版本或其他任何关系型数据库,祝你学习顺利!
