Oracle 11g 综合教程
第一部分:Oracle 11g 基础入门
什么是 Oracle 11g?
- Oracle 数据库:由 Oracle 公司开发的一款关系型数据库管理系统,它以其强大的功能、高可靠性、安全性和可扩展性而闻名,是全球最流行的数据库之一,广泛应用于金融、电信、政府、大型企业等核心业务系统。
- 版本号 "11g":
- 11:代表主版本号是 11。
- g:代表 "Grid Computing"(网格计算),这是 Oracle 10g 和 11g 引入的一个核心理念,旨在通过集群服务器实现计算资源的动态分配和管理,提高整体系统的可用性和灵活性。
- 为什么学习 Oracle 11g?
- 尽管现在已有更新的版本(如 12c, 19c, 21c),但 11g 仍然在大量生产环境中稳定运行,掌握 11g 是理解后续版本演进的基础。
- 它包含了大量经典且核心的数据库特性,是学习数据库原理和 SQL 语言的绝佳平台。
Oracle 的核心架构(简述)
在学习操作之前,了解其基本架构至关重要,Oracle 数据库是一个复杂的系统,主要由两部分组成:

-
Oracle 实例:
- SGA (System Global Area):系统全局区,是一块共享的内存区域,用于存储数据库缓冲区、共享池、日志缓冲区等,所有用户进程共享这块内存以提高性能。
- 后台进程:如 PMON(进程监控)、SMON(系统监控)、DBWn(数据库写入)、LGWR(日志写入)等,负责维护数据库的稳定运行。
-
Oracle 数据库:
- 物理结构:指存储在磁盘上的文件,包括:
- 数据文件:存储实际的数据和索引。
- 控制文件:记录数据库的物理结构信息,是数据库启动的“钥匙”。
- 重做日志文件:记录所有对数据库的更改,用于故障恢复。
- 参数文件:配置实例的启动参数。
- 归档日志文件:重做日志的备份,用于基于时间点的恢复。
- 逻辑结构:指用户如何组织数据,包括:
- 表空间:数据库的逻辑划分,一个或多个数据文件组成。
SYSTEM表空间、USERS表空间。 - 段:存储特定类型数据的对象,如表、索引。
- 区:是分配给段的最小空间单位。
- 块:是 I/O 的最小单位,也是数据文件存储数据的最小单位。
- 表空间:数据库的逻辑划分,一个或多个数据文件组成。
- 物理结构:指存储在磁盘上的文件,包括:
简单比喻:Oracle 实例就像一个公司的“管理层和办公室”(在内存中快速处理事务),而 Oracle 数据库就像公司的“仓库和档案柜”(在硬盘上永久存储数据)。
安装与配置
- 下载:从 Oracle 官网下载 Oracle 11g R2 的安装文件(如
winx64_11gR2_database_1of2.zip和winx64_11gR2_database_2of2.zip),注意,可能需要注册一个免费账户。 - 安装:
- 解压两个 zip 文件到同一个目录。
- 运行
setup.exe。 - 按照安装向导进行操作。关键步骤:
- 选择安装类型:“创建和配置数据库”。
- 选择数据库模板:“一般用途或事务处理”。
- 设置数据库标识符:全局数据库名,如
orcl。 - 设置管理口令:为
SYS,SYSTEM等内置用户设置强密码。 - 记下安装过程中提示的监听器端口(默认 1521)和服务名(与全局数据库名相同,如
orcl)。
- 验证安装:
- 打开命令提示符,输入
sqlplus / as sysdba,如果能成功登录,说明数据库实例已启动。 - 输入
SELECT * FROM V$VERSION;查看版本号,确认是否为 11g。
- 打开命令提示符,输入
第二部分:SQL 语言基础
SQL (Structured Query Language) 是与 Oracle 数据库交互的标准语言。

SQL 语句分类
- DQL (Data Query Language):数据查询语言。
SELECT:从数据库中检索数据。
- DML (Data Manipulation Language):数据操作语言。
INSERT:向表中插入新数据。UPDATE:更新表中的现有数据。DELETE:从表中删除数据。
- DDL (Data Definition Language):数据定义语言。
CREATE:创建数据库对象(如表、索引)。ALTER:修改数据库对象的结构。DROP:删除数据库对象。TRUNCATE:清空表中的所有数据。
- DCL (Data Control Language):数据控制语言。
GRANT:授予用户权限。REVOKE:撤销用户权限。
常用 SQL 示例
我们以 scott/tiger 这个经典的示例用户为例进行操作。
-- 1. 连接到 scott 用户 (如果密码未修改) -- 在 SQL*Plus 中输入: conn scott/tiger -- 2. 查询数据 SELECT * FROM emp; -- 3. 条件查询 SELECT ename, sal FROM emp WHERE deptno = 10; -- 4. 排序 SELECT ename, sal, deptno FROM emp ORDER BY sal DESC; -- 5. 聚合函数 SELECT deptno, COUNT(*), AVG(sal) FROM emp GROUP BY deptno; -- 6. 插入数据 INSERT INTO emp (empno, ename, job, mgr, hiredate, sal, comm, deptno) VALUES (7999, 'TEST_USER', 'CLERK', 7788, SYSDATE, 2000, NULL, 20); -- 7. 更新数据 UPDATE emp SET sal = sal * 1.1 WHERE ename = 'TEST_USER'; -- 8. 删除数据 DELETE FROM emp WHERE ename = 'TEST_USER'; -- 提交事务,使更改永久生效 COMMIT; -- 或回滚事务,撤销未提交的更改 -- ROLLBACK;
第三部分:数据库对象管理
表
表是存储数据的逻辑结构,由行和列组成。
-
创建表
CREATE TABLE employees ( employee_id NUMBER(6) PRIMARY KEY, first_name VARCHAR2(20), last_name VARCHAR2(25), email VARCHAR2(25), phone_number VARCHAR2(20), hire_date DATE, job_id VARCHAR2(10), salary NUMBER(8, 2), commission_pct NUMBER(2, 2), manager_id NUMBER(6), department_id NUMBER(4) ); -
约束
PRIMARY KEY:主键,唯一标识表中的每一行。FOREIGN KEY:外键,用于建立两个表之间的引用关系。UNIQUE:唯一约束,确保列中的值是唯一的。NOT NULL:非空约束,确保列必须有值。CHECK:检查约束,确保列中的值满足特定条件。
-- 创建带有外键的表 CREATE TABLE departments ( department_id NUMBER(4) PRIMARY KEY, department_name VARCHAR2(30) NOT NULL, manager_id NUMBER(6), location_id NUMBER(4) ); ALTER TABLE employees ADD CONSTRAINT fk_employees_departments FOREIGN KEY (department_id) REFERENCES departments(department_id);
索引
索引是用于提高查询性能的数据库对象,它类似于书籍的目录,可以快速定位数据。
- 创建索引
-- 为 employees 表的 last_name 列创建索引 CREATE INDEX idx_emp_lastname ON employees(last_name);
视图
视图是一个虚拟表,其内容由查询定义,视图本身不存储数据,数据来自基表。
-
创建和使用视图
-- 创建一个只显示员工姓名和工资的视图 CREATE VIEW vw_employee_salaries AS SELECT first_name, last_name, salary FROM employees; -- 像使用普通表一样使用视图 SELECT * FROM vw_employee_salaries WHERE salary > 5000;
序列
序列用于生成唯一的整数,通常用作主键。
-
创建和使用序列
CREATE SEQUENCE seq_employee_id START WITH 1000 INCREMENT BY 1 NOCACHE NOCYCLE; -- 插入数据时使用序列 INSERT INTO employees (employee_id, first_name, ...) VALUES (seq_employee_id.NEXTVAL, 'John', ...);
第四部分:PL/SQL 编程
PL/SQL 是 Oracle 对 SQL 的扩展,它是一种过程化语言,允许你编写逻辑块来执行复杂操作。
PL/SQL 块结构
一个 PL/SQL 块由三部分组成:
DECLARE
-- 声明部分:定义变量、游标等
v_emp_name VARCHAR2(50);
BEGIN
-- 执行部分:包含 SQL 语句和 PL/SQL 逻辑
SELECT ename INTO v_emp_name FROM emp WHERE empno = 7788;
DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name); -- 输出结果
EXCEPTION
-- 异常处理部分:处理错误
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('Employee not found.');
END;
/
注意:要在 SQL*Plus 中看到 DBMS_OUTPUT.PUT_LINE 的结果,需要先执行 SET SERVEROUTPUT ON;。
存储过程
存储过程是一系列预先编译好的 PL/SQL 语句,存储在数据库中,可以被应用程序反复调用。
CREATE OR REPLACE PROCEDURE get_employee_name (
p_emp_id IN NUMBER,
p_emp_name OUT VARCHAR2
) AS
BEGIN
SELECT ename INTO p_emp_name FROM emp WHERE empno = p_emp_id;
EXCEPTION
WHEN NO_DATA_FOUND THEN
p_emp_name := 'Employee not found.';
END;
/
调用存储过程:
DECLARE
v_name VARCHAR2(50);
BEGIN
get_employee_name(7788, v_name);
DBMS_OUTPUT.PUT_LINE(v_name);
END;
/
函数
函数与过程类似,但必须返回一个值。
CREATE OR REPLACE FUNCTION get_dept_name (
p_dept_id IN NUMBER
) RETURN VARCHAR2
AS
v_dept_name VARCHAR2(30);
BEGIN
SELECT dname INTO v_dept_name FROM dept WHERE deptno = p_dept_id;
RETURN v_dept_name;
EXCEPTION
WHEN NO_DATA_FOUND THEN
RETURN 'Department not found.';
END;
/
调用函数:
DECLARE
v_dname VARCHAR2(30);
BEGIN
v_dname := get_dept_name(10);
DBMS_OUTPUT.PUT_LINE(v_dname);
END;
/
第五部分:高级主题与实战
用户与权限管理
-
创建用户
CREATE USER myuser IDENTIFIED BY mypassword;
-
授予权限
-- 授予连接数据库和创建表的权限 GRANT CONNECT, RESOURCE TO myuser; -- 授予对特定表的查询权限 GRANT SELECT ON emp TO myuser;
-
角色 角色是权限的集合,可以简化权限管理。
CONNECT,RESOURCE,DBA都是预定义的角色。
事务控制
事务是一个逻辑工作单元,它包含一个或多个 SQL 操作,事务必须具备 ACID 特性(原子性、一致性、隔离性、持久性)。
COMMIT:提交事务,将更改永久保存到数据库。ROLLBACK:回滚事务,撤销自上次提交以来的所有更改。SAVEPOINT:设置一个保存点,允许你回滚到事务的某个特定点,而不是回滚整个事务。
INSERT INTO ...; SAVEPOINT s1; UPDATE ...; -- 发现更新有误,回滚到保存点 s1 ROLLBACK TO s1; -- 然后继续其他操作 DELETE ...; -- 最后决定提交所有操作 COMMIT;
数据导出与导入
-
使用 Data Pump (推荐方式,Oracle 10g/11g+)
- 导出:
expdp system/password DIRECTORY=dpump_dir DUMPFILE=expdp.dmp SCHEMA=scott
- 导入:
impdp system/password DIRECTORY=dpump_dir DUMPFILE=expdp.dmp SCHEMA=scott
DIRECTORY需要在数据库中预先创建并授权。
- 导出:
-
使用传统 Export/Import (exp/imp)
这是旧工具,功能较少,但在某些场景下仍在使用。
第六部分:学习资源与进阶
官方文档
- Oracle Database 11g Documentation:这是最权威、最全面的资料,你可以在这里找到所有概念、语法和参考。
推荐书籍
- 《Oracle Database 11g & MySQL 5.6 编程艺术》:深入浅出,理论与实践结合得非常好。
- 《Oracle Database 11g DBA Handbook》:面向 DBA,内容全面。
- 《SQL必知必会》:学习 SQL 基础的绝佳入门书。
实践建议
- 动手再动手:数据库是实践性极强的技术,不要只看书,一定要亲手敲每一个例子。
- 安装虚拟机:在虚拟机(如 VirtualBox, VMware)中安装 Oracle 11g,可以随意实验,不用担心破坏系统。
- 阅读执行计划:使用
EXPLAIN PLAN FOR语句分析 SQL 的执行计划,是优化 SQL 性能的核心技能。 - 学习 AWR 报告:自动工作负载仓库报告可以帮助你了解数据库的整体性能状况。
这份教程为你勾勒出了 Oracle 11g 学习的完整路径,从基础概念到核心 SQL,再到 PL/SQL 编程和高级管理,每一步都至关重要,Oracle 11g 是一个功能极其庞大的系统,不可能一蹴而就,请保持耐心,循序渐进,多动手实践,你将逐步掌握这个强大的数据库系统,祝你学习顺利!
