sql的处理过程描述如下:
1.检查是否有打开的光标。如果有,直接通过光标链接到位于pga中的私有sql区(privatesqlarea),转到步骤11。否则,执行步骤2。
2.检查是否设置了初始化参数session_cached_cursors。如果设置了,还可以通过光标指向位于pga中的私有sql区域,转到步骤11。否则,转到步骤3。
3.检查保持光标和释放光标的设置。如果release_cursorno(缺省no)和hold_cursoryes(缺省no),当oracle执行完sql语句后,为私有sql区分配的内存空间被保留,游标和私有sql区之间的链接也被保留,预编译器将不再使用它。同样,可以通过这个指针直接在privatesql区域获取语句,并转到步骤11。
以上三种情况,实际上没有parse,语句直接从位于pga的私有sql区域获取,直接执行。这是快速解析。
当这三个条件都不存在时,oracle执行第4步。
4.创建一个光标。
5.语法检查:检查语法书写是否正确,是否符合sql参考手册中给出的sql语法。
6.语义分析:查找数据字典,检查表和列是否正确,获取所需对象的解析锁,使这些对象的定义在句子解析过程中不会改变,验证是否满足访问所涉及的schema对象所需的权限。
7.将语句转换成ascii等价的数字代码,然后通过哈希算法得到哈希值。
8.检查库缓存中是否存在具有相同哈希值的语句。如果是,请转到步骤11。否则,转到步骤9。这是软解析。
9.选择执行计划。从可用的执行计划中选择一个最佳执行计划,包括与存储的大纲或实体化视图相关的决策。
10.生成语句的编译代码(p代码)。
11.执行语句。
当一个会话执行一个语句时,该语句的解析结果将被保存在库缓存中,并且在pga的私有sql区域。铜rsor总是通过一个链接直接链接到私有sql区域。如果在private中没有找到这个副本,您需要解析sql,然后匹配库缓存中的哈希值。所以一般来说,您可以使用cursor而不进行任何解析,因为您直接从当前的私有sql区域获得了与语句相关的信息,包括执行计划。一旦需要在库缓存中进行匹配,就必须进行解析。
softppars
oracle分为oracle实例和oracle数据库文件。
1.实例是指内存结构,包括sga、sga和后台进程,都命名为实例名。
2.数据文件是用于存储数据的文件。
在关闭状态下,数据库文件存在于磁盘上,用户要读写记录需要打开数据库,也就是打开或建立实例的过程,也就是在内存中划出一块内存,建立各种后台进程。然后用户通过一个进程操作内存,另一个进程将内存写入数据库文件。用户不能直接操作数据库文件。
在单实例状态下,一般实例名和数据库名可以相同,也可以不同。但是我们要注意区分这两个概念。
一般不建议修改数据库名,但是有官方的方法可以修改。