杰瑞科技汇

Oracle实例教程,从入门到精通?

Oracle 数据库实例教程

第一部分:基础概念 - 理解 Oracle 的核心

在开始任何操作之前,必须理解几个核心概念,这会让你事半功倍。

Oracle实例教程,从入门到精通?-图1
(图片来源网络,侵删)

数据库 vs. 实例

这是最常见也最重要的一个概念,很多人会混淆它们。

  • 数据库: 指的是存储在磁盘上的物理文件集合,这些文件包含了你的所有数据、索引、日志等,你可以把它想象成一个“数据仓库”或“图书馆”,里面存放着所有的书(数据)。
  • 实例: 指的是 Oracle 数据库在内存中的一组后台进程和内存结构(SGA),它是用来管理数据库文件的“大脑”和“管家”,一个实例只能关联一个数据库,但一个数据库(通过 RAC 技术)可以被多个实例同时访问。

简单比喻:

  • 数据库 = 一栋大楼(物理存在)
  • 实例 = 大楼的物业管理公司(在运行,管理着大楼)

没有物业管理公司(实例)在运行,大楼(数据库)就是死的,你无法进去或使用,有了物业管理公司,你才能通过它来访问大楼里的资源。

Oracle实例教程,从入门到精通?-图2
(图片来源网络,侵删)

关键组件

  • SGA (System Global Area): 系统全局区,是实例共享的内存区域,它缓存了数据块、执行计划等信息,以提高性能,主要包括:
    • Buffer Cache: 数据缓冲区,缓存从磁盘读取的数据块。
    • Shared Pool: 共享池,缓存 SQL 语句的解析结果(执行计划)和字典信息。
    • Redo Log Buffer: 重做日志缓冲区,记录所有对数据库的更改操作。
  • PGA (Program Global Area): 程序全局区,是单个服务器进程专有的内存区域,用于存储会话信息、排序区等。
  • 后台进程: Oracle 实例由多个后台进程组成,它们负责不同的任务,如:
    • PMON (Process Monitor): 进程监控进程,负责清理失败的进程。
    • SMON (System Monitor): 系统监控进程,负责实例恢复、清理临时段等。
    • DBWn (Database Writer): 数据库写入进程,将缓冲区的脏数据写回磁盘。
    • LGWR (Log Writer): 日志写入进程,将重做日志缓冲区的内容写入重做日志文件。

第二部分:安装与配置 - 搭建你的第一个 Oracle 环境

下载 Oracle Database

访问 Oracle 官网下载中心,选择适合你操作系统的版本,对于初学者,推荐使用 Oracle Database 19c XE (Express Edition),它是免费的,对硬件要求较低。

安装步骤

Oracle实例教程,从入门到精通?-图3
(图片来源网络,侵删)

以 Windows 为例(Linux/Unix 过程类似):

  1. 运行下载的安装包 setup.exe
  2. 按照安装向导的提示进行操作,通常只需要选择安装路径和设置密码。
  3. 重要: 记住你设置的 SYS, SYSTEM, PDBADMIN 等用户的密码。
  4. 安装完成后,会自动创建一个名为 XE 的服务,并监听默认端口 1521

验证安装

  • 服务检查: 打开 Windows 的“服务”,找到名为 OracleServiceXE 的服务,确保其状态为“正在运行”。
  • 监听器检查: 打开命令行,执行 lsnrctl status,应该能看到监听器正在监听端口 1521。
  • 连接测试: 使用 SQL*Plus 或其他客户端工具(如 SQL Developer)尝试连接。

*第三部分:核心操作 - 使用 SQLPlus**

SQL*Plus 是 Oracle 自带的命令行工具,是学习和管理数据库最直接的方式。

连接到数据库

打开命令行(CMD),输入以下命令:

# 方式一:以普通用户连接(默认会连接到 CDB$ROOT 的 PDB)
sqlplus / as sysdba
# 方式二:以特定用户和密码连接(需要 @主机名:端口/服务名)
sqlplus username/password@localhost:1521/XE
  • sysdba: 是一个特殊的权限,用于管理员登录。
  • localhost:1521/XE: localhost 是主机名,1521 是端口,XE 是 Oracle XE 的服务名。

基本 SQL 语句

a. DDL (数据定义语言) - 定义结构

-- 1. 创建表
CREATE TABLE employees (
    employee_id   NUMBER(6) PRIMARY KEY,
    first_name    VARCHAR2(20),
    last_name     VARCHAR2(25),
    email        VARCHAR2(25),
    hire_date    DATE,
    salary       NUMBER(8, 2)
);
-- 2. 修改表 (增加一列)
ALTER TABLE employees ADD (
    department_id NUMBER(4)
);
-- 3. 删除表
DROP TABLE employees;

b. DML (数据操作语言) - 操作数据

-- 1. 插入数据
INSERT INTO employees (employee_id, first_name, last_name, email, hire_date, salary)
VALUES (101, 'John', 'Doe', 'john.doe@example.com', TO_DATE('2025-01-15', 'YYYY-MM-DD'), 5000.00);
-- 插入多行
INSERT INTO employees VALUES (102, 'Jane', 'Smith', 'jane.smith@example.com', TO_DATE('2025-02-20', 'YYYY-MM-DD'), 6000.00, 10);
-- 2. 查询数据
SELECT * FROM employees;
-- 查询特定列
SELECT first_name, last_name, salary FROM employees WHERE salary > 5500;
-- 3. 更新数据
UPDATE employees SET salary = 5500.00 WHERE employee_id = 101;
-- 4. 删除数据
DELETE FROM employees WHERE employee_id = 101;

c. 事务控制

-- 提交事务,使更改永久生效
COMMIT;
-- 回滚事务,撤销未提交的更改
ROLLBACK;

d. DCL (数据控制语言) - 控制权限

-- 授予权限
GRANT SELECT, INSERT ON employees TO scott;
-- 撤销权限
REVOKE INSERT ON employees FROM scott;

第四部分:数据库对象 - 更强大的数据组织方式

除了表,Oracle 还有许多重要的数据库对象。

索引

索引就像一本书的目录,可以极大提高查询速度。

-- 在 last_name 列上创建索引
CREATE INDEX idx_employees_lastname ON employees(last_name);

视图

视图是一个虚拟表,其内容由查询定义,它简化了复杂查询,并可以隐藏数据细节。

-- 创建一个只显示员工姓名和邮箱的视图
CREATE VIEW v_employee_names AS
SELECT first_name, last_name, email FROM employees;
-- 使用视图
SELECT * FROM v_employee_names;

序列

序列用于生成唯一的数字,通常用作主键。

-- 创建一个序列
CREATE SEQUENCE seq_employee_id
START WITH 1
INCREMENT BY 1
NOCACHE;
-- 使用序列插入数据
INSERT INTO employees (employee_id, first_name, last_name)
VALUES (seq_employee_id.NEXTVAL, 'Peter', 'Jones');

同义词

同义词是数据库对象的一个别名,可以简化访问。

-- 为 employees 表创建一个同义词
CREATE SYNONYM emp FOR employees;
-- 使用同义词
SELECT * FROM emp;

第五部分:PL/SQL 编程 - Oracle 的过程化语言

PL/SQL 是 Oracle 对 SQL 的扩展,它增加了编程语言的结构(如变量、循环、条件判断)。

"Hello, World!" PL/SQL 程序

DECLARE
  -- 声明变量
  v_message VARCHAR2(50) := 'Hello, World!';
BEGIN
  -- 执行部分
  DBMS_OUTPUT.PUT_LINE(v_message);
END;
/
  • DECLARE: 声明变量(可选)。
  • BEGIN: 开始执行代码。
  • DBMS_OUTPUT.PUT_LINE: 输出信息到控制台。
  • END;: 结束代码块。
  • 在 SQL*Plus 中,用 来执行 PL/SQL 块。

使用游标处理多行数据

游标用于遍历查询结果集。

DECLARE
  v_emp_name employees.last_name%TYPE;
  CURSOR c_employees IS
    SELECT last_name FROM employees WHERE department_id = 10;
BEGIN
  OPEN c_employees; -- 打开游标
  LOOP
    FETCH c_employees INTO v_emp_name; -- 从游标中获取一行数据
    EXIT WHEN c_employees%NOTFOUND;     -- 当没有更多数据时退出循环
    DBMS_OUTPUT.PUT_LINE('Employee Name: ' || v_emp_name);
  END LOOP;
  CLOSE c_employees; -- 关闭游标
END;
/

存储过程

存储过程是一组预编译的 SQL 和 PL/SQL 语句,存储在数据库中,可以被反复调用。

CREATE OR REPLACE PROCEDURE add_employee (
    p_id     IN NUMBER,
    p_fname  IN VARCHAR2,
    p_lname  IN VARCHAR2,
    p_sal    IN NUMBER
)
IS
BEGIN
  INSERT INTO employees (employee_id, first_name, last_name, salary)
  VALUES (p_id, p_fname, p_lname, p_sal);
  COMMIT;
  DBMS_OUTPUT.PUT_LINE('Employee ' || p_fname || ' added successfully.');
EXCEPTION
  WHEN OTHERS THEN
    ROLLBACK;
    DBMS_OUTPUT.PUT_LINE('Error: ' || SQLERRM);
END add_employee;
/

调用存储过程:

EXEC add_employee(103, 'Mary', 'Williams', 6500);

第六部分:管理与维护

用户管理

-- 创建用户
CREATE USER myuser IDENTIFIED BY mypassword DEFAULT TABLESPACE USERS;
-- 授予权限
GRANT CONNECT, RESOURCE TO myuser;
-- 删除用户
DROP USER myuser CASCADE; -- CASCADE 会删除用户的所有对象

数据泵 导入/导出

expdpimpdp 是用于逻辑备份和恢复的强大工具。

  • *导出 (在命令行执行,不是 SQLPlus 内)**
    expdp system/password@XE DIRECTORY=dpump_dir DUMPFILE=exp.dmp SCHEMAS=myuser
  • 导入 (在命令行执行)
    impdp system/password@XE DIRECTORY=dpump_dir DUMPFILE=exp.dmp SCHEMAS=myuser

监控与性能

  • 查看当前会话:

    SELECT sid, serial#, username, status FROM v$session WHERE username IS NOT NULL;
  • 查看 SQL 执行计划:

    EXPLAIN PLAN FOR
    SELECT * FROM employees WHERE last_name = 'Smith';
    SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

第七部分:进阶与资源

  1. Oracle Multitenant (CDB/PDB): 从 Oracle 12c 开始,引入了可插拔数据库的概念,一个容器数据库 可以包含多个可插拔数据库,这是现代 Oracle 的标准架构,你需要理解 CDB$ROOT, PDB$SEED 和用户创建的 PDB 之间的区别。
  2. SQL Developer: Oracle 提供的免费图形化工具,比 SQL*Plus 更易用,适合日常开发和管理工作。
  3. 官方文档: Oracle 的官方文档是最好的学习资源,内容权威且全面。
  4. 学习社区:

这份教程为你提供了一个从零开始学习 Oracle 数据库的路线图,学习数据库是一个循序渐进的过程:

  1. 打好基础: 深刻理解实例、数据库、SGA 等核心概念。
  2. 勤于动手: 多用 SQL*Plus 练习 SQL 和 PL/SQL,亲手创建和管理对象。
  3. 由简入繁: 从单表操作开始,逐步学习多表连接、子查询、复杂 PL/SQL 程序。
  4. 关注管理: 了解用户、权限、备份恢复等 DBA 日常工作。
  5. 善用资源: 官方文档和社区是你最宝贵的财富。

祝你学习顺利!

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