首页 > Linux操作系统 > Linux操作系统 > ORACLE学习杂记
1、 分区表的数据“移动”,只能一个分区一个分区地进行,其执行的脚本:
Begin
For x in ( select partition_name
From user_tab_partitions
Where table_name=’表名的大写’)
loop
execute immediate
‘alter table 表名 move partition ’||x.partition_name;
end loop;
end;
2、 初识管道(DBMS_PIPE):ORACLE管道不同于linux下的管道,它可以用于多个会话和多个过程间的通信,但是其缓冲区只有1024字节,如果有SEND,而没有接收,就会造成管道塞满。通过实验得出,缓冲区塞满的,EXCEPTION不能捕获到异常,而继续执行其它的操作,也就是说包含管道SEND的过程可能会因此而此而阻塞。
3、 Tkprof使用:
1、打开跟踪(权限不够,可以在DBA下执行)
SQL> alter session set sql_trace=true;
2、执行SQL
SQL> select count(*) from xxxx;
3、关闭跟踪
SQL> alter session set sql_trace=false
4、找到trc文件
目标文件目录在:
SQL> select value from v$parameter where
name='user_dump_dest';
5、变换trc文件为可读格式(在系统命令行下进行,.trc文件是最新改动的文件,且文件位置尽量写的精确点)
tkprof d:\..\ora10g_ora_26292.trc d:\.\tkprof0702 explain=username/password
sort=exeela
sort有exeela:执行时间;prsela:语法分析时间;fchela:提取时间
sys=no:表示阻止所有以sys用户执行的sql被显示出来,默认为YES
aggregate=yes|no 若用户指定AGGREGATE=NO,TKPROF将不会对相同SQL文本的多个用户进行汇总
waits=yes|no Record summary for any wait events found in the trace file.
CALL:每次SQL语句的处理都分成三个部分(Parse,Execute,Fetch)
Parse: 这步将SQL语句转换成执行计划,包括检查是否有正确的授权和所需要用到的表、列以及其他引用到的对象是否存在。
Execute: 这步是真正的由Oracle来执行语句。对于insert、update、delete操作,这步会修改数据,对于select操作,这步就只是确定选择的记录。
Fetch: 返回查询语句中所获得的记录,这步只有select语句会被执行。
COUNT: 这个语句被parse、execute、fetch的次数。
CPU: 这个语句对于所有的parse、execute、fetch所消耗的cpu的时间,以秒为单位。
ELAPSED: 这个语句所有消耗在parse、execute、fetch的总的时间。
DISK: 从磁盘上的数据文件中物理读取的块的数量。一般来说更想知道的是正在从缓存中读取的数据而不是从磁盘上读取的数据。
QUERY: 在一致性读模式下,所有parse、execute、fetch所获得的buffer的数量。 一致性模式的buffer是用于给一个长时间运行的事务提供一个一致性读的快照,缓存实际上在头部存储了状态。
CURRENT: 在current模式下所获得的buffer的数量。一般在current模式下执行insert、update、delete操作都会获取buffer。在current模式下如果在高速缓存区发现有新的缓存足够给当前的事务使用,则这些buffer都会被读入了缓存区中。
ROWS: 所有SQL语句返回的记录数目,但是不包括子查询中返回的记录数目。对于select语句,返回记录是在fetch这步。
4、 异常捕获规则:
1、 针对一种异常,及其相对应的捕获这种异常的EXCEPTION。只要EXCEPTION位于异常代码的相对外层(或同层)且于异常代码之后(即使这个异常位于自治事务中,而EXCEPTION位于外层块中),这个异常就可以被捕获到。
2、 满足规则1的异常代码和EXCEPTION,即使有多个EXCEPTION也只会捕获一次异常(即:做一次针对异常的处理)。
3、 自治事务中没有EXCEPTION来捕获异常,而自治事务因为发生异常提前结束,则仍会执行外层的代码(这是必然的,因为自治事务和外层的事务是相互不影响的),且自治事务的异常会被“最近”的EXCEPTION捕获到(如果这个EXCEPTION能捕获这种异常)。
5、 rdbms/admin下的sql脚本:
在rdbms/admin中有很多的SQL脚本,有的脚本只能是具有DBA权限的用户才能完全执行,如果没有在DBA用户下执行,可能会出现这种情况,有的操作成功执行了,另一些操作因为没有权限而导致编译错误(产生了带有编译错误的对象)。此时要想再在DBA下成功执行这个脚本,可以先把有编译错误的对象从没有权限的用户下删除,在DBA用户下执行脚本,然后再给用户赋权限就可以了。如dbms_sql包。
6、 在一个查询中,对筛选的列进行双层查询计算里,则最外层的列值对于最内层是不可见的(无效的),当然嵌套一层是可以的。例如:
Select a, b, select sum(e.a)
from (select a
from c
where c.b=com.b)
from com;
会报com.b无效的错。
来自 “ ITPUB博客 ” ,链接:https://blog.itpub.net/23065269/viewspace-629538/ ,如需转载,请注明出处,否则将追究法律责任。