Oracle Database 9i/10g/11g编程艺术 笔记

Oracle Database 9i/10g/11g编程艺术

跳转至: 导航、 搜索

目录

  • 1 序言
  • 2 体系结构概述
  • 3 文件
  • 4 内存结构
  • 5 Oracle进程
  • 6 锁和闩
  • 7 并发与MVCC
  • 8 事务
  • 9 redo与undo
  • 10 数据库表
  • 11 索引
  • 12 数据类型
  • 13 分区
  • 14 并行执行
  • 15 数据加载与卸载
  • 16 加密

序言

  1. 11g r1: SKIP LOCKED特性(用于记录的串行化处理,不同的事务能够得到不同的记录)
  2. pragma autonomous_transaction; //在大的事务中强制子事务执行,审计?
  3. 从SQL Server升级的要点:不要打开多个连接;使用绑定变量(Oracle太自大了,为什么不能模仿一下SQL Server呢?)
  4. 用SELECT ... FOR UPDATE锁定数据,以避免并发问题
    事务性不表示一致性,因此需要了解‘并发控制’
  5. Oracle的MVCC:读一致;查询不会被写阻塞
    1. 9i+:闪回查询 select ... as of scn :scn;(这相当于把数据库放到一个版本管理系统下了。。。)
    2. exec :scn = dbms_flashback.get_system_change_number;
  6. id:创建trigger?
    1. 更好的方法:create sequence t_seq; insert into ... values(t_seq.nextval,....)
  7. 复制绝不简单(并发的insert from select例子)
  8. 又:父子表的关联汇总报表查询,Oracle提供了:
    1. 子查询分解(WITH子句)、内联视图(select from select)、标量子查询
    2. 不支持这些特性的数据库,要么手工迭代每行执行聚集查询,要么使用hash join(浪费空间)?
  9. 每个用户一个会话?系统设置:
    1. create profile p_one_user_one_session limit sessions_per_user 1;
  10. 细粒度访问控制(FGAC)

体系结构概述

  1. 一个实例一个数据库?(授权限制?)
  2. ‘专用服务器’进程?
  3. TNS连接字符串?
  4. 监听器:指示端口号,以连接到调度器(有点像ftp?)

文件

  1. V$PARAMETER
    1. show parameter db_block_s #自动前缀匹配
    2. 可供任何用户用的:dbms_utility.get_parameter_value
  2. SPFILE:索引init.ora?
  3. 重做日志:ARCHIVELOG
  4. 10g Data Pump:用于取代老的EXP/IMP,--使用XML表示元数据?

内存结构

  1. SGA PGA UGA
  2. 行列转换(pivot)?

Oracle进程

  1. 11g DRCP
  2. 会话:可暂时中断物理连接?
  3. 。。。

锁和闩

  1. 事务是‘核心’
  2. 要延迟到适当时候提交:不提交不会有压力。。。
  3. 只要需要,长期保持锁(不是稀有资源)
  4. 不会锁升级(escalation),但可以转换(conversion),或提升(promotion)
  5. 3 types:
    1. DML锁:TX TM
    2. DDL锁:排他、共享、可中断
    3. latch(spin lock?)

并发与MVCC

  1. 隔离级别:读未提交,--Oracle中不允许
  2. 可重复读:防止‘丢失更新’
  3. 可串行化:ORA-08177错误(试图更新某行,但它自事务开始后已经被修改--一般因为所在数据块有其他行被修改)
  4. READ ONLY事务
  5. 写一致:重启动?

事务

  1. 可后台提交,因此不能保证持久性
  2. 完整性约束:
    1. IMMDIATE
    2. DEFERRABLE
  3. 无法通过频繁提交来‘节省’undo空间
  4. !可重启动:写操作应该是‘幂等’的?

redo与undo

  1. 与redo不同,undo内部存储在特殊的段中(rollback segment)
  2. undo:逻辑地恢复!
  3. COMMIT:调用LGWR刷新redo
  4. 关闭redo:NOLOGGING?
  5. 块清除:删除所修改数据块上的‘锁定’相关信息
  6. 临时表(8i 8.1.5+):不会生成redo
  7. 分析undo
    1. ORA-01555: snapshot too old
    2. INSERT生成的undo最少(只需删除一个rowid),DELETE生成的undo最多(哈)

数据库表

  1. 9种表类型:
    1. 堆组织的、索引组织的(IOT)、聚簇(index clustered)、散列聚簇、sorted散列聚簇(10g)、嵌套表、临时表、对象表、外部表
  2. 列数>254时,使用额外的row piece
  3. 段(占用磁盘存储的对象)
    1. MSSM、ASSM
    2. 高水位线(HWM)
    3. MSSM中的FREELIST --这里的概念有点类似于‘内存管理’?
    4. PCTFREE和PCTUSED
  4. IOT:适合于查找表
  5. *嵌套表(create type):不支持引用完整性约束,不能引用任何表包括自己 --鸡肋?
  6. *对象表:create table t of Some_Type; //?

索引

  1. 位图联合索引(bitmap join index)?
  2. 函数索引:DETERMINISTIC
  3. CBO

数据类型

  1. DATE TIMESTAMP INTERVAL
  2. LOB(大对象):CLOB(=TEXT?)、NCLOB、BLOB、BFILE

分区

  1. CREATE TABLE emp ... PARTITION BY HASH(empno) ( ... )
  2. 9i r1:列表分区
  3. 11g r1:间隔分区、引用分区
  4. 组合分区 ?

并行执行

  1. 并行查询是不可扩展的 ?
  2. Oracle Exadata
  3. 并行DML(PDML)
  4. PDDL
  5. DIY

数据加载与卸载

  1. SQL *Loader(SQLLDR)
  2. 9i+:外部表(直接访问外部文件系统)

加密

  1. 11g r1:Oracle钱夹*
  2. 透明表空间加密* 

你可能感兴趣的:(oracle,数据库,database,mvcc,11g)