Oracle数据库高频面试题及详细答案(实操版)_第1页
Oracle数据库高频面试题及详细答案(实操版)_第2页
Oracle数据库高频面试题及详细答案(实操版)_第3页
Oracle数据库高频面试题及详细答案(实操版)_第4页
Oracle数据库高频面试题及详细答案(实操版)_第5页
已阅读5页,还剩2页未读, 继续免费阅读

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

Oracle数据库高频面试题及详细答案(实操版)一、数据库基础概念1、简述Oracle数据库的体系结构Oracle体系结构主要分为三大核心部分,分别是数据库实例、数据库文件、网络服务,是数据库运行和数据存储的核心框架。(1)数据库实例:是后台进程+内存结构的集合,是数据库运行的核心,一个实例对应一套内存和进程,用于处理用户请求。核心内存包含SGA(系统全局区)和PGA(程序全局区);核心后台进程包含DBWR、LGWR、CKPT、SMON、PMON等。(2)数据库文件:物理存储载体,主要包含数据文件(存储真实业务数据)、控制文件(记录数据库结构、文件位置、日志信息)、重做日志文件(记录所有数据修改操作,用于故障恢复)、参数文件、归档日志文件等。(3)网络服务:用于客户端和数据库服务端通信,主要包含监听程序、本地网络配置,保障远程连接访问。2、SGA和PGA的区别是什么?(1)SGA(系统全局区):属于共享内存,数据库启动时分配,关闭时释放,所有用户进程和服务器进程共享该内存区域。主要包含数据缓冲区、日志缓冲区、共享池、大池、Java池等,用于缓存数据、SQL语句、执行计划、日志信息等公共数据。(2)PGA(程序全局区):属于私有内存,每个服务器进程独立拥有专属PGA,进程结束后内存自动释放,进程之间互不共享。主要用于存储会话私有数据,比如排序数据、游标状态、变量信息、栈空间等。3、Oracle中表空间的作用是什么?常见表空间有哪些?表空间是Oracle逻辑存储单元,是数据文件的容器,所有表、索引、视图等对象都存储在表空间中。核心作用是统一管理物理文件、方便数据迁移、精细化管控存储资源、区分业务数据和系统数据,提升数据库运维效率。常见标准表空间:(1)SYSTEM:系统核心表空间,存储数据字典、系统核心对象,数据库运行必备;(2)SYSAUX:辅助系统表空间,分担SYSTEM表空间压力,存储AWR、EM等辅助组件数据;(3)UNDOTBS:回滚表空间,存储数据修改前的镜像数据,支撑事务回滚、读一致性;(4)TEMP:临时表空间,存储排序、分组、连接等临时运算数据,会话结束后数据自动清空;(5)USERS:默认用户表空间,日常业务数据表、索引的主要存储位置。二、SQL查询与实操语法1、DISTINCT和GROUPBY的区别,什么场景下可以互相替代?(1)核心区别:DISTINCT的核心作用是去重,仅对查询结果做唯一值过滤,不支持聚合计算;GROUPBY是分组统计,基于指定字段分组后,可搭配SUM、COUNT、MAX等聚合函数做数据统计。(2)执行效率:数据量较大时,GROUPBY效率高于DISTINCT,数据库对分组运算的优化机制更完善。(3)替代场景:仅查询唯一字段、无聚合统计需求时,两者可等效替代。例如查询员工表唯一部门ID,SELECTDISTINCTdept_idFROMemp和SELECTdept_idFROMempGROUPBYdept_id结果一致。2、UNION和UNIONALL的区别(1)数据处理:UNION会自动对合并后的结果集去重并排序;UNIONALL直接拼接两个结果集,不做去重、不排序。(2)执行效率:UNIONALL效率远高于UNION,省去了去重和排序的资源消耗。(3)使用场景:业务允许重复数据、追求查询速度时优先用UNIONALL;需要剔除重复数据、保证结果唯一时使用UNION。3、Oracle中IN、EXISTS、JOIN的选型原则(1)IN:适合子查询结果集小、主表数据量大的场景。IN会先执行子查询,将结果缓存后匹配主表数据,子查询数据量过大时,匹配效率会急剧下降。(2)EXISTS:适合子查询结果集大、主表数据量小的场景。EXISTS采用循环匹配逻辑,遍历主表数据逐一校验子查询是否存在匹配数据,无需缓存大量数据。(3)JOIN(内连接、左连接):适合两张大表关联查询的场景。数据库会基于索引生成最优执行计划,批量关联数据,整体效率优于IN和EXISTS,是大表关联的首选。4、简述Oracle的分页查询写法(经典两种)Oracle无原生LIMIT分页语法,核心通过ROWNUM伪列实现,常用两种写法:(1)基础分页(适合简单查询)SELECT*FROM(SELECTROWNUMrn,t.*FROMemptWHEREROWNUM<=30)WHERErn>20;含义:查询第21-30条数据,内层限制最大行数,外层过滤最小行数。(2)排序分页(业务常用,避免排序错乱)SELECT*FROM(SELECTROWNUMrn,t.*FROM(SELECT*FROMempORDERBYcreate_timeDESC)tWHEREROWNUM<=30)WHERErn>20;核心要点:必须先排序再分页,否则ROWNUM生成顺序混乱,会导致分页数据重复、遗漏。三、事务与锁机制1、Oracle事务的四大特性(ACID)(1)原子性:事务是最小执行单元,要么全部执行成功,要么全部回滚,不存在部分执行的情况。(2)一致性:事务执行前后,数据库数据完整性、约束规则保持一致,不会出现数据错乱、违规数据。(3)隔离性:多个并发事务相互独立,互不干扰,数据库通过隔离级别控制事务并发冲突。(4)持久性:事务提交后,数据修改永久生效,即使数据库宕机、重启,数据也不会丢失。2、Oracle支持的事务隔离级别,默认级别是什么?Oracle仅支持两种标准隔离级别,同时通过读一致性实现无脏读:(1)读已提交(READCOMMITTED):默认隔离级别。事务只能读取其他事务已提交的数据,可避免脏读,会出现不可重复读、幻读。(2)可重复读(SERIALIZABLE):最高隔离级别,事务开启后,读取的数据始终保持一致,杜绝脏读、不可重复读、幻读,但并发性能极低,极少用于业务场景。补充:Oracle不支持读未提交级别,通过undo回滚段实现快照读,天然避免脏读问题。3、常见的Oracle锁类型及产生场景(1)行级锁:锁定单条数据,粒度最小、并发最高。执行INSERT、UPDATE、DELETE、SELECT...FORUPDATE时触发,仅锁定操作行,其他行可正常读写。(2)表级锁:锁定整张数据表,粒度大、并发低。手动执行LOCKTABLE、DDL操作(建表、改表、删字段)时触发,会阻塞所有表数据的读写操作。(3)元数据锁(MDL锁):保护数据字典结构,DDL操作期间自动加锁,防止结构修改和数据操作并发冲突,避免表结构和数据不一致。4、死锁产生的条件及解决办法(1)死锁四大必要条件:资源互斥、请求保持、不可剥夺、循环等待。(2)Oracle死锁特点:数据库会自动检测死锁,发现死锁后主动回滚其中一个开销最小的事务,抛出死锁报错,保障其他事务正常执行。(3)规避和解决方案:统一业务SQL的表操作顺序,避免交叉锁定;缩短事务执行时长,及时提交事务;批量操作拆分批次,减少长事务占用锁资源。四、索引原理与优化1、Oracle常用索引类型及适用场景(1)B树索引:默认索引类型,结构平衡、查询稳定。适用于等值查询、范围查询(>、<、BETWEEN),是业务中最常用的索引。(2)唯一索引:限制字段值唯一,避免重复数据,同时具备索引查询加速能力,适用于手机号、身份证、用户账号等唯一字段。(3)组合索引:多个字段联合创建的索引,遵循最左前缀原则。适用于多字段联合查询场景,查询条件匹配左侧字段时索引生效。(4)位图索引:存储索引值的位图映射,适合字段基数小、重复值多的字段(如性别、状态、类型),不适合频繁更新的字段,更新开销极大。(5)函数索引:基于函数运算结果创建索引,适用于查询条件包含函数的场景,比如UPPER(name)、SUBSTR(phone,1,3),可避免查询时失效索引。2、索引失效的常见场景(高频考点)(1)索引字段使用函数、运算:WHERESUBSTR(name,1,2)='张'、WHEREage+10>30,会导致索引失效;(2)隐式类型转换:字段为字符串类型,查询传入数字(WHEREphone=1380000),触发自动转换,索引失效;(3)使用!=、<>、NOTIN、ISNOTNULL:这类否定查询,大概率不走索引;(4)组合索引不满足最左前缀:组合索引(a,b,c),查询条件仅用b、c字段,索引失效;(5)OR关联无索引字段:OR前后字段,一个有索引、一个无索引,整体索引失效;(6)数据表数据量少、索引选择性低:数据库认为全表扫描效率更高,主动放弃索引。3、索引是不是越多越好?为什么?不是,索引需要合理控制数量,过多索引会严重影响数据库性能。(1)优势:查询场景可大幅提升检索速度;(2)弊端:INSERT、UPDATE、DELETE操作时,不仅要修改表数据,还要同步更新所有关联索引,写操作性能大幅下降;同时索引会占用磁盘空间和内存缓存,增加数据库资源开销。(3)原则:查询频繁、过滤性高的字段建索引;更新频繁、基数低、极少查询的字段不建索引。五、数据库优化1、SQL优化的通用思路(1)定位慢SQL:通过慢查询日志、AWR报告、执行计划定位低效SQL;(2)优化查询逻辑:避免SELECT*,只查询所需字段;优先使用JOIN替代子查询;慎用否定查询、模糊全匹配(%xxx);(3)索引优化:补齐缺失索引、删除无效冗余索引、修复索引失效场景;(4)控制数据量:大表分页、分批查询、避免全表扫描;历史数据归档,减少单表数据体量;(5)事务优化:缩短事务时长,避免长事务占用锁资源、回滚段资源。2、如何看懂Oracle执行计划?核心关键指标(1)访问方式:优先看是否走索引(INDEXUNIQUESCAN、INDEXRANGESCAN),出现TABLEACCESSFULL(全表扫描)需重点优化;(2)执行成本(COST):成本越低,SQL执行效率越高,对比优化前后成本变化;(3)行数(ROWS):预估扫描数据量,扫描行数远大于实际查询行数,说明过滤逻辑低效。3、大表优化的常用方案(1)分区表优化:按时间、地区、ID范围做范围分区、列表分区,查询仅扫描对应分区,减少扫描数据量;(2)数据归档:定期将历史不活跃数据迁移至归档表,缩减业务表数据量;(3)索引精细化优化:建立分区索引、函数索引,删除冗余索引,提升查询和写入性能;(4)SQL层面优化:禁止全表查询,强制走索引,批量操作拆分批次,避免一次性处理海量数据;(5)硬件与参数优化:调整SGA、PGA内存参数,优化磁盘IO,提升数据库整体吞吐能力。六、日志、备份与故障恢复1、重做日志(REDO)和回滚日志(UNDO)的区别(1)REDO日志:记录数据修改后的新值,用于故障恢复。数据库宕机重启后,通过REDO日志重做已提交但未写入数据文件的操作,保证数据持久性。循环写入,配合归档日志实现数据备份恢复。(2)UNDO日志:记录数据修改前的旧值,用于事务回滚和读一致性。事务未提交时,可通过UNDO日志恢复原始数据;同时保证其他会话读取到修改前的稳定数据,避免脏读。事务提交后,UNDO数据可被覆盖复用。2、Oracle归档模式和非归档模式的区别(1)非归档模式:REDO日志写完后直接覆盖,不保存历史日志。仅能恢复最近一次日志数据,无法实现时间点恢复,适合测试环境、数据不重要的场景。(2)归档模式:REDO日志切换前,自动归档保存为归档日志,日志永久留存。可基于备份+归档日志实现任意时间点数据恢复,生产环境必须开启归档模式,保障数据安全。3、常用的Oracle备份方式(1)逻辑备份:EXP/EXPDP导出、IMP/IMPDP导入,备份SQL逻辑对象(表、数据、存储过程),跨平台、灵活轻便,适合小批量数据迁移、对象备份。(2)物理备份:RMAN备份,直接备份数据文件、控制文件、日志文件,速度快、支持增量备份、断点续备,是生产环境主流备份方式,支持完整的数据恢复。七、高频简答题(面试突击)1、CHAR和VARCHAR2的区别CHAR是固定长度字符类型,存储不足指定长度会自动补空格,查询效率高,适合固定长度数据(手机号、编码);VARCHAR2是可变长度字符类型,按需分配存储空间,节省磁盘空间,适合长度不固定的文本数据(姓名、地址)。2、Oracle伪列ROWNUM和ROWID的区别ROWNUM:SQL查询后生成的临时行号,动态变化,用于分页、限制查询行数;ROWID:数据行的物理唯一地址,固定

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论