
想学会更多实用技巧,欢迎加入青学会MOP技术社区(实名社区)。
加入方法:公众号后台回复关键字“加入”获取小助手微信,添加后登记入会。

同时欢迎大家在评论区留言互动交流!社区会不定期举行相关的抽奖、公开分享活动。
如果你有想了解的知识点希望我们发文可以后台私信。
最近联合几个 Oracle ACE技术专家 开通了一个付费微信群,都是具有10多年金融、医疗、制造业10年以上的一线专家,坑位费399/人,无限期,目前群内近155人。加群后会有一些福利(分享各类技术文档,干货资源,问题解答等等),更有特邀嘉宾会定期在群内直播,解读AWR,快问快答等!有问题我们尽量都解答,毕竟399不能都解决所有问题。有兴趣联系微:ywu0613
内部知识库正在筹建中,不止有oracle!

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

Oracle集群/单机的启动与停止操作步骤
集群启动:
启动CRS服务: crsctl start crs启动数据库实例: srvctl start database -d <db_name>检查状态: crsctl stat res -t
单机启动:
启动监听: lsnrctl start启动数据库: sqlplus as sysdba
→startup停止数据库: shutdown immediate
数据库实例故障分析与HANG处理
分析思路:
检查告警日志( alert.log
)查看HANG分析工具(Hanganalyze、Systemstate) 分析等待事件( v$session_wait
)检查锁争用( v$locked_object
)
HANG处理:
执行Hanganalyze: oradebug hanganalyze 3生成系统状态转储: oradebug dump systemstate 266终止阻塞会话(谨慎操作)
监听日志日常维护注意事项
定期清理:避免日志过大(手动或脚本轮转)。 监控日志内容:排查连接失败、TNS错误。 日志路径检查:确保磁盘空间充足。 安全权限:仅允许DBA访问监听日志文件。
Oracle数据块Block结构
数据块由块头(元数据)、表目录(对象信息)、行目录(行位置)、行数据(实际存储)、空闲空间组成。块头包含SCN和事务槽,用于并发控制。
DBWR进程的工作方式与触发机制
工作方式:
DBWR将脏块从Buffer Cache写入数据文件,采用批量写入机制。
触发条件:
检查点触发(CKPT) Buffer Cache空间不足 超时机制(每3秒) 表空间热备份模式( begin backup
)
Latch争用与Library Cache Lock处理
Latch争用原因:
高频短时资源竞争(如共享池、Buffer Cache访问)。
Library Cache Lock处理:
原因:对象DDL操作或硬解析冲突。 解决方法: 定位阻塞会话: v$session
与v$lock终止阻塞进程或优化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:
将Redo Log Buffer写入磁盘(LGWR) 释放锁,标记事务为已提交(SCN更新) Rollback:
使用Undo段前镜像恢复数据 释放锁,清理事务槽
Oracle死锁分类与解决
死锁类型:
行级死锁:会话互相等待对方持有的行锁。 ITL死锁:事务槽(ITL)争用。
解决方法:
自动检测:Oracle自动终止其中一个会话。 手动处理:通过 v$session
和v$lock
定位后终止会话。
Oracle与MySQL锁机制对比
Oracle:
行级锁+多版本控制,无锁读(默认 READ COMMITTED
)。
MySQL:
行级锁(InnoDB)+表级锁(MyISAM),通过意向锁管理。
悲观锁:
显式加锁(如SELECT ... FOR UPDATE
),假设高并发冲突。
乐观锁:
通过版本号或时间戳控制(应用层实现)。
UNDO作用与CR块构造
UNDO作用:
事务回滚 提供一致性读(前镜像) 实现多版本控制(MVCC)
前镜像:
事务修改前的数据副本,存储在Undo段中。
CR块构造:
通过Undo段重建一致性读块,确保查询看到事务开始时的数据状态。
UNDO表空间损坏处理
数据库可启动:
新建Undo表空间: CREATE UNDO TABLESPACE ...切换默认Undo: ALTER SYSTEM SET UNDO_TABLESPACE=...删除损坏的Undo表空间。
数据库不可启动:
启动到mount状态 通过隐含参数跳过Undo校验: _OFFLINE_ROLLBACK_SEGMENTS重建Undo表空间。
ORA-01555快照过旧处理
原因:
查询执行时间过长,所需Undo信息被覆盖。
解决:
优化长事务,减少查询时间。 增大Undo表空间或调整 UNDO_RETENTION
。使用闪回查询(Flashback Query)。
表空间100%处理方案
紧急扩容:
ALTER DATABASE DATAFILE 'file_path' RESIZE 10G;清理无用对象:
归档旧数据,删除临时表。启用自动扩展:
ALTER DATABASE DATAFILE 'file_path' AUTOEXTEND ON NEXT 1G;监控与预防:
部署表空间使用率告警,定期维护。
数据库启动阶段与Redo/Undo作用
启动阶段:
NOMOUNT:读取参数文件,启动实例。 MOUNT:打开控制文件。 OPEN:检查数据文件一致性,应用Redo前滚,利用Undo回滚未提交事务。
Redo作用:恢复已提交但未写入数据文件的事务。
Undo作用:回滚未提交事务,确保数据一致性。
字符集迁移方案(GBK→UTF8)
检查兼容性:
NLS_CHARACTERSET
是否支持目标字符集。导出数据:
使用expdp
或数据泵导出。转换字符集:
ALTER DATABASE CHARACTER SET INTERNAL_USE UTF8;导入数据:
使用impdp
导入并验证数据完整性。
Commit数据持久化机制
Commit后数据是否写入数据文件:
不一定,但Redo日志已持久化(LGWR写入)。未Commit的数据:
可能通过DBWR写入数据文件,但事务未提交前可回滚。Commit后数据丢失:
除非Redo日志损坏且未归档,否则不会丢失。
Redo Log Buffer与LGWR机制
Redo Log Buffer:
循环缓存区,存储事务修改的Redo条目。
LGWR触发条件:
事务提交时 Redo Buffer满1/3 每隔3秒 DBWR写入前(确保先记日志)
DBWR与CKPT协作
DBWR:
负责将脏块写入数据文件,批量写入以减少I/O。
CKPT:
触发DBWR写入,更新控制文件和数据文件头部的检查点信息(SCN)。
重做日志性能问题处理
日志文件组不足:增加日志组,调整大小。 I/O瓶颈:分离日志文件到独立磁盘。 频繁日志切换:增大日志文件大小。
Resetlogs与NoResetlogs区别
Resetlogs:
重置日志序列号,强制打开数据库(不完全恢复后必须使用)。NoResetlogs:
保留原有日志序列号(仅用于完全恢复)。
数据库安全漏洞处理
定期应用PSU补丁。 禁用默认账户,限制权限。 启用审计,加密敏感数据。 部署防火墙与入侵检测系统。
深入研究Oracle的方向
内核机制:Buffer Cache、Latch原理 高可用架构:RAC、Data Guard 性能优化:SQL调优、AWR分析 备份恢复:RMAN、闪回技术
数据库坏块处理
坏块分类:
物理坏块(磁盘损坏) 逻辑坏块(校验和错误)
场景1(数据库运行中):
使用
RMAN
检测坏块:BACKUP VALIDATE CHECK LOGICAL DATABASE;恢复数据:
BLOCKRECOVER DATAFILE 5 BLOCK 20;
场景2(数据库宕机):
启动到mount状态。 使用 RMAN
恢复损坏文件。若无法恢复,通过备份重建数据文件。
数据库异机恢复演练
物理恢复:
使用RMAN备份集恢复到异机。 恢复控制文件、数据文件、日志文件。
逻辑恢复:
使用 expdp
导出源库数据。在目标库创建表空间和用户。 使用 impdp
导入数据。
数据迁移方案
同平台迁移:
RMAN: DUPLICATE DATABASE
直接克隆。数据泵:
导出/导入元数据与数据。
跨平台迁移:
传输表空间:
转换字节序(RMAN CONVERT
)。逻辑导出:
使用数据泵导出为跨平台格式。
单机迁移到RAC方案
环境准备:
部署共享存储(ASM)、安装Grid组件。数据迁移:
使用RMAN备份恢复或数据泵导出导入。配置RAC:
添加实例,配置负载均衡与故障转移。
ASM误建文件到文件系统处理
创建ASM磁盘组(若未存在)。
将文件移动到ASM路径:
ALTER DATABASE MOVE DATAFILE 'fs_path' TO '+DATA';更新控制文件记录。
SQL性能优化步骤
AWR分析:定位高负载SQL。
执行计划调优:使用
DBMS_XPLAN
。索引优化:添加缺失索引或重建索引。
统计信息更新:
EXEC DBMS_STATS.GATHER_TABLE_STATS('SCHEMA','TABLE');调整自动任务窗口:
EXEC DBMS_AUTO_TASK_ADMIN.DISABLE(...);
索引类型对比(B-Tree vs 位图)
B-Tree索引:
适合高基数列(唯一值多),OLTP场景。 1000W表查询:等值查询快,支持范围扫描。
位图索引:
适合低基数列(重复值多),OLAP场景。 1000W表查询:多列组合查询高效,但DML性能差。
函数索引:
对列应用函数后的结果建立索引,优化特定条件查询。
往期文章回顾
MOP社区新闻
金仓专栏
告别繁琐!KingbaseES v9数据库一键安装-青学会&金仓专栏(1)
KingbaseES v9数据库Docker安装-青学会&金仓专栏(2)
DBA实战小技巧
实战:记一次RAC故障排查
DBA实战运维小技巧安装篇(一)Oracle 主流版本不同架构下的静默安装指南
DBA实战运维小技巧存储篇(一)根目录满了如何处理
DBA实战运维小技巧存储篇(二)打包迁移单机数据库至新存储
MOP社区投稿-内核开发
简单解析 IvorySQL 增强 Oracle xml 兼容能力的原理
简单讨论 PostgreSQL C语言拓展函数返回数据表的方式
简单分析 pg_config 程序的作用与原理
Redis 日志机制简介(一):SlowLog
Redis 日志机制简介(二):AOF 日志
Redis 日志机制简介(三):RDB 日志
pg_cron插件使用介绍
Redis 的指令表实现机制简介
pg几款源码工具介绍
Redis 事务功能简介




