我们的文章会在微信公众号IT民工的龙马人生和博客网站( www.htz.pw )同步更新 ,欢迎关注收藏,也欢迎大家转载,但是请在文章开始地方标注文章出处,谢谢!
由于博客中有大量代码,通过页面浏览效果更佳。
本文为个人学习《Expert Oracle Database Architecture Techniques and Solutions for High Performance and Productivity(第四版本》一书过程中的笔记与理解分享,仅用于学习与交流,部分内容参考原书观点并结合>实际经验进行整理。若涉及版权问题,请联系删除或沟通处理。也请大家支持购买原版书籍。
Oracle数据库的"日志开关"和"数据仓库"设计秘诀
一、数据库的"黑匣子":日志模式选择
想象飞机上的黑匣子,它记录着飞行中的所有关键数据。Oracle数据库也有类似的机制——重做日志(redo log),而LOGGING和NOLOGGING就是控制这个"黑匣子"的开关。
两种模式怎么选?
- 常规模式(LOGGING):像全天候工作的监控摄像头,记录所有操作(默认选择)
- 节能模式(NOLOGGING):像选择性记录的执法记录仪,只在特定情况下工作
真实场景建议:
- 银行交易系统 → 必须用LOGGING
- 数据分析临时表 → 可考虑NOLOGGING加速处理
- 开发测试环境 → 根据需求灵活选择
小知识:即使设为NOLOGGING,日常的增删改操作仍会被记录,只有像大批量导入这样的特殊操作才会跳过日志。
二、数据块的"会客室":INITRANS参数
把数据库块想象成公司会议室,INITRANS就是会议室里预设的座位数:
- 默认只有2个座位(INITRANS=2)
- 当多人(并发事务)同时要开会时,来晚的人只能排队等待
- 会议室可以临时加座位(动态扩展),但空间有限
实用建议:
- 普通办公室(低频修改的表):默认2个足够
- 热门会议室(高频并发表):建议增加到10-20个座位
- 最大容量永远是255人(Oracle的硬限制)
三、"随便放"的储物间:堆组织表的本质
堆表就像你家的大储物间:
- 东西(数据)随便放,哪里有空塞哪里
- 找东西时没有固定顺序,每次翻出来的顺序可能都不一样
- 即使按顺序放进去,拿出来时顺序也会乱
经典案例:
-- 往储物间放三个箱子
INSERT INTO 储物间 VALUES(1, '冬季衣服');
INSERT INTO 储物间 VALUES(2, '夏季衣服');
INSERT INTO 储物间 VALUES(3, '春秋衣服');-- 扔掉第二个箱子
DELETE FROM 储物间 WHERE 箱子编号=2;-- 放入新箱子
INSERT INTO 储物间 VALUES(4, '儿童衣物');-- 查看时顺序可能是:3,1,4 而不是1,3,4
SELECT * FROM 储物间;
重要原则:
想按顺序找东西?必须用"ORDER BY"明确说明!
-- 正确做法:使用排序指令
SELECT * FROM 储物间 ORDER BY 放入时间;
四、DBA的秘密武器:逆向工程建表语句
新手设计师常问:"这个漂亮房子是怎么建的?"Oracle也提供了类似的"设计图纸查看"功能:
-- 先建个简单表
CREATE TABLE 我的表 (编号 NUMBER PRIMARY KEY,名称 VARCHAR2(100),详情 CLOB
);-- 查看完整设计图纸(包含所有隐藏细节)
SELECT dbms_metadata.get_ddl('TABLE', '我的表') FROM dual;
这个方法能揭示:
- 默认的存储参数设置
- 隐藏的索引配置
- 特殊字段(如CLOB)的存储方式
- 表空间分配情况
五、优化存储的三大法宝
-
空间预留(PCTFREE)
- 像行李箱留出伸缩层:默认留10%空间
- 装冬季衣服的箱子 → 多留空间(PCTFREE=30)
- 装书本的箱子 → 少留空间(PCTFREE=5)
-
会客座位(INITRANS)
- 预估会有多少客人同时来访
- 家庭相册(很少修改):2个座位足够
- 热门留言本(多人同时写):需要10个座位
-
压缩打包(COMPRESS)
- 普通打包:NOCOMPRESS(保持原样)
- 真空压缩:COMPRESS ADVANCED(节省70%空间)
- 部分压缩:COMPRESS BASIC(仅对大件物品压缩)
特别提醒:
- 照片文件(LOB数据)有自己的存储规则,不受箱子(PCTFREE)设置影响
- 它们总是塞满整个盒子才会换新盒子
掌握这些知识,你就能像专业仓库管理员一样高效管理Oracle数据库存储了!
------------------作者介绍-----------------------
姓名:黄廷忠
现就职:Oracle中国高级服务团队
曾就职:OceanBase、云和恩墨、东方龙马等
电话、微信、QQ:18081072613
个人博客: (http://www.htz.pw)
CSDN地址: (https://blog.csdn.net/wwwhtzpw)
博客园地址: (https://www.cnblogs.com/www-htz-pw)