关于聚合物化视图
1、单表带count,sum的union 的只加一个flag就可以,单表不带count,sum的需要rowid和flag2、多表关联查询必须有count(*) ,如果有sum,必须对应sum的字段也有count3、多表关联不做sum,count ,需要把关联所有表都加上rowid ,最后加一个flag就行SELECT ss.rowid aa ,zd.rowid bb, ss.ssdf ssdf, ss.ywrq ywrq, ss.ywlsh ywlsh, ss.yhbh yhbh, ss.jgbm jgbm, ss.dybm dybm, ss.zyhy zyhy, ss.ydlb ydlb, zd.tqbh tqbh, ss.zwyf zwyf,'a' marker FROM dw_zw_ljfssmx ss, dw_zw_yhzdxx zd
Oracle数据库维护常用SQL语句集合
1、捕捉运行很久的SQL column username format a12column opname format a16column progress format a8 SELECT Username, Sid, Opname,Round(Sofar * 100 / Totalwork, 0) || '%' AS Progress, Time_Remaining,Sql_TextFROM V$session_Longops, V$sqlWHERE Time_Remaining <> 0AND Sql_Address = AddressAND Sql_Hash_Value = Hash_Value; 2、求DISK READ较多的SQL SELECT St.Sql_TextFROM V$sql s, V$sqltext StWHERE s.Address = St.AddressAND s.Hash_Value = St.Hash_ValueAND s.Disk_Reads > 300;3、求DISK SORT严重的SQL S
存储过程被锁无法编译的解决
select distinct s1.* from V$DB_OBJECT_CACHE oc, v$object_dependency od, dba_kgllock w, v$session s1 where oc.name = 'P_SPS_INTERFACE' and od.TO_OWNER = oc.OWNER and od.TO_NAME = oc.NAME and od.TO_ADDRESS = w.kgllkhdl and w.kgllkuse = s1.SADDR; 得到锁定存储过程的进程PADDR select spid from v$process p where p.addr=(PADDR值) kill -8 spid 杀掉这些进程就可以解锁[@more@]
使用 Oracle Database 10g中的闪回表特性
使用 Oracle Database 10g中的闪回表特性,可以毫不费力地恢复被意外删除的表以下是一个不该发生却经常发生的情况:用户删除了一个非常重要的表—当然是意外地删除—并需要尽快地恢复。(在某些时候,这个不幸的用户可能就是 DBA!)Oracle9iDatabase 推出了闪回查询选项的概念,以便检索过去某个时间点的数据,但它不能闪回 DDL 操作,如删除表的操作。唯一的恢复方法是在另一数据库个中使用表空间的时间点恢复,然后使用导出/导入或其他方法,在当前数据库中重新创建表。这一过程需要 DBA 进行大量工作并且耗费宝贵的时间,更不用说还要
查看表和索引占的空间大小
select sum(bytes)/1024/1024/1024 FROM dba_segments WHERE owner ='DW_USER' AND segment_type ='TABLE' AND segment_name LIKE '%ZW_LJFYSM%' ;select sum(bytes)/1024/1024/1024 FROM dba_segments WHERE owner ='DW_USER' AND segment_type ='INDEX' AND segment_name LIKE '%ZW_LJFYSM%' ;select * FROM dba_segments WHERE owner ='DW_USER' and segment_type ='TABLE' AND segment_name LIKE '%ZW_LJFYSM%' ;select * FROM dba_segments WHERE owner ='DW_USER' and segment_type ='INDEX' and segment_name like '%ZW_LJFYS
oracle 10g 命令查看表空间大小情況
select df.tablespace_name "表空间名",totalspace "总空间M",freespace "剩余空间M",round((1-freespace/totalspace)*100,2) "使用率%"from(select tablespace_name,round(sum(bytes)/1024/1024) totalspacefrom dba_data_filesgroup by tablespace_name) df,(select tablespace_name,round(sum(bytes)/1024/1024) freespacefrom dba_free_spacegroup by tablespace_name) fswhere df.tablespace_name=fs.tablespace_name;[@more@]
oracle多个实例启动方法
SQL> create pfile='f:initparky1.ora' from spfile='f:initparky.ora';SQL> startup pfile=''f:initparky1.ora''[@more@]
oracle 多个实例监听不到
打开listener.ora修改SID_LIST_LISTENER 部分,例子如下,改完重启监听SID_LIST_LISTENER = (SID_LIST = (SID_DESC = (SID_NAME = PLSExtProc) (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1) (PROGRAM = extproc) ) (SID_DESC = (GLOBAL_DBNAME =orcl) (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1) (SID_NAME =orcl) ) (SID_DESC = (GLOBAL_DBNAME =orcl2) (ORACLE_HOME = /oracle/app/oracle/product/11.2.0/dbhome_1) (SID_NAME =o
Oracle中的rownum
rownum是Oracle中的伪列,并不真正存在于表中,它只在查询的时候产生。也就是说表中的数据并没有一个真正的物理的列去表示一条记录是第几行,而只是在查询中才会对这些行进行标识。那到底rownum是什么时候赋给行的呢?rownum是在where条件过滤之后,在任何排序(order by)或聚集(aggregation)之前赋给行的。同时,只有当rownum被分配给行后才会递增。rownum的初始值为1。rownum在查询中产生后就不再变化rownum被分配的过程大致如下:rownum = 1for x in ( select * from A )loopif ( x satisifies the predicate )thenOUTPUT the rowro
ORACLE 中ROWNUM用法总结! (转)
ORACLE 中ROWNUM用法总结! 对于 Oracle 的 rownum 问题,很多资料都说不支持>,>=,=,between...and,只能用以上符号(<、<=、!=),并非说用>,>=,=,between..and 时会提示SQL语法错误,而是经常是查不出一条记录来,还会出现似乎是莫名其妙的结果来,其实您只要理解好了这个 rownum 伪列的意义就不应该感到惊奇,同样是伪列,rownum 与 rowid 可有些不一样,下面以例子说明假设某个表 t1(c1) 有 20 条记录如果用 select rownum,c1 from t1 where rownum < 10, 只要是用小于号,查出来的结果很容易地与一般理解在概念上能
对sql_trace和dbms_monter跟踪的一点总结(摘录)
对sql_trace和dbms_monter跟踪的一点总结 以下是事件的有效trace级别: Level 0 tracing被关闭。这相当于设置sql_trace=false。 Level 1 标准SQL trace信息(SQL_TRACE=TRUE)。这是默认级别。 Level 4 SQL trace信息加绑定变量值。 Level 8 SQL trace信息加等待事件信息。 Level 12 SQL trace 信息,等待事件信息,和绑定变量值。 两个参数 alter session set timed_statistics = true; alter session set max_dump_file_size = unlimited; 你能使用trace事件10046来跟踪用户会话或Oracle后台进程。
在10g中使用oradebug trace工具
在10g中使用oradebug trace工具,因为专用服务的SPID数字也被写到trace文件。另外,你也能得到真正的跟踪文件名如下: 1、跟踪自己进程 oradebug setmypid oradebug event 10046 trace name context forever,level 8 oradebug tracefile_name --让会话执行SQL脚本或程序一段时间 --关闭trace Oradebug event 10046 trace name context off; 2、跟踪其他进程 SELECT s.username, p.spid os_process_id, p.pid oracle_process_id FROM v$session s, v$proce
Oracle的锁机制归纳总结
锁是防止在两个事务操作同一个数据源(表或行)时交互破坏数据的一种机制。Oracle采用封锁技术保证并发操作的可串行性。Oracle的锁分为两大类:数据锁(也称DML锁)和字典锁。字典锁是Oracle DBMS内部用于对字典表的封锁。字典锁包括语法分析锁和DDL锁,由DBMS在必要的时候自动加锁和释放锁,用户无机控制。Oracle主要提供了5种数据锁:共享锁(Share Table Lock,简称S锁)、排它锁(Exclusive Table Lock,简称X锁)、行级锁(Row Share Table Lock,简称RS锁)、行级排它锁(Row Exclusive Table Lock,简称RX锁)和共享行级排它锁(Sh
oracle 10G 物化视图新特性(测试效果不理想)
物化视图 利用强制查询重写和新的强大的调整顾问程序 — 它们使您不再需要凭猜测进行工作 — 的引入,在 10g 中管理物化视图变得更加容易 物化视图 (MV) — 也称为快照 — 一段时间来已经广泛使用。MV 在一个段中存储查询结果,并且能够在提交查询时将结果返回给用户,从而不再需要重新执行查询 — 在查询要执行几次时(这在数据仓库环境中非常常见),这是一个很大的好处。物化视图可以利用一个快速刷新机制从基础表中全部或增量刷新。 假定您已经定义了一个物化视图,如下: create materialized view mv_hotel_r
oracle 10g 进程跟踪命令
1、打开跟踪 alter session set sql_trace=true;2、查看当前跟踪放到哪个文件select c.value || '/' || d.instance_name || '_ora_' || a.spid || '.trc' trace from v$process a, v$session b, v$parameter c, v$instance d where a.addr = b.paddr and b.audsid = userenv('sessionid') and c.name = 'user_dump_dest'3、执行要跟踪的sql4、关闭跟踪alter session set sql_trace=true;5、打开跟踪文件分析[@more@]ora
关于oracle sql变量绑定提高效率
create or replace procedure proc1asbegin for i in 1 .. 10000 loop execute immediate 'insert into t values ( :x )' using i; end loop;end;create or replace procedure proc2 as begin for i in 1 .. 10000 loop execute immediate 'insert into t values ( '||i||')'; end loop; end;上面俩个存储过程实现功能一样用sqlplus分别执行SQL> exec proc1;PL/SQL 过程已成功完成。已用时间: 00: 00: 00.96SQL> exec proc2;PL/SQL 过程已成功完成。已用时间: 00: 00: 03.00尽然差了三倍的时间,看来变量
关于使用PRO*C编程的一些简单说明和例子
PROC是ORACLE数据库提供的编程接口之一,其应用十分的广泛,本文通过一个具体的例子,介绍PROC编程的一些经验及应注意的地方。 例子程序: <code>; #include <stdio.h>; #include <string.h>; #include <stdlib.h>; #include <sqlda.h>; #include <sqlcpr.h>; EXEC SQL INCLUDE sqlca; /*RELEASE_CURSOR=YES 使PROC 在执行完后释放与嵌入SQL有关资源*/ EXEC ORACLE OPTION (RELEASE_CURSOR = YES); EXEC SQL BEGIN DECLARE SECTION; varchar vc_user[20]; long
proc 开发环境配置(测试通过)
第一步.bash_profile配置LD_LIBRARY_PATH=$ORACLE_HOME/lib:/usr/lib:/usr/local/lib第二步/data/oracle/product/10.2/precomp/admin/pcscfg.cfg修改编译环境加入code=cppcpp_suffix=ccparse=noneSQLCHECK=SEMANTICS 测试vi shi.pc#include<iostream>using namespace std;#include "sqlca.h"EXEC SQL BEGIN DECLARE SECTION ;char *uid="dw_user/dw_user@pmias";EXEC SQL END DECLARE SECTION;int main(){EXEC SQL CONNECT :uid;cout<<sqlca.sqlerrm.sqlerrmc<<endl;if(sqlca.sqlcode == 0)cout<
通过分析SQL语句的执行计划优化SQL(总结)
第1章 性能调整综述第2章 有效的应用设计第3章 SQL语句处理的过程第4章 ORACLE的优化器第5章 ORACLE的执行计划 访问路径(方法) -- access path 表之间的连接 如何产生执行计划 如何分析执行计划 如何干预执行计划 - - 使用hints提示 具体案例分析第6章 其它注意事项附录第1章 性能调整综述 Oracle数据库是高度可调的数据库产品。本章描述调整的过程和那些人员应与Oracle服务器的调整有关,以及与调整相关联的操作系统硬件和软件。本章包括以下方面:l 谁来调整系统?l 什么
oracle10g官方例子(很不错)
http://www.oracle.com/technology/global/cn/obe/10gr2_db_single/index.htm[@more@]