SQL:Group Functions

不可否认SQL语句的功能非常强大,但是,在大多数的时候,我们还是会在使用SQL语句的过程中,调用数据库内嵌的函数,通过函数来强化我们SQL语句的功能,以达到我们预期的目的,尤其是在满足一些应用程序对统计报表的需求情况下。
首先,简单说说单行函数(Single-Row Functions)。在Oracle数据库里,单行函数大概可以细分为Character function,Number function,Date function,Conversion function,General function。其实,Oracle数据库支持的函数足够多了,在这里不一一列举具体用法和使用规则了,我们应该清晰的一个概念就是:单行函数可以多次嵌套调用。
另外,大概说一下分组函数(Group Functions)。所谓分组函数跟单行函数的区别就是:单行函数是对数据源中的记录逐条分别作为函数的输入参数来处理,最终得到函数处理的结果。而分组函数就是把数据源中的记录按照某种特定的需求以分组的形式来作为函数的输入参数处理,最终得到处理的结果自然就是以组的形式区分开来。
来简单看一下,使用分组函数的语法规则:
SELECT column, group_function(column)
FROM table
[WHERE condition]
[GROUP BY group_by_expression]
[ORDER BY column];
我们在使用分组函数的时候需要注意的几个地方就是:
①All columns in the SELECT list that are not in group functions must be in the GROUP BY clause.凡是出现在查询列表中的没有应用分组函数的字段必须要出现在GROUP BY子句中,否则报错。
②The GROUP BY column does not have to be in [...]

10g utilities:How to use LogMiner II

在上一篇日志里:我们了解了怎么使用LogMiner工具的第一种使用方法。接着,我们来学习下LogMiner工具的第二种使用方式:
在使用LogMiner之前,我们要确定相关的参数,也就是简单配置一下LogMiner工具使用的“环境”:
①配置一个用于将来存放LogMiner分析日志文件(online redo logs,archived logs)的结果路径和文件,这个路径和文件是映射在文件系统上的。这个文件可以认为是一个字典文件,但是这个字典文件跟数据库的数据字典文件完全是两码子事儿。对应的初始化参数是utl_file_dir,默认情况下,该参数没有配置。
②在调用LogMiner工具之前,在文件系统上生成这个字典文件。
③接下来调用LogMiner工具的方法跟第一种方法就完全类似了。
接下来,进入正式调用流程:
I 首先:以SYS用户登录数据库,检查utl_file_dir初始化参数是否设置,或者设置是否正确,捎带看下数据库版本,以及操作系统版本:
SQL> show user;
USER is “SYS”
SQL> select * from v$version;
BANNER
—————————————————————-
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Prod
PL/SQL Release 10.2.0.1.0 – Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 – Production
NLSRTL Version 10.2.0.1.0 – Production
SQL> !uname -a
Linux Oracle10g 2.6.9-55.ELsmp #1 SMP Wed May 2 [...]

How to use order by clause ?

在我们写SQL语句的时候,会经常用到order by子句来对查询结果进行排序。在这里对order by子句的使用,作一个简单的总结:
1 SQL语句中,order by从句永远并且一定是放在所有从句的最后位置处,也就是说,一个复杂的SQL语句中,可能会包含诸如group by子句,Where 子句等等。但是,不管有多少个从句跟在FROM关键字后面,order by从句一定是出现在所有子句的最后端,因为order by是对所有查询结果集的排序。如:
SQL> SHOW USER;
USER is “HR”
SQL> SELECT employee_id,last_name
2 FROM employees
3 WHERE employee_id>200
4 ORDER BY employee_id
5 ;
EMPLOYEE_ID LAST_NAME
———– ————————-
201 Hartstein
202 Fay
[...]

RMAN v$block_change_tracking

在用RMAN作增量备份时,如果想提高性能的话,可以考虑启用block change tracking.因为,默认情况下,RMAN在备份(包括增量备份)时,会读取所有数据块到内存,然后检查数据块头SCN信息,发现改变了,则认为需要备份,否则不备。那么,如果启启用block change tracking的话,则RMAN可以只需要读取tracking file,发现数据文件头有改变,则被,否则不备。这样,就避免了扫描数据文件中的每一个块了。那么该怎样启用这一特性呢?
首先,数据库至少要MOUNT(因为这一动作要写入控制文件),当然,OPEN状态更是没的说了。
其次,执行命令:SQL> alter database enable block change tracking;(如果启用OMF特性,即参数DB_CREATE_FILE_DEST生效),否则,执行:SQL> alter database enable block change tracking using file ‘/u01/app/tracking/track.dbf ‘reuse;(其中,using file 关键字,表示将来生成的tracing file的路径及文件名,值得注意的是,RAC环境下,该路径一定要指向共享存储上。reuse表示重用,即会覆盖之前的tracking file,如果有的话)
然后,可以通过下面的命令查询block change tracking是否生效,即查询v$block_change_tracking:

SQL> select * from v$block_change_tracking;
最后,如果想要禁用该特性的话,也很简单:
SQL> alter database disable block change tracking;
Database altered.
当然了,禁用该特性的同时,之前生成的tracking file 也一并被删除了!
补充:如果想要对我们的tracking file 进行重命名、重定位操作的话,跟操作普通数据文件一样:

干净关闭数据库,SQL>shutdown immediate/transactional/normal;
生成目标文件,即使用操作系统的文件拷贝命令,cp /u01/app/tracking/track.dbf /u02/app/tracking/new_track.dbf
启动数据库到MOUNT状态,然后执行 SQL>alter database rename file ‘/u01/app/tracking/track.dbf ‘ to ‘/u02/app/tracking/new_track.dbf’;
打开数据库,SQL>alter database open;

SQL> [...]

How to use script and scriptreplay

我们知道:在Windows环境下可以通过一些录制屏幕的软件,把屏幕捕捉下来,如camtasia studio。当然,UNIX/Linux系统下也有相关工具可以达到这个目的,那就是script和scriptreplay:
首先,说说script工具,默认情况下,大多数Linux系统都会自带该工具,具体用法不详细记录了。想说说的就是,比较“好玩儿”的用法:
[oracle@Oracle10g ~]$ script -t 2>oracle.time -a oracle.txt
Script started, file is oracle.txt
[oracle@Oracle10g ~]$ sqlplus /nolog
SQL*Plus: Release 10.2.0.1.0 – Production on Mon Apr 19 22:04:51 2010
Copyright (c) 1982, 2005, Oracle.  All rights reserved.
SQL> conn / as sysdba;
Connected.
SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 – Production
With the Partitioning, OLAP and Data Mining options
[oracle@Oracle10g ~]$ [...]

Create spfile from pfile命令要注意

自从9i版本开始,Oracle数据库开始引进另外一种初始化参数文件,spfile.简单说明一点:①该参数是一个二进制文件,不可以用文本编辑器直接编辑修改;②一般驻留在Database  server端;③对参数的修改在数据库重新启动后仍然生效;④可以通过RMAN工具进行备份。Oracle现在已经不推荐使用PFILE了。数据库在启动的过程当中默认读取参数文件的顺序是:在$ORACLE_HOME/dbs路径下查找并使用名为spfileSID.ora的参数文件启动,次之查找spfile.ora文件,最后才会查找名为initSID.ora的pfile来启动数据库,若这三个文件都没有查到,则数据库在默认情况下就启不来。当然,我们也可以在启动的过程中显示指定使用一个非默认路径下的某个非默认命名的pfile来启动数据库,命令类似于{SQL>startup pfile=/u01/app/…./init.ora}。但是,我们却不可以在启动的过程中显示指定用某个SPFILE来启动数据库!
在这里,我想说明的是:我们在做PFILE与SPFILE互相“倒腾”的过程当中要稍加留意的是,一定要注意参数文件的路径要写全,如果不是利用默认的路径。
例如:我在一次解决问题的过程当中,就犯了一个低级的错误:客户应用环境下当前的SPFILE丢掉了,没有有效地参数文件备份,只有一个不能用的PFILE,实例根本就无法加载了。好在,客户在建数据库的最后一步过程中,保留了脚本。这样,就可以利用该文件来启动数据库了,启动实例之后,我就执行了:SQL>create spfile from pfile;返回结果提示,SPFILE创建成功,然后shutdown,再启动。结果报错,“ORA-03113: 通信通道的文件结束 ORA-01041: 内部错误, hostdef 扩展名不存在”,实例无法启动。我就很诧异了???后来,问题的原因就是执行SQL>create spfile from pfile的时候,没有显示指定pfile=xxxxx,也就是说,利用pfile来创建SPFILE的过程当中,pfile本身就是一个不可以用来启动实例的参数文件,那么利用该文件来创建出来的SPFILE肯定也是一个“废品”文件了。解决问题的方法:重新利用那个脚本中的参数文件启动实例,然后显示的利用该文件来创建一个可用的SPFILE。经过仔细的调整初始化参数,最后数据库有了SPFILE,可以正常启动到OPEN阶段!!!
结论:我们在做参数文件互相转换的过程当中,要谨慎确认,创建文件的源头是不是一个正确的可用的文件。
Send article as PDF to

DBA,SYSDBA,SYSOPER三者的区别

什么是DBA?什么是SYSDBA,什么又是SYSOPER?三者究竟有何联系呢?
在Oracle数据库领域里,很多Oracle初学者(Me 2)很容易被这三个术语迷惑,就其原因还是基础概念没有弄清楚。记得自己刚开始接触Oracle的时候,也是云里雾里,现在基本弄明白,故写出来和大家分享:
DBA:在Oracle数据库里面其实只是一个角色(role)。那么什么是角色呢?可以简单的认为一个角色就是某些个权限的集合体,也就是说把多个系统权限(system privilege),对象权限(object privilege)以及角色(role)揉和在一起,然后赋给一个角色。说白了,Oracle引入角色的概念,其实是为了避免相关的系统权限和对象权限的赋予和回收的复杂性。把一堆系统权限和对象权限以及角色打包之后赋给某个新角色,然后再对这个新角色进行必要的操作就显得相当便捷和方便了。当然,在Oracle里面一个角色是可以赋给另外一个角色的,但是角色的赋给是不能够构成循环回路的。eg:先把role1给role2,然后把role2给role3,那么你就不可以再把role3给role1了。这是Oracle不允许的,其实你也不可以成功执行这样的包含回路角色的授权的!
SYSDBA:说白了就是一种系统权限而已,没有什么神秘的。当我们在SQL*PLUS命令行上执行了类似如下的操作:
SQL>conn / as sysdba;这时候,其实我们是以SYSDBA这个身份去登陆数据库的,我们当前的default schema是SYS。那么SYSDBA这个系统权限究竟允许执行哪些操作呢?
■   Perform STARTUP and SHUTDOWN operations
■   ALTER DATABASE: open, mount, back up, or change character set
■   CREATE DATABASE
■   DROP DATABASE
■   CREATE SPFILE
■   ALTER DATABASE ARCHIVELOG
■   ALTER DATABASE RECOVER
■   Includes the RESTRICTED SESSION privilege
■   Perform STARTUP and SHUTDOWN operations
■   [...]