Oracle 面试必问真题及实战答案.docxVIP

  1. 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
  2. 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载
  3. 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
  4. 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
  5. 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们
  6. 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
  7. 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多

Oracle面试必问真题及实战答案

一、基础语法与数据类型

问:Oracle中VARCHAR2和CHAR的区别?实际开发中怎么选?

答:核心区别在存储方式和填充规则。CHAR是固定长度,比如定义CHAR(10),即使存3个字符,也会用空格填充到10字节,查询时需注意trim();VARCHAR2是可变长度,存多少占多少,还会额外占1-2字节记录长度。选的时候看业务:固定长度的字段(比如手机号、身份证号)用CHAR,查询效率更高;长度不固定的(比如姓名、地址)用VARCHAR2,节省存储空间。另外要注意,VARCHAR2在Oracle中最大长度4000字节(非UTF-8编码),如果超了要选CLOB类型。

问:Oracle分页查询的两种常用方式,以及各自的适用场景?

答:最常用的是“rownum嵌套”和“row_number()分析函数”。

rownum嵌套:适合简单分页,比如select*from(selectt.*,rownumrnfrom表twhererownum=20)wherern=11,优点是效率高,适合数据量不大或有明确条件过滤的场景;缺点是不能直接对rownum用,必须嵌套一层。

row_number():适合需要排序的分页,比如select*from(selectt.*,row_number()over(orderbyiddesc)rnfrom表t)wherernbetween11and20,优点是支持复杂排序,分页逻辑清晰;缺点是数据量极大时(千万级),效率比rownum稍低,建议给排序字段建索引。

二、事务与锁机制

问:Oracle事务的ACID特性分别是什么?实际开发中如何避免事务长时间未提交?

答:ACID是原子性(要么全成要么全回滚)、一致性(事务前后数据符合业务规则,比如转账后总金额不变)、隔离性(多个事务并发不干扰)、持久性(提交后数据永久保存)。

避免长事务的方法:①业务逻辑拆分,比如批量插入时分批提交(每1000条commit一次);②避免在事务中调用外部接口(比如HTTP调用、文件上传),接口响应慢会卡住事务;③及时捕获异常并回滚,防止代码报错后事务挂起;④数据库层面设置事务超时参数(比如ALTERPROFILEDEFAULTLIMITIDLE_TIME30,空闲30分钟自动断开)。

问:Oracle中有哪些锁类型?行锁和表锁的触发场景,以及如何排查锁等待问题?

答:主要分行级锁(ROWLOCK)和表级锁(TABLELOCK),还有共享锁(S)、排他锁(X)等细分类型。

触发场景:行锁是DML操作(insert/update/delete)默认触发,只锁满足条件的行;表锁是DDL操作(create/alter/drop)默认触发,会锁整个表,还有不带条件的update/delete(比如deletefrom表)也会升级为表锁。

排查锁等待:①查锁持有情况:selects.sid,s.serial#,o.object_name,l.locked_modefromv$locked_objectl,dba_objectso,v$sessionswherel.object_id=o.object_idandl.session_id=s.sid;②查等待链:select*fromv$session_waitwherewait_class!=Idleandeventlike%lock%;③释放锁:如果是异常锁,用altersystemkillsessionsid,serial#杀会话(需要权限)。

三、性能优化

问:Oracle索引的类型有哪些?什么时候建索引,什么时候不建?

答:常用索引:B树索引(默认,适合等值查询、范围查询)、位图索引(适合低基数列,比如性别、状态,查询快但DML慢)、函数索引(比如upper(name)经常作为查询条件时)、分区索引(对应分区表)。

建索引场景:①经常作为where条件、join条件的列;②排序字段(orderby/groupby);③基数高的列(比如身份证号、手机号,区分度高)。

不建索引场景:①表数据量小(比如少于1万条,全表扫描更快);②经常被更新、删除的列(索引会频繁维护,影响性能);③低基数列且DML频繁(比如订单表的“是否删除”字段,建位图索引会导致更新阻塞);④查询时用了函数或隐式转换的列(比如whe

文档评论(0)

151****9429 + 关注
实名认证
文档贡献者

该用户很懒,什么也没介绍

1亿VIP精品文档

相关文档