Skip to content

Oracle面试题

1. Oracle的基本概念

问题:什么是Oracle数据库?

答案

  • Oracle数据库:甲骨文公司的一款关系型数据库管理系统。
  • 特点
    • 支持大型数据库
    • 支持分布式处理
    • 支持高可用性
    • 支持安全性
    • 支持事务处理

2. Oracle的架构

问题:Oracle的架构有哪些组成部分?

答案

  • 实例
    • 内存结构(SGA、PGA)
    • 后台进程
  • 数据库
    • 数据文件
    • 控制文件
    • 重做日志文件
    • 参数文件
    • 密码文件

3. Oracle的内存结构

问题:Oracle的内存结构有哪些?

答案

  • SGA(系统全局区)
    • 数据缓冲区
    • 共享池
    • 日志缓冲区
    • 大池
    • Java池
    • 流池
  • PGA(程序全局区)
    • 排序区
    • 哈希区
    • 位图合并区

4. Oracle的后台进程

问题:Oracle有哪些重要的后台进程?

答案

  • DBWn:数据库写进程
  • LGWR:日志写进程
  • CKPT:检查点进程
  • SMON:系统监控进程
  • PMON:进程监控进程
  • ARCH:归档进程
  • RECO:恢复进程

5. Oracle的数据类型

问题:Oracle支持哪些数据类型?

答案

  • 字符类型
    • CHAR
    • VARCHAR2
    • NCHAR
    • NVARCHAR2
  • 数值类型
    • NUMBER
    • BINARY_FLOAT
    • BINARY_DOUBLE
  • 日期类型
    • DATE
    • TIMESTAMP
    • INTERVAL
  • 大对象类型
    • CLOB
    • BLOB
    • NCLOB
    • BFILE

6. Oracle的表空间

问题:什么是表空间?

答案

  • 表空间:Oracle数据库的逻辑存储单元,用于组织和管理数据文件。
  • 类型
    • 系统表空间
    • 用户表空间
    • 临时表空间
    • 撤销表空间

示例

sql
-- 创建表空间
CREATE TABLESPACE users
DATAFILE '/u01/app/oracle/oradata/orcl/users01.dbf'
SIZE 100M
AUTOEXTEND ON
NEXT 10M
MAXSIZE UNLIMITED;

-- 修改表空间
ALTER TABLESPACE users
ADD DATAFILE '/u01/app/oracle/oradata/orcl/users02.dbf'
SIZE 50M;

-- 删除表空间
DROP TABLESPACE users INCLUDING CONTENTS AND DATAFILES;

7. Oracle的索引

问题:Oracle支持哪些索引类型?

答案

  • B树索引:默认索引类型,适合等值查询和范围查询。
  • 位图索引:适合低基数列。
  • 函数索引:基于函数的索引。
  • 反向键索引:适合递增列。
  • 哈希索引:适合等值查询。

示例

sql
-- 创建B树索引
CREATE INDEX idx_emp_name ON employees(last_name);

-- 创建位图索引
CREATE BITMAP INDEX idx_emp_gender ON employees(gender);

-- 创建函数索引
CREATE INDEX idx_emp_upper_name ON employees(UPPER(last_name));

-- 删除索引
DROP INDEX idx_emp_name;

8. Oracle的视图

问题:什么是视图?如何创建视图?

答案

  • 视图:基于表的逻辑表,不存储数据,只存储查询定义。
  • 作用
    • 简化复杂查询
    • 提供数据安全性
    • 隐藏数据结构

示例

sql
-- 创建视图
CREATE VIEW emp_dept_view AS
SELECT e.employee_id, e.last_name, e.salary, d.department_name
FROM employees e
JOIN departments d ON e.department_id = d.department_id;

-- 使用视图
SELECT * FROM emp_dept_view;

-- 删除视图
DROP VIEW emp_dept_view;

9. Oracle的存储过程

问题:什么是存储过程?如何创建存储过程?

答案

  • 存储过程:一组预编译的SQL语句,可以接受参数并返回结果。
  • 作用
    • 提高性能
    • 减少网络流量
    • 增强安全性

示例

sql
-- 创建存储过程
CREATE OR REPLACE PROCEDURE get_employee_salary(
    p_employee_id IN NUMBER,
    p_salary OUT NUMBER
) AS
BEGIN
    SELECT salary INTO p_salary
    FROM employees
    WHERE employee_id = p_employee_id;
END;
/

-- 调用存储过程
DECLARE
    v_salary NUMBER;
BEGIN
    get_employee_id(100, v_salary);
    DBMS_OUTPUT.PUT_LINE('Salary: ' || v_salary);
END;
/

-- 删除存储过程
DROP PROCEDURE get_employee_salary;

10. Oracle的触发器

问题:什么是触发器?如何创建触发器?

答案

  • 触发器:在特定事件发生时自动执行的PL/SQL代码块。
  • 类型
    • DML触发器
    • DDL触发器
    • 系统触发器

示例

sql
-- 创建触发器
CREATE OR REPLACE TRIGGER trg_emp_audit
BEFORE INSERT OR UPDATE ON employees
FOR EACH ROW
BEGIN
    INSERT INTO emp_audit(
        employee_id,
        operation,
        operation_date
    ) VALUES (
        :NEW.employee_id,
        CASE WHEN INSERTING THEN 'INSERT' ELSE 'UPDATE' END,
        SYSDATE
    );
END;
/

-- 删除触发器
DROP TRIGGER trg_emp_audit;

11. Oracle的序列

问题:什么是序列?如何创建序列?

答案

  • 序列:用于生成唯一数字的数据库对象。
  • 作用
    • 生成主键值
    • 生成唯一标识符

示例

sql
-- 创建序列
CREATE SEQUENCE seq_employee_id
START WITH 1
INCREMENT BY 1
NOCACHE
NOCYCLE;

-- 使用序列
INSERT INTO employees(employee_id, last_name)
VALUES (seq_employee_id.NEXTVAL, 'Smith');

-- 查看序列当前值
SELECT seq_employee_id.CURRVAL FROM dual;

-- 删除序列
DROP SEQUENCE seq_employee_id;

12. Oracle的同义词

问题:什么是同义词?如何创建同义词?

答案

  • 同义词:数据库对象的别名,用于简化对象引用。
  • 类型
    • 公共同义词
    • 私有同义词

示例

sql
-- 创建私有同义词
CREATE SYNONYM emp FOR hr.employees;

-- 创建公共同义词
CREATE PUBLIC SYNONYM emp FOR hr.employees;

-- 使用同义词
SELECT * FROM emp;

-- 删除同义词
DROP SYNONYM emp;

13. Oracle的分区表

问题:什么是分区表?有哪些分区类型?

答案

  • 分区表:将大表分成多个小表,提高查询性能。
  • 分区类型
    • 范围分区
    • 列表分区
    • 哈希分区
    • 复合分区
    • 引用分区
    • 间隔分区
    • 虚拟列分区

示例

sql
-- 创建范围分区表
CREATE TABLE sales (
    sale_id NUMBER,
    sale_date DATE,
    amount NUMBER
)
PARTITION BY RANGE (sale_date) (
    PARTITION sales_q1 VALUES LESS THAN (TO_DATE('2025-04-01', 'YYYY-MM-DD')),
    PARTITION sales_q2 VALUES LESS THAN (TO_DATE('2025-07-01', 'YYYY-MM-DD')),
    PARTITION sales_q3 VALUES LESS THAN (TO_DATE('2025-10-01', 'YYYY-MM-DD')),
    PARTITION sales_q4 VALUES LESS THAN (MAXVALUE)
);

14. Oracle的物化视图

问题:什么是物化视图?如何创建物化视图?

答案

  • 物化视图:包含查询结果的数据库对象,可以定期刷新。
  • 作用
    • 提高查询性能
    • 减少网络流量
    • 支持数据仓库

示例

sql
-- 创建物化视图
CREATE MATERIALIZED VIEW mv_emp_dept
BUILD IMMEDIATE
REFRESH FAST ON COMMIT
AS
SELECT d.department_id, d.department_name, COUNT(*) AS emp_count
FROM employees e
JOIN departments d ON e.department_id = d.department_id
GROUP BY d.department_id, d.department_name;

-- 刷新物化视图
EXEC DBMS_MVIEW.REFRESH('mv_emp_dept');

-- 删除物化视图
DROP MATERIALIZED VIEW mv_emp_dept;

15. Oracle的备份与恢复

问题:Oracle有哪些备份类型?

答案

  • 物理备份
    • 冷备份
    • 热备份
    • RMAN备份
  • 逻辑备份
    • EXP/IMP
    • EXPDP/IMPDP

示例

sql
-- 使用EXPDP导出
EXPDP hr/hr@orcl DIRECTORY=data_pump_dir DUMPFILE=hr.dmp LOGFILE=hr.log

-- 使用IMPDP导入
IMPDP hr/hr@orcl DIRECTORY=data_pump_dir DUMPFILE=hr.dmp LOGFILE=hr.log

16. Oracle的性能优化

问题:如何优化Oracle性能?

答案

  • SQL优化
    • 使用执行计划
    • 创建合适的索引
    • 避免全表扫描
    • 使用绑定变量
  • 内存优化
    • 调整SGA大小
    • 调整PGA大小
  • IO优化
    • 使用ASM
    • 分离数据文件和日志文件

17. Oracle的执行计划

问题:如何查看执行计划?

答案

sql
-- 使用EXPLAIN PLAN
EXPLAIN PLAN FOR
SELECT * FROM employees WHERE last_name = 'Smith';

SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);

-- 使用AUTOTRACE
SET AUTOTRACE ON;
SELECT * FROM employees WHERE last_name = 'Smith';
SET AUTOTRACE OFF;

18. Oracle的锁

问题:Oracle有哪些锁类型?

答案

  • DML锁
    • 行锁
    • 表锁
  • DDL锁
    • 排他DDL锁
    • 共享DDL锁
  • 内部锁
    • 字典锁
    • 缓存锁

19. Oracle的事务

问题:Oracle的事务有哪些特性?

答案

  • ACID特性
    • 原子性
    • 一致性
    • 隔离性
    • 持久性
  • 隔离级别
    • READ COMMITTED(默认)
    • SERIALIZABLE
    • READ ONLY

20. Oracle的闪回技术

问题:什么是闪回技术?

答案

  • 闪回查询:查询过去某个时间点的数据。
  • 闪回表:将表恢复到过去某个时间点。
  • 闪回数据库:将整个数据库恢复到过去某个时间点。

示例

sql
-- 闪回查询
SELECT * FROM employees AS OF TIMESTAMP
SYSTIMESTAMP - INTERVAL '1' HOUR;

-- 闪回表
FLASHBACK TABLE employees TO TIMESTAMP
SYSTIMESTAMP - INTERVAL '1' HOUR;

21. Oracle的Data Guard

问题:什么是Data Guard?

答案

  • Data Guard:Oracle的高可用性解决方案,用于数据保护和灾难恢复。
  • 类型
    • 物理备库
    • 逻辑备库
  • 模式
    • 最大保护模式
    • 最大可用性模式
    • 最大性能模式

22. Oracle的RAC

问题:什么是RAC?

答案

  • RAC(Real Application Clusters):Oracle的集群解决方案,允许多个实例同时访问同一个数据库。
  • 特点
    • 高可用性
    • 可扩展性
    • 负载均衡

23. Oracle的ASM

问题:什么是ASM?

答案

  • ASM(Automatic Storage Management):Oracle的自动存储管理解决方案。
  • 特点
    • 自动管理磁盘
    • 自动平衡数据
    • 提高性能

24. Oracle的安全管理

问题:如何管理Oracle安全?

答案

  • 用户管理
    • 创建用户
    • 修改用户
    • 删除用户
  • 权限管理
    • 系统权限
    • 对象权限
    • 角色
  • 审计
    • 启用审计
    • 查看审计日志

示例

sql
-- 创建用户
CREATE USER test_user IDENTIFIED BY password;

-- 授予权限
GRANT CONNECT, RESOURCE TO test_user;
GRANT SELECT ON employees TO test_user;

-- 创建角色
CREATE ROLE hr_role;
GRANT SELECT ON employees TO hr_role;
GRANT hr_role TO test_user;

25. Oracle的最佳实践

问题:使用Oracle的最佳实践有哪些?

答案

  • 使用合适的表空间管理数据。
  • 创建合适的索引提高查询性能。
  • 使用分区表管理大表。
  • 定期备份和测试恢复。
  • 监控数据库性能。
  • 优化SQL语句。
  • 使用绑定变量。
  • 定期收集统计信息。
  • 使用闪回技术保护数据。
  • 使用Data Guard实现高可用性。