说到软解析(soft prase)和硬解析(hard prase),就不能不说一下Oracle对sql的处理过程。当你发出一条sql语句交付Oracle,在执行和获取结果前,Oracle对此sql将进行几个步骤的处理过程:
1、语法检查(syntax check)
检查此sql的拼写是否语法。
2、语义检查(semantic check)
诸如检查sql语句中的访问对象是否存在及该用户是否具备相应的权限。
3、对sql语句进行解析(prase)
利用内部算法对sql进行解析,生成解析树(parse tree)及执行计划(execution plan)。
4、执行sql,返回结果(execute and return)
其中,软、硬解析就发生在第三个过程里。
Oracle利用内部的hash算法来取得该sql的hash值,然后在library cache里查找是否存在该hash值;
假设存在,则将此sql与cache中的进行比较;
假设“相同”,就将利用已有的解析树与执行计划,而省略了优化器的相关工作。这也就是软解析的过程。
诚然,如果上面的2个假设中任有一个不成立,那么优化器都将进行创建解析树、生成执行计划的动作。这个过程就叫硬解析。
创建解析树、生成执行计划对于sql的执行来说是开销昂贵的动作,所以,应当极力避免硬解析,尽量使用软解析。 ......
一.物理读(physical read)
当数据块第一次读取到,就会缓存到buffer cache 中,而第二次读取和修改该数据块时就在内存buffer cache 了 以下是例子:
1.1 第一次读取:
C:"Documents and Settings"Paul Yi>sqlplus "/as sysdba"
SQL*Plus: Release 9.2.0.4.0 - Production on Thu Feb 28 09:32:04 2008
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.4.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.4.0 - Production
SQL> set autotrace traceonly
SQL> select * from test;
Execution Plan
----------------------------------------------------------
0 SELECT STATEMENT ptimizer=CHOOSE (Cost=2 Card=4 Bytes=8)
1 0 TABLE ACCESS (FULL) OF 'TEST' (Cost=2 Card=4 Bytes=8)
Statistics
----------------------------------------------------------
175 recursive c ......
以 下七种数据导入方法哪个最适用需要针对具体情况具体分析,我也附带列举了影响导入速度的各种因素供斟酌。为了比较各种数据导入方法的效果,我创建了示例表 和数据集,并用各种方法导入示例数据集来计算总体导入时间和导入进程占用 CPU 时间,这里得出的时间仅供参考。需要说明的是,建议你使用 Oracle 9i 企业版数据库,当然你也可以尝试使用 Oracle 7.3 以上的标准版数据库。本文使用的机器配置为:CPU Intel P4,内存 256M,数据库 Oracle 9i 企业版。
示例表结构和数据集
为了演示和比较各种数据导入方法,我假定数据导入任务是将外部文件数据导入到 Oracle 数据库的CALLS表中,外部数据文件包含十万条呼叫中心记录,将近 6MB 的文件大小,具体的数据示例如下:
82302284384,2003-04-18:13:18:58,5001,投诉,手机三包维修质量
82302284385,2003-04-18:13:18:59,3352,咨询,供水热线的号码
82302284386,2003-04-18:13:19:01,3142,建议,增设公交线路
接受导入数据的表名是 CALLS,表结构如下:
Name Null? &nbs ......
http://www.cnblogs.com/sleepywang/archive/2009/10/13/1582654.html
1. 下载oracle的客户端程序包(30M)
只需要在
Oracle
下载一个叫
Instant Client Package
的软件就可以了,这个软件不需要安装,只要解压就可以用了,很方便,就算重装了系统还是可以用的。
下载地址:
http://www.oracle.com/technology/software/tech/oci/instantclient/htdocs/winsoft.html
解压到一个目录中即可,例如c:\oracleclient
2. 配置操作系统环境变量
NLS_LANG=SIMPLIFIED CHINESE_CHINA.ZHS16GBK
TNS_ADMIN=C:\oracleclient
3. 配置连接Oracle的配置。tnsnames.ora文件到目录C:\oracleclient。可以从oracle服务器拷贝一个过来。
内容类似:
# tnsnames.ora Network Configuration File: E:\oracle\product\10.2.0\db_1\network\admin\tnsnames.ora
# Generated by Oracle configuration tools.
ORCLProduct =
(DESCRIPTION =
(ADDRESS = (PROTOCOL = TCP)(HOST = prmpatm1.asiapacific.hpqcorp.net)(PORT = 1521))
(CONNECT_DATA = ......
oracle的nvl函数的用法 通过查询获得某个字段的合计值,如果这个值位null将给出一个预设的默认值
select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1这里关心的nvl的用法,nvl(arg,value)代表如果前面的arg的值为null那么返回的值为后面的value
如: NVL(a,b)就是判断a是否是NULL,如果不是返回a的值,如果是返回b的值 通过查询获得某个字段的合计值,如果这个值位null将给出一个预设的默认值
select nvl(sum(t.dwxhl),1) from tb_jhde t where zydm=-1这里关心的nvl的用法,nvl(arg,value)代表如果前面的arg的值为null那么返回的值为后面的value 中国网管联盟 另一个有关的有用方法
declare
i integer
select nvl(sum(t.dwxhl),1) into i from tb_jhde t where zydm=-1这样就可以把获得的合计值存储到变量i中,如果查询的值为null就把它的值设置为默认的1 Oracle得Nvl函数 nvl( ) 函数 从两个表达式返回一个非 null 值。
语法
NVL(eExpression1, eExpression2)
参数
eExpression1, eExpression2
如 果 eExpression1 的计算结果为 null 值,则 NVL( ) 返回 eExpression2。如果 eExpression1 的计算结果不 ......
Q1.怎样创建表?
Q2.怎样删除表?
Q3.怎样创建视图?
Q4.怎样删除视图?
Q5.怎样给表添加字段?
Q6.怎样删除表中某个字段?
Q7.怎样给某个字段添加约束?
Q8.怎样去除某个字段上的约束?
Q9.怎样给表加上主键?
Q10.怎样删除表的主键?
Q11.怎样给表添加一个外键?
Q12.怎样删除表的一个外键?
Q13.怎样给字段加上CHECK?
Q14.怎样去掉字段上的CHECK?
Q15.怎样给字段设置默认值?
Q16.怎样移去字段的默认值?
Q17.怎样创建索引?
Q18.怎样删除索引?
Q19.怎样创建用户?
Q20.怎样删除用户?
Q21.怎样将对象权限(object privileges)授予用户?
Q22.怎样从用户收回对象权限?
Q23.怎样将角色权限(role privileges)授予用户?
Q24.怎样从用户收回角色权限?
Q25.怎样将系统权限(system privileges)授予用户?
Q26.怎样从用户收回系统权限?
Q27.怎样创建序列?
Q28.怎样删除序列?
Q29.怎样获取序列值?
Q30.怎样创建角色?
Q31.怎样删除角色?
Q32.怎样将对象权限(object privileges)授予角色?
Q3 ......