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

使用DeepSeek解答数据库笔试题

点击上方蓝字,关注我们


想学会更多实用技巧,欢迎加入青学会MOP技术社区(实名社区)。

加入方法:公众号后台回复关键字“加入”获取小助手微信,添加后登记入会。

同时欢迎大家在评论区留言互动交流!社区会不定期举行相关的抽奖、公开分享活动。

如果你有想了解的知识点希望我们发文可以后台私信。

最近联合几个 Oracle ACE技术专家 开通了一个付费微信群,都是具有10多年金融、医疗、制造业10年以上的一线专家,坑位费399/人,无限期,目前群内近155。加群后会有一些福利(分享各类技术文档,干货资源,问题解答等等),更有特邀嘉宾会定期在群内直播,解读AWR,快问快答等!有问题我们尽量都解答,毕竟399不能都解决所有问题。有兴趣联系微:ywu0613

内部知识库正在筹建中,不止有oracle!

正文开始

使用DeepSeek解答一下数据库的笔试题,今天的内容主要围绕Oracle数据库的核心操作、问题解决、性能优化以及数据迁移等方面展开,旨在为大家提供一份全面、实用的数据库管理指南。

Oracle集群/单机的启动与停止操作步骤

集群启动:

  1. 启动CRS服务:crsctl start crs
  2. 启动数据库实例:srvctl start database -d <db_name>
  3. 检查状态:crsctl stat res -t

单机启动:

  1. 启动监听:lsnrctl start
  2. 启动数据库:sqlplus as sysdba
     → startup
  3. 停止数据库:shutdown immediate

数据库实例故障分析与HANG处理

分析思路:

  1. 检查告警日志(alert.log
  2. 查看HANG分析工具(Hanganalyze、Systemstate)
  3. 分析等待事件(v$session_wait
  4. 检查锁争用(v$locked_object

HANG处理:

  • 执行Hanganalyze:oradebug hanganalyze 3
  • 生成系统状态转储:oradebug dump systemstate 266
  • 终止阻塞会话(谨慎操作)

监听日志日常维护注意事项

  1. 定期清理:避免日志过大(手动或脚本轮转)。
  2. 监控日志内容:排查连接失败、TNS错误。
  3. 日志路径检查:确保磁盘空间充足。
  4. 安全权限:仅允许DBA访问监听日志文件。

Oracle数据块Block结构

数据块由块头(元数据)、表目录(对象信息)、行目录(行位置)、行数据(实际存储)、空闲空间组成。块头包含SCN和事务槽,用于并发控制。


DBWR进程的工作方式与触发机制

工作方式
DBWR将脏块从Buffer Cache写入数据文件,采用批量写入机制。

触发条件

  1. 检查点触发(CKPT)
  2. Buffer Cache空间不足
  3. 超时机制(每3秒)
  4. 表空间热备份模式(begin backup

Latch争用与Library Cache Lock处理

Latch争用原因
高频短时资源竞争(如共享池、Buffer Cache访问)。

Library Cache Lock处理

  • 原因:对象DDL操作或硬解析冲突。
  • 解决方法
    1. 定位阻塞会话:v$session
      v$lock
    2. 终止阻塞进程或优化SQL减少硬解析。

B-Tree与B+Tree区别及数据库选择

B-Tree

  • 所有节点存储数据,适合随机查询。
  • Oracle使用B-Tree索引(支持行级锁,事务友好)。

B+Tree

  • 数据仅存于叶子节点,叶子链表连接,适合范围查询。
  • MySQL选择B+Tree(InnoDB引擎,范围扫描高效,减少磁盘I/O)。

二叉树

  • 每个节点最多两子节点,易倾斜,不适用于数据库索引。

事务特性与隔离级别

ACID特性:原子性、一致性、隔离性、持久性。

隔离级别

  • Oracle默认READ COMMITTED
    (通过Undo实现)
  • MySQL默认REPEATABLE READ
    (通过MVCC)

问题区别

  • 脏读:读到未提交数据。
  • 不可重复读:同一事务多次读取结果不同。
  • 幻读:范围查询出现新行。

实现差异
Oracle使用Undo段+多版本控制,MySQL通过Undo日志+Read View实现MVCC。


Commit与Rollback实现原理

  • Commit

    1. 将Redo Log Buffer写入磁盘(LGWR)
    2. 释放锁,标记事务为已提交(SCN更新)
  • Rollback

    1. 使用Undo段前镜像恢复数据
    2. 释放锁,清理事务槽

Oracle死锁分类与解决

死锁类型

  • 行级死锁:会话互相等待对方持有的行锁。
  • ITL死锁:事务槽(ITL)争用。

解决方法

  1. 自动检测:Oracle自动终止其中一个会话。
  2. 手动处理:通过v$session
    v$lock
    定位后终止会话。

Oracle与MySQL锁机制对比

Oracle

  • 行级锁+多版本控制,无锁读(默认READ COMMITTED
    )。

MySQL

  • 行级锁(InnoDB)+表级锁(MyISAM),通过意向锁管理。

悲观锁
显式加锁(如SELECT ... FOR UPDATE
),假设高并发冲突。

乐观锁
通过版本号或时间戳控制(应用层实现)。


UNDO作用与CR块构造

UNDO作用

  • 事务回滚
  • 提供一致性读(前镜像)
  • 实现多版本控制(MVCC)

前镜像
事务修改前的数据副本,存储在Undo段中。

CR块构造
通过Undo段重建一致性读块,确保查询看到事务开始时的数据状态。


UNDO表空间损坏处理

数据库可启动

  1. 新建Undo表空间:CREATE UNDO TABLESPACE ...
  2. 切换默认Undo:ALTER SYSTEM SET UNDO_TABLESPACE=...
  3. 删除损坏的Undo表空间。

数据库不可启动

  1. 启动到mount状态
  2. 通过隐含参数跳过Undo校验:_OFFLINE_ROLLBACK_SEGMENTS
  3. 重建Undo表空间。

ORA-01555快照过旧处理

原因
查询执行时间过长,所需Undo信息被覆盖。

解决

  1. 优化长事务,减少查询时间。
  2. 增大Undo表空间或调整UNDO_RETENTION
  3. 使用闪回查询(Flashback Query)。

表空间100%处理方案

  1. 紧急扩容

    ALTER DATABASE DATAFILE 'file_path' RESIZE 10G;

  2. 清理无用对象
    归档旧数据,删除临时表。

  3. 启用自动扩展

    ALTER DATABASE DATAFILE 'file_path' AUTOEXTEND ON NEXT 1G;

  4. 监控与预防
    部署表空间使用率告警,定期维护。


数据库启动阶段与Redo/Undo作用

启动阶段

  1. NOMOUNT:读取参数文件,启动实例。
  2. MOUNT:打开控制文件。
  3. OPEN:检查数据文件一致性,应用Redo前滚,利用Undo回滚未提交事务。

Redo作用:恢复已提交但未写入数据文件的事务。
Undo作用:回滚未提交事务,确保数据一致性。


字符集迁移方案(GBK→UTF8)

  1. 检查兼容性
    NLS_CHARACTERSET
    是否支持目标字符集。

  2. 导出数据
    使用expdp
    或数据泵导出。

  3. 转换字符集

    ALTER DATABASE CHARACTER SET INTERNAL_USE UTF8;

  4. 导入数据
    使用impdp
    导入并验证数据完整性。


Commit数据持久化机制

  • Commit后数据是否写入数据文件
    不一定,但Redo日志已持久化(LGWR写入)。

  • 未Commit的数据
    可能通过DBWR写入数据文件,但事务未提交前可回滚。

  • Commit后数据丢失
    除非Redo日志损坏且未归档,否则不会丢失。


Redo Log Buffer与LGWR机制

Redo Log Buffer
循环缓存区,存储事务修改的Redo条目。

LGWR触发条件

  1. 事务提交时
  2. Redo Buffer满1/3
  3. 每隔3秒
  4. DBWR写入前(确保先记日志)

DBWR与CKPT协作

DBWR
负责将脏块写入数据文件,批量写入以减少I/O。

CKPT
触发DBWR写入,更新控制文件和数据文件头部的检查点信息(SCN)。


重做日志性能问题处理

  1. 日志文件组不足:增加日志组,调整大小。
  2. I/O瓶颈:分离日志文件到独立磁盘。
  3. 频繁日志切换:增大日志文件大小。

Resetlogs与NoResetlogs区别

  • Resetlogs
    重置日志序列号,强制打开数据库(不完全恢复后必须使用)。

  • NoResetlogs
    保留原有日志序列号(仅用于完全恢复)。


数据库安全漏洞处理

  1. 定期应用PSU补丁。
  2. 禁用默认账户,限制权限。
  3. 启用审计,加密敏感数据。
  4. 部署防火墙与入侵检测系统。

深入研究Oracle的方向

  • 内核机制:Buffer Cache、Latch原理
  • 高可用架构:RAC、Data Guard
  • 性能优化:SQL调优、AWR分析
  • 备份恢复:RMAN、闪回技术

数据库坏块处理

坏块分类

  • 物理坏块(磁盘损坏)
  • 逻辑坏块(校验和错误)

场景1(数据库运行中)

  1. 使用RMAN
    检测坏块:

    BACKUP VALIDATE CHECK LOGICAL DATABASE;

  2. 恢复数据:

    BLOCKRECOVER DATAFILE 5 BLOCK 20;

场景2(数据库宕机)

  1. 启动到mount状态。
  2. 使用RMAN
    恢复损坏文件。
  3. 若无法恢复,通过备份重建数据文件。

数据库异机恢复演练

物理恢复

  1. 使用RMAN备份集恢复到异机。
  2. 恢复控制文件、数据文件、日志文件。

逻辑恢复

  1. 使用expdp
    导出源库数据。
  2. 在目标库创建表空间和用户。
  3. 使用impdp
    导入数据。

数据迁移方案

同平台迁移

  • RMAN
    DUPLICATE DATABASE
    直接克隆。
  • 数据泵
    导出/导入元数据与数据。

跨平台迁移

  • 传输表空间
    转换字节序(RMAN CONVERT
    )。
  • 逻辑导出
    使用数据泵导出为跨平台格式。

单机迁移到RAC方案

  1. 环境准备
    部署共享存储(ASM)、安装Grid组件。
  2. 数据迁移
    使用RMAN备份恢复或数据泵导出导入。
  3. 配置RAC
    添加实例,配置负载均衡与故障转移。

ASM误建文件到文件系统处理

  1. 创建ASM磁盘组(若未存在)。

  2. 将文件移动到ASM路径:

    ALTER DATABASE MOVE DATAFILE 'fs_path' TO '+DATA';

  3. 更新控制文件记录。


SQL性能优化步骤

  1. AWR分析:定位高负载SQL。

  2. 执行计划调优:使用DBMS_XPLAN

  3. 索引优化:添加缺失索引或重建索引。

  4. 统计信息更新

    EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA','TABLE');

  5. 调整自动任务窗口

    EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(...);


索引类型对比(B-Tree vs 位图)

B-Tree索引

  • 适合高基数列(唯一值多),OLTP场景。
  • 1000W表查询:等值查询快,支持范围扫描。

位图索引

  • 适合低基数列(重复值多),OLAP场景。
  • 1000W表查询:多列组合查询高效,但DML性能差。

函数索引

  • 对列应用函数后的结果建立索引,优化特定条件查询。
老铁们,感觉靠谱吗?欢迎评论区留言。




END

往期文章回顾

MOP社区新闻

  青学会MOP技术社区成立了!

  青学会专家顾问团成员介绍

金仓专栏

  告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)

  KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)

  KingbaseES数据脱敏-青学会&金仓专栏(3)

  KingbaseES后台服务管理-青学会&金仓专栏(4)

  电科金仓KES日常运维命令集锦-青学会&金仓专栏(5)

DBA实战小技巧

  推荐一款超实用的openGauss数据库安装工具!

  实战:记一次RAC故障排查
  DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
  DBA实战运维小技巧存储篇(一)根目录满了如何处理
  DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储

MOP社区投稿-内核开发

  浅谈 PostgreSQL GUC 模块原理

  简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理

  简单讨论 PostgreSQL C语言拓展函数返回数据表的方式

  简单分析 pg_config 程序的作用与原理
  Redis 日志机制简介(一):SlowLog
  Redis 日志机制简介(二):AOF 日志
  Redis 日志机制简介(三):RDB 日志
  pg_cron插件使用介绍
  Redis 的指令表实现机制简介
  pg几款源码工具介绍
  Redis 事务功能简介

MOP顾问说

   MOP顾问说:MOP 三种主流数据库常用 SQL(一)

  MOP顾问说: 服务器内存

  MOP 顾问说:Linux Nice 值与 CPU 优先级揭秘


文章转载自青年数据库学习互助会,如果涉嫌侵权,请发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

评论