暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle DBA 知识点

lh11811 2025-03-06
166
    Oracle数据库作为企业级数据管理的核心工具,一直是数据库领域的重要支柱。无论是初入职场的数据库新手,还是正在向中级DBA迈进的技术人员,掌握扎实的Oracle数据库基础知识和核心技能都是必不可少的。然而,面对繁杂的技术知识点和不断更新的面试要求,许多Oracle DBA求职者常常感到无从下手。别担心!这篇文章将为你提供一份全面且实用的Oracle初中级DBA知识清单。如果你能背会这些知识点,相信你将能够轻松应对面试,顺利“上岸”,开启你的数据库管理职业生涯!

数据库基础概念及机制

1. Oracle对外提供服务的IP是什么? Oracle对外服务IP可以是监听配置所指定的服务器IP地址或者VIP(虚拟IP)。监听服务通过这些IP监听客户端连接请求,默认端口是1521。一个Oracle实例可能有多个IP地址提供服务,以实现高可用性和负载均衡,比如在RAC环境中会有虚拟IP和公共IP等。

2. Oracle RAC脑裂机制是什么? 脑裂指集群中不同节点对集群状态判断不一致。Oracle RAC通过以下方式避免和处理脑裂:

  • 共享存储仲裁:利用共享磁盘仲裁机制,多个节点竞争对共享磁盘的控制权,获胜的节点集继续运行,失败的节点集被关闭。
  • Voting Disk:存储集群成员信息,节点通过Voting Disk判断是否可以继续留在集群中,若某个节点与此Disk失去连接次数超过阈值就会被踢出集群。

3. Oracle数据泵与RMAN的区别?

  • 数据泵(Data Pump):用于逻辑备份和恢复,备份和恢复的是数据库中的逻辑对象,如表、模式等,适合将对象从一个数据库传输到另一个,可控制粒度细,但不适用物理故障恢复。
  • RMAN(Recovery Manager):主要用于物理备份和恢复,可备份数据库文件、归档日志等。支持增量备份,在数据库崩溃、数据文件损坏等物理故障恢复方面优势明显。

数据库日志、检查点及相关原理

4. Oracle检查点和Redo检查点是什么?

  • 检查点:是一个数据库事件,当发生时,数据库将脏数据块(内存中已修改但未写入磁盘的数据块)从数据库缓冲高速缓存写入数据文件。它能减少实例恢复时间,保证数据一致性。
  • Redo检查点:触发LGWR(日志写入进程)将重做缓冲区中的所有日志条目写入在线重做日志文件,能保证日志信息完整持久化。

5. Oracle Undo原理是什么? 当执行DML操作时,Undo数据被创建并存储在Undo段中。Undo有两个主要作用:一是用于事务回滚,当事务执行ROLLBACK时,可利用Undo数据将数据恢复到事务开始前的状态;二是提供读一致性,保证在长事务执行过程中,其他会话读取到的数据版本是一致的。

6. Oracle归档日志和在线日志原理是什么?

  • 归档日志:是对在线重做日志的备份。当在线重做日志写满时,LGWR进程将日志内容切换到下一组在线重做日志,同时ARCn进程(归档进程)会将已满的在线重做日志进行备份并存放于归档日志文件中,用于数据库崩溃后恢复到故障点。
  • 在线日志:由多个日志组组成,每个日志组又包含多个日志成员,主要记录数据库中所有的更改操作。LGWR进程会将重做缓冲区中的日志条目连续写入在线日志组。

备份与恢复

7. Oracle RMAN有哪些优点?

  • 自动化备份与恢复:可按设置的时间计划执行备份和恢复任务。
  • 增量备份:只备份自上次备份以来发生变化的数据块,减少备份时间和存储开销。
  • 可靠性高:能处理各种故障场景下的恢复,如冷备份、热备份、实例失败恢复等。
  • 支持压缩:可减少备份文件占用的空间。

8. Oracle RMAN压缩空块是自动的吗? 在RMAN中,压缩空块不是自动的。需要在备份脚本中使用DBMS_BACKUP_RESTORE.PingEmptyBlocks参数或者在备份命令中指定COMPRESSION参数来启用空块压缩功能,这样能排除备份集中的空数据块,节省存储空间和备份时间。

9. 没有备份的情况下,Oracle数据丢了如何恢复? 在无备份情况下,恢复数据极为困难,但可尝试:

  • 利用Undo段:如果数据删除或修改时间不久,可通过Flashback技术结合Undo数据将数据恢复到之前状态。
  • 利用日志:若还有在线日志或尚未覆盖的归档日志,可分析日志中的SQL语句来重建部分数据。

10. Oracle RMAN恢复数据库的过程是怎样的?

  • 确认故障类型:确定数据库是实例故障、介质故障还是其他类型故障。
  • 启动恢复会话:使用RMAN连接到目标数据库实例。
  • 还原数据文件:根据备份集将数据文件从备份位置复制到数据库原来位置。
  • 应用归档日志及联机日志:使用RECOVER命令应用归档日志和联机日志,将数据库恢复到指定时间点或最新状态。
  • 打开数据库:在恢复完成后,使用恰当的命令打开数据库。

SQL执行及优化

11. Oracle Update执行过程是怎样的?

  • 解析SQL语句:检查语法并生成执行计划。
  • 获取所需资源:如锁资源,防止其他事务同时修改相同数据。
  • 生成Undo数据:记录数据修改前的状态到Undo段。
  • 修改数据块:在数据库缓冲区缓存中修改对应的数据块。
  • 记录Redo日志:将修改信息记录到重做缓冲区,然后由LGWR进程写到在线重做日志。
  • 将脏数据块写入磁盘:后续由检查点机制将已修改的数据块写入数据文件。

12. Oracle写入数据过程是怎样的? 客户端将SQL语句发送到服务器,服务器端首先解析该语句,对于INSERT操作,会检查约束条件,生成Undo数据,将插入的数据放到数据库缓冲高速缓存的数据块中,然后将该修改操作记录到重做缓冲区,LGWR进程将该操作从重做缓冲区写入在线重做日志。最后,在合适的时机,检查点机制会将缓存中修改后的脏数据块刷新到数据文件。

13. Oracle SQL执行慢如何解决?

  • 分析执行计划:用EXPLAIN PLAN FOR语句查看SQL执行计划,找出耗时操作。
  • 索引优化:评估是否有合适的索引改善查询效率,若没有合适的索引可以考虑创建索引;若已有索引但未使用,检查索引是否失效或统计信息是否过时。
  • 统计信息更新:使用DBMS_STATS包更新表和索引的统计信息,使优化器生成更优执行计划。
  • 代码优化:避免使用函数索引、避免全表扫描、减少嵌套查询等。

14. 如何查看Oracle SQL执行计划? 常见方式有两种:

  • 使用EXPLAIN PLAN FOR:如“EXPLAIN PLAN FOR SELECT * FROM table_name;”,之后用“SELECT * FROM TABLE(DBMS_XPLAN.DISPLAY);”查看执行计划。
  • 使用SQL Developer软件查看:在SQL窗口执行SQL语句后,右键点击结果,选择“解释计划”查看。

数据库故障处理

15. Oracle停电后无法启动怎么办?

  • 检查服务器硬件:确保服务器电源正常、硬件无损坏,检查存储设备连接。
  • 检查监听服务:使用lsnrctl status查看监听状态,若未启动,使用lsnrctl start启动。
  • 检查告警日志:在$ORACLE_BASE/diag/rdbms/<db_name>/<instance_name>/trace/alert_<instance_name>.log中查看详细错误信息,根据信息排查原因。
  • 启动数据库:属于正常关闭则可使用SQL*Plus登录后“STARTUP”启动;异常关闭可“STARTUP NORMAL”或根据情况选择“STARTUP MOUNT”修复问题后再打开数据库。

16. Oracle爆ORA - xxx错误如何解决? 可按以下步骤解决:

  • 查看告警日志:在指定位置找到告警日志文件,搜索对应错误编号获取详细错误信息和提示。
  • 查找MOS文档:在My Oracle Support网站搜索错误编号,获取解决步骤与案例。
  • 社区求助:在Oracle官方论坛或相关技术社区分享错误信息与环境情况求助。

数据库对象相关

17. Oracle游标的分类有哪些?

  • 隐式游标:Oracle自动管理,当执行SQL语句时自动创建,如INSERT、UPDATE、DELETE等操作时系统默认创建的游标,可通过SQL%ROWCOUNT等属性获取一些执行信息。
  • 显式游标:由开发者自己定义和管理,用于处理多行查询结果,需要经过定义、打开、 Fetch(提取)、关闭操作。

18. Oracle都有哪些索引,作用是什么?

  • B - 树索引:最常用索引类型,适合等值查询和范围查询,按键值排序并分层存储以提高查询效率。
  • 位图索引:适合低基数列(值种类较少),采用位图方式存储,节省空间,但并发操作性能不佳。
  • 函数索引:基于函数或表达式创建,对于在查询条件中使用函数的情况,可提高查询效率。

19. Oracle绑定变量会不会导致SQL注入,原理是什么? 绑定变量不会导致SQL注入。绑定变量是将用户输入的数据通过占位符方式传入SQL语句。Oracle解析SQL语句时,只对SQL结构进行解析而不考虑变量值,在执行时将变量值代入。攻击者无法通过构造

数据库原理与机制

20. MVCC的实现原理是什么? MVCC(多版本并发控制)通过保存数据的历史版本实现读写操作的并发执行。其核心机制包括:

  • 每个事务开始时分配唯一时间戳(SCN),数据修改时保留旧版本,并记录版本的有效时间范围。
  • 查询时基于事务SCN读取对应时间点的数据快照,避免锁定资源,提高并发性。
  • Undo段存储旧数据版本,用于回滚和一致性读。1

21. PGA与SGA的组成与作用是什么?

  • PGA(程序全局区):每个会话私有内存,包含排序区、会话变量等,用于SQL执行时的内存操作。

  • SGA(系统全局区)

    :共享内存区,由多个组件构成:

    • Buffer Cache:缓存数据块,减少物理I/O。
    • Shared Pool:存储SQL语句、执行计划等共享信息。
    • Redo Log Buffer:临时存储重做日志条目。
    • Large Pool:用于备份恢复、并行查询的大内存请求。15

22. Oracle内存结构包含哪些部分?

  • SGA:共享内存区,如上所述。
  • PGA:私有内存区。
  • Streams Pool:支持数据流复制的内存区域。
  • Java Pool:存储Java虚拟机相关数据。5

23. Oracle ASM如何在线扩容? 步骤:

  1. 向存储添加新磁盘。
  2. 使用ALTER DISKGROUP ADD DISK命令将新磁盘加入ASM磁盘组。
  3. ASM自动重新平衡数据分布到新磁盘,无需停机。1

24. 如何恢复Oracle数据坏块?

  • 使用RMAN检测坏块:VALIDATE DATABASE
  • 恢复方法:
    • 物理恢复:通过备份还原损坏文件(需有效备份)。
    • 逻辑恢复:导出未损坏数据,重建表(无备份时)。
    • 启用块介质恢复(BMR):RECOVER BLOCK命令(需Oracle Advanced Compression选项)。3

高可用与存储技术

25. DG(Data Guard)的分类与原理是什么?

  • 物理Standby:通过Redo Apply同步,与主库物理结构一致,支持只读查询。
  • 逻辑Standby:通过SQL Apply同步,允许修改逻辑结构(如表结构)。
  • 原理:主库传输归档日志到备库,备库应用日志保持数据同步,实现故障切换。1

26. 物化视图与普通视图的区别?

  • 物化视图:存储实际数据,支持索引和刷新机制(完全/增量刷新),用于预计算复杂查询。
  • 普通视图:仅保存SQL定义,查询时动态生成结果。5

27. RAID 5与RAID 10的区别?

  • RAID 5:条带化+奇偶校验,至少3块盘,允许1块盘故障,写入性能较低(需计算奇偶校验)。
  • RAID 10:镜像+条带化,至少4块盘,允许多盘故障(每组镜像中至少1块存活),读写性能高。

服务器与Linux操作

28. Linux如何查看内存使用情况?

  • free -h:显示内存总量、已用、空闲信息。
  • tophtop:动态查看进程内存占用。

29. 如何查看Linux硬盘使用情况?

  • df -h:显示磁盘分区使用情况。
  • du -sh /path:查看指定目录的磁盘占用。

30. 如何在Linux上执行Shell脚本?

  • 添加执行权限:chmod +x script.sh 。
  • 执行脚本:./script.sh 或bash script.sh 。

31. 如何在屏幕上打印“Hello World”?

  • Shell脚本:echo "Hello World"
  • Python:print("Hello World")

32. 查看Linux日志的四种方式?

  1. tail -f /var/log/messages:实时跟踪日志。
  2. grep "error" /var/log/syslog:过滤关键字。
  3. journalctl:查看systemd日志。
  4. dmesg:查看内核日志。

高级问题补充

33. 绑定变量如何避免SQL注入? 绑定变量通过预编译机制分离SQL结构与参数值,攻击者无法通过输入改变SQL逻辑(如WHERE id = :1,参数值会被视为字面值而非代码)。1

34. AWR报告中哪些数据关键?

  • DB Time:数据库处理请求的总时间。
  • Top SQL:高负载或低效SQL。
  • 等待事件:如db file sequential read(索引扫描等待)。
  • 内存与I/O负载:Buffer命中率、物理读/写量。

35. 同一条SQL正式环境比测试快的原因?

  • 数据量差异:测试环境数据量小,可能无法触发索引。
  • 统计信息过时:测试环境未更新统计信息,导致优化器选择低效计划。
  • 硬件差异:正式环境使用更高性能的存储或CPU。

36. 数据相同但查询结果时有时无?

  • 未提交事务:其他会话修改数据未提交,当前会话读Undo数据。
  • 隔离级别:如READ COMMITTED可能读到中间状态。
  • 并行DML冲突:高并发下数据版本不一致。
通过以上对Oracle数据库基础概念、备份恢复、性能优化、高可用技术等关键领域的梳理,我们为你呈现了一份完整的初中级DBA学习指南。这些知识点不仅涵盖了面试中常见的问题,更是日常工作中必备的技能。记住,学习Oracle数据库并非一蹴而就,而是需要不断积累和实践的过程。希望这篇文章能够成为你上岸路上的坚实助力。最后,祝你在Oracle DBA的道路上越走越远,早日实现职业目标,开启属于你的技术新征程!
「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论