杰瑞科技汇

Oracle 11g教程该怎么学?

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 11g教程该怎么学?-图1
(图片来源网络,侵删)
  • Oracle 实例

    • SGA (System Global Area):系统全局区,是一块共享的内存区域,用于存储数据库缓冲区、共享池、日志缓冲区等,所有用户进程共享这块内存以提高性能。
    • 后台进程:如 PMON(进程监控)、SMON(系统监控)、DBWn(数据库写入)、LGWR(日志写入)等,负责维护数据库的稳定运行。
  • Oracle 数据库

    • 物理结构:指存储在磁盘上的文件,包括:
      • 数据文件:存储实际的数据和索引。
      • 控制文件:记录数据库的物理结构信息,是数据库启动的“钥匙”。
      • 重做日志文件:记录所有对数据库的更改,用于故障恢复。
      • 参数文件:配置实例的启动参数。
      • 归档日志文件:重做日志的备份,用于基于时间点的恢复。
    • 逻辑结构:指用户如何组织数据,包括:
      • 表空间:数据库的逻辑划分,一个或多个数据文件组成。SYSTEM 表空间、USERS 表空间。
      • :存储特定类型数据的对象,如表、索引。
      • :是分配给段的最小空间单位。
      • :是 I/O 的最小单位,也是数据文件存储数据的最小单位。

简单比喻:Oracle 实例就像一个公司的“管理层和办公室”(在内存中快速处理事务),而 Oracle 数据库就像公司的“仓库和档案柜”(在硬盘上永久存储数据)。

安装与配置

  • 下载:从 Oracle 官网下载 Oracle 11g R2 的安装文件(如 winx64_11gR2_database_1of2.zipwinx64_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 数据库交互的标准语言。

Oracle 11g教程该怎么学?-图2
(图片来源网络,侵删)

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 & MySQL 5.6 编程艺术》:深入浅出,理论与实践结合得非常好。
  • 《Oracle Database 11g DBA Handbook》:面向 DBA,内容全面。
  • 《SQL必知必会》:学习 SQL 基础的绝佳入门书。

实践建议

  1. 动手再动手:数据库是实践性极强的技术,不要只看书,一定要亲手敲每一个例子。
  2. 安装虚拟机:在虚拟机(如 VirtualBox, VMware)中安装 Oracle 11g,可以随意实验,不用担心破坏系统。
  3. 阅读执行计划:使用 EXPLAIN PLAN FOR 语句分析 SQL 的执行计划,是优化 SQL 性能的核心技能。
  4. 学习 AWR 报告:自动工作负载仓库报告可以帮助你了解数据库的整体性能状况。

这份教程为你勾勒出了 Oracle 11g 学习的完整路径,从基础概念到核心 SQL,再到 PL/SQL 编程和高级管理,每一步都至关重要,Oracle 11g 是一个功能极其庞大的系统,不可能一蹴而就,请保持耐心,循序渐进,多动手实践,你将逐步掌握这个强大的数据库系统,祝你学习顺利!

分享:
扫描分享到社交APP
上一篇
下一篇