数据库 数据文件 控制文件 重做日志文件 |
数据 文件:用户的表,索引等数据
服务器进程,随时准备为你服务完成,人和死的数据的交互。----用户怎样读取数据
Some other process like :PMON,SMON DBWR LGWR CKPT etc.
Ps –ef用来查看进程,ps –ef|grep 过滤 ps –ef|grep dbw 查看 DBWR oracle中进程的名字是以ora_开头的如 ora_dbw0_prod
服务器进程会显示为一个连接的形式,若(DESCRIPTION=(LOCAL=YES)(ADDRESS=(….))
Kill主要进程可以使数据库异常宕机。是一种比较好的黑。
大部分服务器进程是空闲的。
PGA,每个进程只能看到自己的PGA,PGA program global area进程相当的大 ,比SGA大。private
SGA System Global Area Shared ,公共资源,所以存在相当多的锁,会消耗很多的资源。
SGA有以下 几个部分:
共享池:share pool 包括:库高速缓存liberary cache 保存执行计划 存储有关最近使用的SQL/PLSQL语句的信息。可以直接使用,如第一次执行了一条SQL第二次可以将执行计划缓存起来,以备第二次使用。当执行时,首先由hash算法寻找SQL如果寻找不到,就执行当前SQL并将此SQL存入liberary cache。库缓存是有大小限制,所以用改进的LRU算法来清除数据。 数据库字典缓存:用来保存元数据的。
Buffer cache :保存块,当用户读取时,看看在buffer cache 中有咩有,如果有的话,取出相应的行,给用户。如果没有的话,从磁盘读,并将相应的块放在buffer cache。主要目的,尽量减少物理I/O。这里有两个概念:物理读和逻辑读。
Java pool
Redo log cache
大型共享池 |
重做日志缓存 |
Java pool |
Buffer cache |
Sga |
Dictionary cache |
Share pool |
Liberary cache |
Show sga;
Show parameter 参数
Alter system set 参数=值 scope =BOTH|MEMORY|SPFILE(参数文件,本次不生效,下次启动的时候生效,暂时先不生效)
SID=….
Show db_cache
显示:db_cache_size big integer 0
Alter system set Db_cach_size=10M;for instance
进程介绍
DBWn:脏块有DBWn后台进程负责刷新进数据文件。作用:把用户修改的数据写回磁盘。内存和磁盘不一致的块称作脏块。用户只是产生一个脏块,所以,必须将数据从内存同步进磁盘。这个同步的过程是由DBWn来实现的。DBWn会收集一定数量的块后才会工作。工作模式:自觉、呼叫。
Show parameter mttr来设置DBWn恢复,或者写脏块的速度,频率。
LGWR:把用户的修改操作
SNON:process monitor
CKPT:check point,主要用来保证数据不丢失。
ARCn:每切换一次,ACRn将日志文档归档到其他位置。归档:所有的record
数字型函数
ROUND(column|expression.n)对列或表达式的值
RRUNC(column|expression.n)
Select Round(135.14,-1) from dual; 135
MOD
日期函数
日期:世纪,年,月,日,时,分,秒。
可以只根据格式显示
Alter session set nls_date_format=”yyyy-mm-dd hh24:mi:ss”;只在当前会话中生效,也就是只针对当前连接。常用sysdate;
所有依赖环境的SQL尽量不要用 如’08-08-08’;
日期的计算。TO_DATE(DATE,FORMAT);这样用的话,比较严谨。与环境变量无关。
Select to_date(‘2008-08-08 8:00:00’,’yyyy-mm-dd hh24:mi:ss’)+10 from dual;
这样就加上了十天。
当添加小时的时候用 1/24代表一个小时 继续除 即可得到相应的 分钟-----
ADD_MONTHS可以实现不用管本月是多少天的问题。
Next_day下一周的第几天是几号。
Last_day 本月最后一天
日期的四舍五入
Round对年月日开始对日期进行四舍五入。
如果是半年,则月和天变为一号。
对月四舍五入 则天被四舍五入。
对天 则是星期。
还有时分秒。
默认没有参数的情况是:小时。
Trunk 截断
字符转换。
To_char变成任何自己想要的格式。当转换过短的时候,结果会变成#########很多的################转换不了,宽度不够,需要调整。
To_number(字符,格式) to_number(字符)
Nvl 空值可以转换为零的函数。
Coalesce(expression…..)第一个不为空的值
Case看做一个函数,并不是一个语句流的控制。以为其总会返回值。
Case expression when expression then result1
When expression then resullt2;
Select Case nvl(sal,0) when 0 then ‘new guy’||name else name end from t1;如果是工资为0则显示为新员工new guy。
Decode(判断表达式,判断结果1|判断结果2…….)判断表达式和结果表达式相等,则满足条件。
Decode(nvl(sal,0),0,’new’||name,1000,’leader’||name)
等值连接
笛卡尔乘积。一个表的一行和另一个表的所有行相连。
列和表的后面加空格 跟别名。
两表相连 然后生成新表和第三个表相连。
普通连接:等值连接,不等值连接。
外连接:在进行连接的时候,即使某个表的条件不满足 ,仍然让其显示出来。在少的后面添加(+)少行的后面:
Select spbh,mc from sp,lx where sp.lxbh(+)=lx.lxbh;
Select nvl(spbh,’empty’),mc from sp,lx where sp.lxbh(+)=lx.lxbh;让空的地方有显示的东西。更适合判断。
其实做外连接和右外连接没有根本型的区别。
、不能有IN,不能有OR但可以有and、
自连接:自己连接自己。
函数
字符函数、数字函数、日期函数、转换函数
函数都返回结果。
单行函数:只对某行的值操作、多行函数:对多行的值进行操作如sum(salary)。
函数的嵌套形式。
数据类型的自动转换。Select pow(‘2’,’10’)form dual;这个时候会自动转换的。
函数的使用位置非常灵活。Sql reference.包括所有的函数和所有的命令。
SUBSTR
Lengthb 返回字节
Instr出现位置。V$dbfile 常用的一个视图。LPAD RPAD 用来凑总字符数.
Trim(leading|trailing|both from)
Replace
组函数
有叫多行函数。
Sum avg 求和时空值被忽略,求平均时空值亦被忽略。当想用的时候可以提那家nvl来转化。Max min也不会考虑空值。处理空就用nvl
Count 仍然不考虑空值。当count(*)的时候会把空值考虑进去。
Distinct
分组命令:group by。分组之后空值是可以显示出来的。分组之后加条件,用having。在分组之后 才会由意义。Where在分组前 having在分组后 尽量用where去过滤数据。