1.理解connection ..session..transaction.知道何时开始与结束
2.connection的工作原理
connection是如何验证的
SQL> conn sys/a123@demo as sysdba当输入此条语句结束后.
第一步:服务器进程会通过sqlnet.ora验证
我的sqlnet.ora是这样的:
SQLNET.AUTHENTICATION_SERVICES= (NTS)
NAMES.DIRECTORY_PATH= (TNSNAMES, EZCONNECT)
那么,客户端就会首先在tnsnames.ora文件中找demo的记录.当发现是本地解析时(TNSNAMES)就会进行
第二步: 读取tnsnames.ora文件:
DEMO =
(DESCRIPTION =
(ADDRESS_LIST =
(ADDRESS = (PROTOCOL = TCP)(HOST = xiaoke)(PORT = 1521))
)
(CONNECT_DATA =
(SERVICE_NAME = demo)
)
)
连接的是xiaoke这台机器的1521端口的database_sid=demo(用tcp协议).
3.select的工作原理
以 "select column from table"为例
分为三个阶段:parse(解析)
execute执行)
fetch(取回)
看起来,是很简单的事情,其实Oracle做了很复杂的事情.
一)parse(解析)
当客服端发出select命令后,服务器进程会搜索共享池中的库高速缓存,看有没有相同的执行语句,如果有的话,就会直接执行.如果没有的话,服务器进程就会进行以下的步骤:
1)语法分析
2)分析表,列(验证存在与否)
3)获得对象的解析锁(不能改变表的结构,但可以改变表的内容)
4)验证对对象操纵的权限
5)把执行计划写入到库高速缓存
二)execute(执行)
此阶段比较简单,服务器进程会在数据库缓冲区中寻找table,如果没找到table就会在数据文件中读出table到数据库缓冲区,此阶段结束,如果找到了,此阶段结束.
三)
fetch(提取)
服务器进程提取数据给用户
4.update的工作原理
update的工作分为两个阶段:
parse(解析) execute(执行)
1)parse(解析)
parser阶段和select语句的parser阶段原理差不多.其中当用到表,列及用户的权限的时候,服务器进程会在数据字典高速缓存区中去找,看是否存在,当不存在时,就会到硬盘上去取数据到数据字典高速缓存中.
2)execute
当解析阶段把执行计划写入到库高速缓存中后,就会开始了执行阶段.首先服务器进程会检查数据库高速缓存区中寻找表,列名,当找到后,对列加锁.然后执行更新,旧的数据就会写到undo buffer中去,同时undo_buffer与数据库缓冲区的变化写到redo log buffer中.