第一章、
开发成功的Oracle应用程序
❑ You should do it in a single SQL
statement if at all possible.
❑ If you cannot do it in a single
SQL Statement, then do it in PL/SQL.
❑ If you cannot do it in PL/SQL, try
a Java Stored Procedure.
❑ If you cannot do it in Java, do it in a
C external procedure.
❑ If you cannot do it in a C external
routine, you might want to seriously think about why it is you need to do it...
这段表明我们操作一个过程, 简单来说,优先选择SQL
SQL中一些注意
1、不要在MTS下运行长事务
2、使用绑定变量
理解并行控制
1、锁
❑ Oracle locks
data at the row level on modification only. There is no lock escalation to a
block
or table
level, ever.
❑ Oracle never
locks data just to read it. There are no locks placed on rows of data by simple
reads.
❑ A writer of
data does not block a reader of data. Let me repeat – reads are not
blocked by
writes. This is fundamentally different from almost every other
database, where reads are
blocked by
writes.
❑ A writer of
data is blocked only when another writer of data has already locked the row it
was
going after. A
reader of data never blocks a writer of data.
所以实际应用时候,注意改变锁的级别!!!
2、多版本
主要针对写操作时候,对读操作不阻塞
具体来说: (R-read W-write)
R/R 不上锁,但是如果两个线程先读再修改,则需要加SS锁(for update)
R/W W/R 多版本控制,不阻塞读
W/W 使用SX锁,阻塞任何DML操作
DML锁分类表
表1 Oracle的TM锁类型 |
锁模式 |
锁描述 |
解释 |
SQL操作 |
0 |
none |
|
|
1 |
NULL |
空 |
Select |
2 |
SS(Row-S) |
行级共享锁,其他对象只能查询这些数据行 |
Select
for update、Lock for update、Lock row share
|
3 |
SX(Row-X) |
行级排它锁,在提交前不允许做DML操作 |
Insert、
Update、Delete、Lock row share
|
4 |
S(Share) |
共享锁 |
Create index、Lock share |
5 |
SSX(S/Row-X) |
共享行级排它锁 |
Lock share row exclusive |
6 |
X(Exclusive) |
排它锁 |
Alter
table、Drop able、Drop index、Truncate table 、Lock exclusive
|