精选 530 道高频面试题,覆盖 28 大核心领域
Oracle 实例(Instance)和数据库(Database)有什么区别?
Oracle 数据库由物理文件(数据文件、控制文件、重做日志文件等)组成,而实例是一组内存结构(SGA)和后台进程的集合。
一个实例在任何时刻只能挂载并打开一个数据库,但在 RAC 环境中,多个实例可以同时打开同一个数据库。
实例是临时的,随着启动而创建、关闭而消失;数据库是持久的,存储在磁盘上。
可以用 SELECT instance_name FROM v$instance; 和 SELECT name FROM v$database; 分别查看实例名和数据库名。
请详细描述 SGA 的主要组件及其作用。
SGA(System Global Area)是所有服务器进程和后台进程共享的内存区域,主要包括:
SHOW SGA; 或 SELECT * FROM v$sgainfo; 查看各组件大小。PGA 是什么?它与 SGA 有什么不同?
PGA(Program Global Area)是每个服务器进程私有的内存区域,不与其他进程共享。
主要包含排序区(Sort Area)、哈希区(Hash Area)和会话信息。当执行 ORDER BY、GROUP BY 或 Hash Join 时,数据在 PGA 中处理。
如果 PGA 中内存不足,排序操作会溢出到临时表空间(磁盘),导致性能下降。
通过 PGA_AGGREGATE_TARGET 参数控制所有 PGA 的总大小,Oracle 自动管理各进程的分配。
查看当前 PGA 使用:SELECT * FROM v$pgastat;
Oracle 有哪些关键的后台进程?各自的作用是什么?
Oracle 核心后台进程包括:
SELECT pname, description FROM v$bgprocess WHERE paddr <> '00'; 可查看活跃的后台进程。什么是表空间(Tablespace)?Oracle 有哪些默认表空间?
表空间是 Oracle 逻辑存储的最大单位,一个表空间包含一个或多个数据文件。所有段(表、索引等)都存储在表空间中。 Oracle 默认创建的表空间包括:
CREATE TABLESPACE app_data DATAFILE '/u01/app/oracle/oradata/app_data01.dbf' SIZE 1G AUTOEXTEND ON NEXT 256M MAXSIZE 10G;DELETE、TRUNCATE 和 DROP 的区别是什么?
TRUNCATE TABLE emp; 效率远高于 DELETE FROM emp;FLASHBACK TABLE emp TO BEFORE DROP; 恢复。
面试关键点:DELETE 产生大量 Undo 和 Redo,TRUNCATE 几乎不产生;TRUNCATE 不能在有外键引用时直接执行。Oracle 中有哪些类型的索引?B-Tree 索引和 Bitmap 索引的适用场景分别是什么?
Oracle 支持多种索引类型:B-Tree(默认)、Bitmap、Function-Based、Reverse Key、Index-Organized Table (IOT) 等。
CREATE BITMAP INDEX idx_status ON orders(status);解锁全部面试题完整解析
会员可查看所有中级和高级题目的完整深度解析、实战案例和最佳实践
Oracle 支持哪些类型的 JOIN?Nested Loop、Hash Join 和 Sort Merge Join 各自适用于什么场景?
如何创建用户并授予权限?ROLE 和直接授权有什么区别?
创建用户并授权的基本步骤:
CREATE USER app_user IDENTIFIED BY "SecureP@ss123"
DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp QUOTA 1G ON users;
GRANT CONNECT, RESOURCE TO app_user;
GRANT SELECT ON hr.employees TO app_user;
SELECT * FROM dba_sys_privs WHERE grantee = 'APP_USER';
查看角色中的权限:SELECT * FROM role_sys_privs WHERE role = 'CONNECT';Oracle 数据库的启动(Startup)过程分为哪几个阶段?每个阶段做了什么?
Oracle 启动分为三个阶段:
STARTUP NOMOUNT; → ALTER DATABASE MOUNT; → ALTER DATABASE OPEN; 或直接 STARTUP;
受限模式打开:STARTUP RESTRICT;(仅允许有 RESTRICTED SESSION 权限的用户连接)。SPFILE 和 PFILE 有什么区别?如何在两者之间转换?
ALTER SYSTEM SET ... SCOPE=SPFILE/MEMORY/BOTH; 动态修改。
Oracle 启动时按优先级查找:spfile<SID>.ora → spfile.ora → init<SID>.ora。
转换命令:CREATE PFILE='/tmp/initORCL.ora' FROM SPFILE; -- SPFILE 导出为 PFILE
CREATE SPFILE FROM PFILE='/tmp/initORCL.ora'; -- PFILE 转为 SPFILE
最佳实践:生产环境使用 SPFILE,同时定期备份为 PFILE 以便紧急情况下手工编辑启动。
Oracle Net 监听器(Listener)的作用是什么?如何配置和管理?
监听器是运行在数据库服务器上的网络服务,负责接收客户端连接请求并将其转交给对应的数据库实例。 关键配置文件:
lsnrctl start # 启动监听
lsnrctl stop # 停止监听
lsnrctl status # 查看状态
lsnrctl services # 查看注册的服务
动态服务注册:PMON 自动将实例信息注册到监听器(LOCAL_LISTENER 参数控制),推荐使用动态注册而非静态配置。