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

下载本文档

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

文档简介

Oracle数据库工程师面试题及详细答案(实操完整版)一、数据库基础概念(高频基础题)1、简述Oracle数据库的体系结构,核心组成部分有哪些?参考答案:Oracle体系结构主要分为三大核心部分:数据库实例、数据库文件、网络服务,日常运维和开发核心关注实例和存储结构。1.数据库实例(Instance):是Oracle启动后常驻内存的进程+内存结构,临时运行单元,关机后消失。包含SGA(系统全局区)和PGA(程序全局区),以及后台核心进程(DBWR、LGWR、CKPT、SMON、PMON)。2.数据库(Database):是物理存储文件的集合,永久存储数据,核心文件包含数据文件、控制文件、重做日志文件、参数文件、归档日志文件等。3.网络服务:用于客户端与服务端通信,核心为监听程序,保障远程连接访问。核心区别:实例是运行态,数据库是存储态,一个数据库可被多个实例挂载(RAC架构),单实例场景一一对应。2、SGA和PGA的区别及各自作用?参考答案:1.SGA(系统全局区):属于所有用户共享的内存区域,实例启动时分配,实例关闭时释放。核心组成:数据缓冲区、重做日志缓冲区、共享池(库缓存+数据字典缓存)、大池、Java池。核心作用:缓存数据库数据、执行SQL语句、存储数据字典信息,减少磁盘IO,提升执行效率。2.PGA(程序全局区):属于单个进程私有内存,每个客户端连接、每个后台进程都会分配独立PGA,进程结束后自动释放。核心组成:排序区、哈希连接区、会话变量区。核心作用:处理单会话的排序、分组、哈希关联等私有操作,不支持共享。3、Oracle后台核心进程(5大必知进程)作用?参考答案:1.DBWR(数据写入进程):将数据缓冲区的脏数据(修改后未落地磁盘的数据)批量写入数据文件,不会实时写入,减少磁盘频繁读写。2.LGWR(日志写入进程):Oracle最核心进程,实时将重做日志缓冲区的日志写入联机重做日志文件,所有数据修改操作先写日志后写数据,是数据恢复的核心依据。3.CKPT(检查点进程):触发检查点事件,更新控制文件和数据文件头的SCN号,标记数据一致性,缩短数据库故障后的恢复时间。4.SMON(系统监控进程):数据库启动时执行实例恢复,清理临时段、合并空闲碎片,维护数据库系统稳定性。5.PMON(进程监控进程):监控异常断开的用户进程、后台进程,释放失效会话的资源、锁、内存,避免资源泄露。二、SQL查询与语法实操(开发必备)1、UNION和UNIONALL的区别?各自使用场景?参考答案:1.核心区别:-UNION:合并查询结果后自动去重、排序,性能较低;-UNIONALL:直接拼接结果,不去重、不排序,性能远高于UNION。2.使用场景:-业务需要剔除重复数据、需要结果有序时,用UNION;-明确数据无重复、追求查询性能、大数据量拼接时,优先用UNIONALL(生产环境主流)。3.共性要求:前后两个查询的字段数量、字段类型必须一致,字段名称可不同。2、WHERE和HAVING的区别?参考答案:1.过滤时机不同:WHERE是分组前过滤,HAVING是分组后过滤;2.适用范围不同:WHERE可以过滤所有普通字段,不能使用聚合函数(SUM、COUNT、MAX等);HAVING专门用于过滤聚合函数结果;3.执行顺序:WHERE过滤数据→GROUPBY分组→聚合计算→HAVING过滤分组结果;4.效率:优先用WHERE过滤无效数据,减少分组数据量,提升整体执行效率,避免大量无用数据分组。3、Oracle分页查询的标准写法,以及优缺点?参考答案:Oracle无LIMIT关键字,分页依赖ROWNUM伪列,分为普通分页和高效分页:1.基础分页(适合小数据量):SELECT*FROM(SELECTt.*,ROWNUMrnFROM表名tWHEREROWNUM<=结束行号)WHERErn>起始行号;2.高效分页(百万级大数据量,推荐):SELECT*FROM(SELECTt.*,ROWNUMrnFROM表名tORDERBY排序字段)WHERErnBETWEEN起始行AND结束行;优缺点:-基础分页:写法简单,大数据量越往后分页越慢,需要全表扫描统计行号;-嵌套排序分页:配合索引可大幅提升效率,是生产环境标准分页写法。注意:ROWNUM是动态生成的伪列,必须嵌套查询才能实现区间分页,直接写ROWNUMBETWEEN10AND20查询无效。三、事务与锁机制(核心难点)1、Oracle事务的四大特性及隔离级别?参考答案:四大特性(ACID):1.原子性:事务要么全部执行成功,要么全部回滚,不可部分执行;2.一致性:事务执行前后,数据库数据完整性约束不变;3.隔离性:多个事务并发执行时,相互独立、互不干扰;4.持久性:事务提交后,数据永久落地磁盘,宕机不丢失。Oracle支持的隔离级别(仅3种):1.读已提交(默认):只能读取其他事务已提交的数据,避免脏读,允许不可重复读、幻读;2.可重复读:保障同一事务内多次读取同一数据结果一致,避免脏读、不可重复读,允许幻读;3.串行化:最高隔离级别,事务串行执行,杜绝所有并发问题,性能最差。2、Oracle常见锁类型,行锁和表锁的区别?参考答案:1.按锁粒度分类:行级锁、表级锁行锁:DML操作(INSERT、UPDATE、DELETE)默认触发,只锁定修改的单行数据,其他行可正常读写,并发性能高;事务提交或回滚后自动释放。表锁:锁定整张数据表,所有会话无法修改表数据,并发性能极低。常见场景:手动执行LOCKTABLE、DDL操作、行锁升级(极少出现)。2.按锁模式分类:共享锁(读锁)、排他锁(写锁)-共享锁:多个会话可同时加读锁,互不阻塞;-排他锁:写锁,一个会话加排他锁后,其他会话无法加任何锁,读写均阻塞。3、什么是死锁?如何排查和解决死锁?参考答案:死锁是两个或多个事务互相持有对方需要的锁,同时等待对方释放锁,导致事务永久阻塞的现象。产生条件:互斥条件、请求保持条件、不可剥夺条件、循环等待条件。排查方式:1.查看Oracle告警日志,定位死锁时间、会话、SQL语句;2.通过数据字典查询阻塞会话:v$lock、v$session、v$sql。解决方式:1.紧急处理:kill阻塞会话,终止死锁循环;2.根治优化:统一业务SQL执行顺序、缩短事务执行时间、避免长事务、合理加锁。四、索引原理与优化(面试重点)1、Oracle常用索引类型及适用场景?参考答案:1.B树索引(默认索引):最常用,适合等值查询、范围查询(><、BETWEEN),有序存储,查询效率稳定;2.唯一索引:约束字段唯一,禁止重复数据,同时提升等值查询效率;3.复合索引:多个字段联合索引,遵循最左前缀原则,适合多字段联合查询场景;4.函数索引:针对字段函数运算查询(如UPPER、SUBSTR),避免查询时索引失效;5.位图索引:适合低基数列(性别、状态、类型),数据重复度高、更新少的场景,不适合频繁更新的字段;6.全文索引:适合模糊查询、文本检索场景。2、索引失效的常见场景(高频考点)?参考答案:1.违背最左前缀原则:复合索引查询未使用首列字段;2.索引列参与运算、使用函数:如WHERESUBSTR(name,1,2)='张三'、WHEREage+10>20;3.使用!=、<>、NOTIN、ISNULL/ISNOTNULL;4.字符类型字段传入数值、数值类型传入字符(隐式类型转换);5.OR连接非索引字段,未对所有字段建立索引;6.数据表数据量小、全表扫描成本低于索引扫描,优化器自动放弃索引;7.索引失效、索引碎片过多、索引未重建。3、索引越多越好吗?为什么?参考答案:不是,索引是查询提速、增删改降速的机制。1.优势:查询时通过索引快速定位数据,减少IO,提升查询效率;2.弊端:新增、修改、删除数据时,不仅要更新表数据,还要同步更新所有关联索引,索引越多,DML操作开销越大,性能越差;同时索引会占用磁盘和内存空间。生产原则:查询频繁、增改少的字段建索引;主键、唯一字段必建索引;频繁更新、基数极低的字段不建索引。五、SQL优化与执行计划1、如何查看SQL执行计划?执行计划核心关注点?参考答案:查看方式:2.PL/SQLDeveloper、Navicat等工具直接查看执行计划面板;3.通过v$sql_plan数据字典查看历史SQL执行计划。核心关注点:1.访问方式:优先索引扫描(INDEXUNIQUESCAN、INDEXRANGESCAN),避免全表扫描(TABLEFULLSCAN);2.连接方式:大表小表关联优先HASHJOIN,中等数据量用MERGEJOIN,小数据量用NESTEDLOOP;3.执行成本、行数、耗时,定位高开销步骤;4.是否存在排序、笛卡尔积、无效关联。2、大表SQL优化的通用思路?参考答案:1.优先优化索引:根据查询条件建立合适索引,修复索引失效问题;2.精简查询范围:用WHERE提前过滤无效数据,避免全表扫描、全量分组;3.避免低效语法:杜绝SELECT*、杜绝大量DISTINCT去重、减少复杂子查询嵌套;4.优化表关联:小表驱动大表,合理选择关联方式,避免笛卡尔积;5.拆分复杂SQL:将多逻辑嵌套SQL拆分为分步查询、临时表查询;6.大数据量表优化:分区表、定期清理历史数据、重建索引减少碎片;7.合理使用绑定变量,避免硬解析,提升SQL复用率。六、备份恢复与运维实操1、Oracle常用备份方式及区别?参考答案:1.逻辑备份(exp/expdp):导出SQL逻辑数据,备份文件小、跨平台,适合小批量数据、迁移、备份表结构和数据;缺点是不备份日志、控制文件,无法实现增量备份,恢复速度慢。2.物理备份(RMAN):生产主流备份方式,直接备份物理数据文件、日志、控制文件;支持全量备份、增量备份、差异备份,支持断点续备、压缩备份,恢复速度快,可实现时间点恢复,保障数据安全。3.热备份:数据库运行状态下备份,不影响业务,适合7*24小时不停机系统;4.冷备份:数据库关闭后备份,数据一致性高,但需要停机,适合低业务场景。2、归档日志的作用?是否可以关闭归档?参考答案:归档日志作用:联机重做日志循环覆盖,归档日志会将覆盖前的日志持久化保存,结合全量备份,可实现任意时间点数据恢复,是数据库数据安全、容灾恢复的核心依据,同时支撑数据同步、DG灾备架构。是否可关闭:可以关闭,但生产环境严禁关闭。关闭归档后,只能恢复到最后一次全量备份时间点,备份后的数据全部丢失,无法实现增量恢复和时间点恢复。仅测试环境、临时数据库可关闭归档。3、数据库宕机后,实例恢复的原理?参考答案:Oracle异常宕机后,下次启动会自动触发SMON进程进行实例恢复,基于重做日志完成,分为三步:1.前滚(REDO):读取重做日志,将已提交但未写入数据文件的脏数据,重新写入数据文件,恢复数据一致性;2.回滚(UNDO):回滚未提交的事务,撤销宕机时正在执行的未完成操作;3.释放资源:清理临时段、解除锁阻塞,数据库正常启动对外提供服务。七、高频实操简答题(综合面试)1、什么是硬解析和软解析?如何减少硬解析?参考答案:1.硬解析:数据库首次执行SQL,需要进行语法校验、语义解析、权限校验、生成执行计划,消耗大量CPU和内存资源,性能开销大;2.软解析:SQL语句之前执行过,共享池中存在相同SQL的执行计划,直接复用,无需重新解析,性能极高;减少硬解析方案:-统一SQL编写规范,杜绝大小写、空格、后缀差异导致的SQL不一致;-优先使用绑定变量,替换硬编码常量;-合理设置共享池大小,保障执行计划缓存空间;-避免频繁执行临时、一次性SQL。2、临时表的作用及特点?参考答案:特点:临时表数据仅在会话或事务生命周期内有效,会话结束、事务提交后数据自动清空,表结构永久保留,数据不落地磁盘,独占临时表空间。分类:1.事务级临时表:事务提交/回滚后清空数据;2.会话级临时表:当前会话有效,退出会话清空数据。作用:存储中间计算结果、拆分复杂查询、批量数据临时处理,减少大表重复查询,提升S

温馨提示

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

评论

0/150

提交评论