1 实例与数据库,一般是一一对应
2 进程(线程)、内存(SGA) 属于实例, 而数据库 是由各种文件组成
3 MTS 和专用服务器
4 块---》盘区---->表空间
5 重做日志文件,归档模式
6 PGA,UGA,SGA
小结:很多新概念,设计到操作系统的知识,如内存分配、线程。理论性知识太多,不算很明白!
二 锁定和并行
1 悲观锁,当用户查询出一行记录,要更改时,锁定该行,只到该用户完成更改为止。这样可以避免丢失更新。
example:
一个连接执行:select * from emp where empno=9999 for update nowait;
当打开另一连接,执行更新此行时,无法更新,查询此行时,没有记录
2 乐观锁,乐观地希望数据没有更改(通过where条件),如果提交发现更新0行,则已经丢失更新,提示用户需要再次提交.
实现方法:
1)新增一列,利用系统时间
2)
悲观锁降低了系统性能,但提高了用户的使用感受。所以推荐使用悲观锁
3 阻塞 当一个会话锁定一个资源,而另一个会话请求该资源时,就会出现阻塞。增删改查都会出现阻塞:
1)select for update,避免阻塞的方法是加nowait
2)insert,当表存在主键,当两个会话同时向同一行插入记录时,此时会出现阻塞,这是其中的一个会话提交或回滚,则对应的另一个会话则返回“值重复”的错误或直接提交。解决此问题,可以使用Oracle生成序列码。
tip:提升scott权限:grant select any table to scott
三 锁的类型
1 DML锁
1)TX锁,当执行增删改查、MERGE时,当未提交时,锁定那一行
2)TM锁,当修改表的内容时,保证表的结构不变。(防止另一个用户执行Create /Alter命令 )
2 DDL锁
注:EXCLUSIVE DDL lock 涉及到索引,share DDL locks 涉及到视图
3 Latch 针对内存中的数据
http://database.ctocio.com.cn/tips/53/8261553.shtml