oracle trunc函数使用介绍
核心提示:oracle trunc函数使用介绍
1.TRUNC(for dates)
TRUNC函数为指定元素而截去的日期值。
其具体的语法格式如下:
TRUNC(date[,fmt])
其中:
date一个日期值
fmt日期格式,该日期将由指定的元素格式所截去。忽略它则由最近的日期截去
下面是该函数的使用情况:
TRUNC(TO_DATE('24-Nov-1999 08:00 pm'),'dd-mon-yyyy hh:mi am')
='24-Nov-1999 12:00:00 am'
TRUNC(TO_DATE('24-Nov-1999 08:37 pm','dd-mon-yyyy hh:mi am'),'hh')='24-Nov-1999 08:00:00 am'
trunc(sysdate,'yyyy') --返回当年第一天。
trunc(sysdate,'mm') --返回当月第一天。
trunc(sysdate,'d') --返回当前星期的第一天。
trunc(sysdate,'dd')--返回当前年月日
2.TRUNC(fornumber)
TRUNC函数返回处理后的数值,其工作机制与ROUND函数极为类似,只是该函数不对指定小数前或后的部分做相应舍入选择处理,而统统截去。
其具体的语法格式如下
TRUNC(number[,decimals])
其中:
number待做截取处理的数值
decimals指明需保留小数点后面的位数。可选项,忽略它则截去所有的小数部分
下面是该函数的使用情况:
TRUNC(89.985,2)=89.98
TRUNC(89.985)=89
TRUNC(89.985,-1)=80
注意:第二个参数可以为负数,表示为小数点左边指定位数后面的部分截去,即均以0记。与取整类似,比如参数为1即取整到十分位,如果是-1,则是取整到十位,以此类推。
本文链接
本文内容
- Latch 和等待
- 共享池中的 Latch 争用
Latch 和等待
假设,一个数据块正在被一个会话从磁盘中读如到内存中,请注意,是正在读取中,此时,如果另外一个会话也正需要这个数据块,他该怎么办?
此时,丈等待这个数据块被读取到内存中,这样就可以只有一个数据块在内存中,不会导致数据的不一致性。那么,正在读取数据块的会话如何能阻止别的会话继续读取这个数据块呢?方法是它需要获得一种像锁一样的资源,以便阻止其他的会话来做相同的事情,这种资源就叫 Latch。Latch 是 Oracle 为了保护内存结构而产生。
Latch 不会造成阻塞,只会导致等待。导致 Latch 争用而等待的原因很多,内存中很多资源都可能存在争用。最常见的两类 Latch 争用:
- 共享池中的 Latch 争用
- 数据缓冲池中的 Latch 争用
共享池中的 Latch 争用
创建测试环境
用 sys 用户登录,查看 Latch 争用情况:在分析系统性能是,如果看到 library cache 这样的 Latch 争用,就可以断定是共享池中出现了问题,这基本上是有 SQL 语句导致的,比如没有绑定变量或一些存储过程被反复分析。
下面是来自 asktom.oracle.com 上给出的一个在有绑定变量和无绑定变量的情况下,Latch 资源争用的对比测试。该测试被很多 Oracle 书籍引用。测试让一条 SQL 语句执行1万次,然后给出各自的执行过程中产生的资源使用情况。
用 sys 用户新建用户 test 并授权。
用 test 用户登录,执行如下操作:
实验环境:操作系统版本:Red Hat Enterprise Linux Server release 5.5 (Tikanga),
数据库版本 :Oracle Database 10g Enterprise Edition Release 10.2.0.1.0。
卸载ORACLE 10g的过程,在不同平台或不同版本数据可能有些步骤略有不同,具体操作的时候请结合实际情况酌情处理。
1. 首先做好备份工作(如果有需要的话,如果你想重新完全安装,可以忽略这个步骤)。用 oracle 用户登录。 最好先做一些备份工作。例如备份数据库文件等。
2. 使用SQL*PLUS停止数据库
[oracle@wgods ~]$ sqlplus / as sysdba
SQL*Plus: Release 10.2.0.1.0 - Production on Wed Mar 27 09:35:23 2013
Copyright (c) 1982, 2005, Oracle. All rights reserved.
Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
SQL> shutdown immediate;
Database closed.
Database dismounted.
ORACLE instance shut down.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
3. 停止Listener服务
[oracle@wgods ~]$ lsnrctl stop
LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 27-MAR-2013 09:37:21
Copyright (c) 1991, 2005, Oracle. All rights reserved.
Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
The command completed successfully
4. 停止HTTP服务
[oracle@wgods ~]$ service httpd stop
5. 删除$ORACLE_BASE目录下的所有文件
[oracle@wgods ~]$ echo $ORACLE_BASE
/database/oracle
[oracle@wgods ~]$ ls -lrt /database/oracle
total 40
drwxrwx--- 3 oracle oinstall 4096 Dec 14 11:28 product
drwxrwx--- 6 oracle oinstall 4096 Dec 14 11:36 oraInventory
drwxr-x--- 3 oracle oinstall 4096 Dec 14 11:36 oradata
drwxr-x--- 3 oracle oinstall 4096 Dec 14 11:36 admin
drwxr-x--- 3 oracle oinstall 4096 Dec 14 11:37 flash_recovery_area
[oracle@wgods ~]$ rm -rf $ORACLE_BASE/*
6.切换到root账号
[oracle@wgods ~]$ su - root
7.删除/etc/oraInst.loc /etc/oratab文件
[root@wgods ~]# rm /etc/oraInst.loc /etc/oratab
rm: remove regular file `/etc/oraInst.loc'? y
rm: remove regular file `/etc/oratab'? y
注意网上有些文章有删除/usr/bin 下的一些文件,例如 rm /usr/bin/dbhome、rm /usr/bin/oraenv、rm /usr/bin/coraenv。这个在ORACLE 10g下是没有的
8.删除oracle用户(若要重新安装,可以不删除)
[root@wgods ~]# userdel –r oracle
9.删除用户组(若要重新安装,可以不删除)
[root@wgods ~]# groupdel oinstall
[root@wgods ~]# groupdel dba
10.将启动服务删除
[root@OracleTest /root]# chkconfig --del dbora
操作完后,你的ORALCE数据库已经完全、彻底的删除了。
本文链接