数据库基础概念及机制
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如何在线扩容? 步骤:
向存储添加新磁盘。 使用 ALTER DISKGROUP ADD DISK命令将新磁盘加入ASM磁盘组。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:显示内存总量、已用、空闲信息。top或htop:动态查看进程内存占用。
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日志的四种方式?
tail -f /var/log/messages:实时跟踪日志。grep "error" /var/log/syslog:过滤关键字。journalctl:查看systemd日志。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冲突:高并发下数据版本不一致。




