存储过程与触发器:深入理解 Oracle PL/SQL
1. 存储过程与触发器
- 存储过程:是存储在数据库中的一组 SQL 语句集合,可以通过调用来执行。这些过程通常用于封装数据库操作,提高代码的复用性和可维护性。
- 触发器:是一种特殊类型的存储过程,在特定的事件(如插入、更新或删除数据)发生时自动执行。
2. 存储过程与函数的创建和使用
- 存储过程的创建: 存储过程通过
CREATE PROCEDURE
语句来创建。 示例:
CREATE OR REPLACE PROCEDURE increase_salary (emp_id INT, increment DECIMAL) AS
BEGIN
UPDATE employees
SET salary = salary + increment
WHERE employee_id = emp_id;
END increase_salary;
- 上述存储过程用于增加指定员工的工资。
- 存储过程的执行: 执行存储过程时,使用
EXEC
或CALL
语句。 示例:
EXEC increase_salary(101, 500);
- 函数的创建与使用: 函数与存储过程类似,但它会返回一个值,通常用于计算和返回结果。 示例:
CREATE OR REPLACE FUNCTION calculate_bonus (emp_id INT) RETURN DECIMAL AS
bonus DECIMAL;
BEGIN
SELECT salary * 0.1 INTO bonus FROM employees WHERE employee_id = emp_id;
RETURN bonus;
END calculate_bonus;
- 该函数根据员工的工资计算奖金,并返回奖金值。 调用函数:
SELECT calculate_bonus(101) FROM dual;
3. 触发器的创建与应用场景
- 触发器的创建: 触发器通过
CREATE TRIGGER
语句创建,通常在数据修改时自动执行。 示例:
CREATE OR REPLACE TRIGGER salary_update_trigger
BEFORE UPDATE OF salary
ON employees
FOR EACH ROW
BEGIN
IF :NEW.salary > 10000 THEN
INSERT INTO salary_changes (employee_id, old_salary, new_salary, change_date)
VALUES (:OLD.employee_id, :OLD.salary, :NEW.salary, SYSDATE);
END IF;
END salary_update_trigger;
- 该触发器会在员工工资更新前触发,检查新工资是否大于 10000,如果是,则记录工资变化。
- 触发器的应用场景:
- 审计记录:在数据更改时自动记录变动历史。
- 数据验证:在数据插入或更新时进行验证。
- 自动计算:在数据修改时触发计算任务。
4. PL/SQL 语言基础
- PL/SQL 结构: PL/SQL 代码块由声明部分、可执行部分和异常处理部分组成:
- 声明部分:定义变量和常量。
- 可执行部分:执行 SQL 语句和其他 PL/SQL 语句。
- 异常处理部分:处理运行时错误。
示例:
DECLARE
v_emp_id employees.employee_id%TYPE;
v_salary employees.salary%TYPE;
BEGIN
SELECT employee_id, salary INTO v_emp_id, v_salary
FROM employees
WHERE department_id = 10
AND ROWNUM = 1;
UPDATE employees
SET salary = v_salary * 1.1
WHERE employee_id = v_emp_id;
COMMIT;
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_OUTPUT.PUT_LINE('No employee found.');
WHEN OTHERS THEN
DBMS_OUTPUT.PUT_LINE('An error occurred.');
END;
- 上述代码会选取部门 ID 为 10 的一位员工,将其工资增加 10%。如果没有找到该员工,则输出错误信息。
5. 数据库备份与恢复
数据库的备份与恢复是确保数据安全的关键措施。Oracle 提供了多种备份策略和工具,帮助确保数据的持久性与恢复能力。
Oracle 数据库备份概述
- 热备份与冷备份:
- 热备份:在数据库仍然运行的情况下进行备份,通常使用 RMAN(Recovery Manager)工具。
- 冷备份:在数据库关闭的情况下进行备份。
RMAN(Recovery Manager)使用
RMAN 是 Oracle 提供的用于备份和恢复的工具,可以帮助管理数据库的备份任务。
- 备份数据库:
RMAN> BACKUP DATABASE;
- 恢复数据库:
RMAN> RESTORE DATABASE;
- 备份归档日志:
RMAN> BACKUP ARCHIVELOG ALL;
数据恢复与灾难恢复
- 完全恢复:当数据库丢失或损坏时,通过 RMAN 恢复到最近的备份点。
- 点时间恢复(PITR):恢复到某个特定的时间点。
RMAN> RUN {
SET UNTIL TIME "TO_TIMESTAMP('2025-02-12 10:00:00', 'YYYY-MM-DD HH24:MI:SS')";
RESTORE DATABASE;
RECOVER DATABASE;
}
6. 用户与权限管理
- 创建与管理用户: 在 Oracle 中,可以创建不同的用户来进行权限控制。用户通常拥有特定的权限和角色,以控制其对数据库的访问。 示例:
CREATE USER john IDENTIFIED BY password;
GRANT CONNECT, RESOURCE TO john;
- 权限和角色的管理: Oracle 使用角色来简化权限的管理,用户可以授予或撤销特定角色和权限。 示例:
CREATE ROLE manager;
GRANT SELECT, INSERT, UPDATE ON employees TO manager;
GRANT manager TO john;
7. 审计与安全管理
- 审计:Oracle 提供了数据库审计功能,用于记录用户活动,确保数据的安全性。 示例:
AUDIT SELECT TABLE, INSERT TABLE BY john;
- 安全管理:通过加密、身份验证和访问控制来确保数据的机密性和完整性。
8. Oracle 高可用性与集群
- Oracle Data Guard:提供数据保护和灾难恢复功能,通过备份和切换主库与备用库来保证高可用性。
- Oracle RAC(Real Application Clusters):允许多个数据库实例在多个服务器上并行运行,共享数据库存储,提供更高的可用性和负载均衡。
数据库备份与恢复的高可用性策略
- 双活架构:使用 Oracle Data Guard 或 RAC 等技术,确保数据库在一个节点故障时能自动切换到另一个节点,确保数据库始终可用。
这些内容涵盖了 Oracle 中存储过程、触发器、PL/SQL 编程、数据库备份与恢复、高可用性与安全管理等方面。掌握这些技巧和概念,将帮助你在开发和管理 Oracle 数据库时更加高效和安全。