读书笔记:Oracle数据库存储结构全解析:从表空间到日志文件
我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
Oracle数据库存储结构全解析:从表空间到日志文件
数据库的"储物柜":表空间
想象Oracle数据库就像一个大型仓库,而表空间就是这个仓库里的储物柜。每个数据库可以有一个或多个这样的"储物柜"(表空间),而每个储物柜又由多个"抽屉"(数据文件)组成。这些抽屉可以是普通文件、原始分区或者专门管理的ASM文件。
储物柜里的物品分类:段
在表空间这个"储物柜"里,我们把物品分门别类地存放,这些分类就是"段"。常见的段类型包括:
- 表段:存放普通表格数据
- 索引段:存放索引数据
- 撤销段:记录修改前的数据
- 临时段:存放临时计算结果
有趣的是,一个看似简单的操作可能创建多个段。比如创建一个带主键和CLOB字段的表,实际上会创建4个段:表本身、主键索引、CLOB索引和CLOB数据。
物品的摆放方式:区和块
每个段(物品分类)内部,数据是按照"区"为单位存放的。区就像储物柜中的隔层,每个隔层是连续的存储空间。当隔层不够用时,系统会自动添加新的隔层,但这些新隔层不一定紧挨着原来的隔层。
区又由更小的"块"组成,块是Oracle中最小的存储单位,就像隔层中的小格子。常见的块大小有2KB、4KB、8KB或16KB。选择合适大小的块很重要:太大会浪费空间,太小则可能影响性能。
特殊的存储区域
临时文件:工作台
临时文件就像工作台,用于存放临时性的工作数据:
- 大型排序的中间结果
- 哈希运算的临时数据
- 全局临时表的内容
- 内存不足时的结果集
与普通数据不同,临时文件中的操作通常不生成重做日志,这意味着它们不会被常规的恢复操作保护。
控制文件:仓库地图
控制文件相当于仓库的地图索引,记录着:
- 所有数据文件的位置
- 数据库名称和创建时间
- 检查点信息
- 归档日志历史
- RMAN备份信息
虽然体积小(通常几MB),但控制文件极其重要。建议多保留几个副本,放在不同的磁盘上以防意外丢失。
重做日志:操作记录本
重做日志就像仓库管理员的工作日记,详细记录所有数据变更。它们主要用于:
- 系统崩溃后恢复数据
- 磁盘故障后恢复备份
- 搭建备用数据库
- 数据变更审计
重做日志分为两种工作模式:
- ARCHIVELOG模式:保留所有操作记录(强烈推荐生产环境使用)
- NOARCHIVELOG模式:循环覆盖旧记录(仅适用于测试环境)
数据库安全门禁:密码文件
密码文件控制着远程管理员访问权限。当数据库还未启动时,常规的用户验证机制无法工作,这时就需要密码文件来验证SYSDBA身份。
配置密码文件的步骤:
- 用orapwd工具创建密码文件
- 设置REMOTE_LOGIN_PASSWORDFILE参数
- 为需要远程管理的用户授予SYSDBA权限
提高备份效率的利器
更改跟踪文件
这个可选功能可以记录哪些数据块发生了变更,让RMAN备份时只需处理变化的部分,大大提高了增量备份的效率。启用方法很简单:
ALTER DATABASE ENABLE BLOCK CHANGE TRACKING
USING FILE '/path/to/tracking_file';
闪回日志
闪回日志保存了数据块修改前的状态,允许我们将整个数据库回退到之前的某个时间点,就像系统还原点一样。
最佳实践建议
- 生产环境务必使用ARCHIVELOG模式:这是数据安全的底线
- 合理规划表空间和块大小:根据数据类型和访问模式选择
- 多路复用重要文件:控制文件和重做日志应有多个副本
- 定期测试备份恢复流程:确保在真正需要时能派上用场
记住,良好的存储规划不仅能保障数据安全,还能显著提升数据库性能。就像整理一个高效的仓库,合理的分区和摆放能让存取操作事半功倍。
------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)

浙公网安备 33010602011771号