分析执行计划优化SQL<1>SQL语句处理的过程(转)
第1章 SQL语句处理的过程 在调整之前我们需要了解一些背景知识,只有知道这些背景知识,我们才能更好的去调整sql语句。本节介绍了SQL语句处理的基本过程,主要包括: · 查询语句处理 · DML语句处理(insert, update, delete) · DDL 语句处理(create .. , drop .. , alter .. , ) · 事务控制(commit, rollback) SQL 语句的执行过程(SQL Statement Execution) 图3-1 概要的列出了处理和运行一个sql语句的需要各个重要阶段。在某些情况下,Oracle运行sql的过程可能与下面列出的各个阶段的顺序有所不同。如DEFIN
数据库中分组字符串相加
--该测试脚本可以直接运行--现在想把数据库中数据按照固定字段分组相加,这里总结了四种方法。--创建测试表、添加测试数据create table test(id varchar2(10),mc varchar2(50));insert into test values('1','11111');insert into test values('1','22222');insert into test values('2','11111');insert into test values('2','22222');insert into test values('3','11111');insert into test values('3','22222');insert into test values('3','33333');commit;--方法一:set serveroutput on size 1000000 declare union_mc varchar2(
一个有趣的sql
表Apartid matid partweightccc cccc 1bbb bbbb 2ddd dddd 3eee eeee 4fff ffff 5请问用什么语句可实现从表A到下面格式的显示,谢谢......partid matid partweight testccc cccc 1 1/1bbb bbbb 2 1/2bbb bbbb 2 2/2ddd dddd 3 3/3ddd dddd 3 1/3ddd dddd 3 2/3eee eeee 4 1/4eee eeee 4 2/4eee eeee 4 3/4eee eeee 4 4/4fff ffff 5 1/5fff ffff 5 2/5fff ffff 5 3/5fff ffff 5 4/5fff ffff 5 5/5解答如下:SQL> SELECT * FROM TEST;PARTID MATID PARTWEIGHT-------------------- -----------------------------------------------------
java程序接收oracle的dbms_output信息
The following is an excerpt from Tom Kyte's expert one on one Oracle. Is it what you want?Teaching other environments about DBMS_OUTPUTBy default, tools such as SQL*PLUS and SVRMGRL are DBMS_OUTPUT aware. Most other environments are not. For example, your Java/JDBC program is definitely not DBMS_OUTPUT aware. We'll see in this section how to make Java/JDBC DBMS_OUTPUT aware. The same principles used below apply equally to any programming environment. The methods I use with Java can be easily app
oracle分析函数
oracle分析函数--SQL*PLUS环境--1、GROUP BY子句 --CREATE TEST TABLE AND INSERT TEST DATA.create table students(id number(15,0),area varchar2(10),stu_type varchar2(2),score number(20,2));insert into students values(1, '111', 'g', 80 );insert into students values(1, '111', 'j', 80 );insert into students values(1, '222', 'g', 89 );insert into students values(1, '222', 'g', 68 );insert into students values(2, '111', 'g', 80 );insert into students values(2, '111', 'j', 70 );insert into students values(
oracle正则表达式
oracle的正则表达式(regular expression)简单介绍目前,正则表达式已经在很多软件中得到广泛的应用,包括*nix(Linux, Unix等),HP等操作系统,PHP,C#,Java等开发环境。Oracle 10g正则表达式提高了SQL灵活性。有效的解决了数据有效性, 重复词的辨认, 无关的空白检测,或者分解多个正则组成的字符串等问题。Oracle 10g支持正则表达式的四个新函数分别是:REGEXP_LIKE、REGEXP_INSTR、REGEXP_SUBSTR、和REGEXP_REPLACE。它们使用POSIX 正则表达式代替了老的百分号(%)和通配符(_)字符。特殊字符:'^' 匹配输入字符串的开始位置,在方
浅谈oracle复合数据类型 (2)
二、集合类似C语言中的数组,在ORACLE7.3及以前的版本中只有一种集合称为PL/SQL表,这种类型的集合依然保留,就是索引(INDEX_BY)表。PL/SQL有三种类型的集合a、Index_by表b、嵌套表c、VARRAY三种类型的集合之间的差异,包括数据绑定、稀疏性(sparsity)、数据库中的存储能力都有不相同。数据绑定:绑定涉及到集合中元素数量的限制,VARRAY集合中的元素的数量是有限,Index_by和嵌套表则是没有限制的。稀疏性(sparsity):稀疏性描述了集合的下标是否有间隔,Index_by表和嵌套表可以是稀疏的,VARRAY类型的集合则是紧密的,它的下标之间没有
修改global_name
conn / as sysdbaupdate props$ set value$ = 'oradb' where name = 'GLOBAL_DB_NAME';commit;shutdown immediatestartup select global_name from global_name;[@more@]
获得数据中的数字部分
--该脚本可以直接拷贝运行--现有字符串'23456中国3-00=.,45',想得到结果2345630045--方法一:translate函数select translate('23456中国3-00=.,45','0123456789'||'23456中国3-00=.,45','0123456789') from dual;--方法二:自定义函数。create or replace function f_filter_str(var_str varchar) return varcharisvar_str_new varchar2(2000);beginfor i in 1..length(var_str) loopif ascii(substr(var_str,i,1))>=48 and ascii(substr(var_str,i,1))<=57 thenvar_str_new := var_str_new || substr(var_str,i,1);end if;end loo
DBA脚本 (3)
下面按类别列出一些ORACLE用户常用数据字典的查询使用方法。 一、用户 查看当前用户的缺省表空间 SQL>select username,default_tablespace from user_users;查看当前用户的角色SQL>select * from user_role_privs;查看当前用户的系统权限和表级权限SQL>select * from user_sys_privs;SQL>select * from user_tab_privs; 二、表 查看用户下所有的表 SQL>select * from user_tables; 查看名称包含log字符的表 SQL>select object_name,object_id from user_objects
DBA脚本 (2)
二、性能监控 1、数据缓冲区的命中率已经不是性能调整中的主要问题了,但是,过低的命中率肯定是不可以的,在任何情况下,我们必须保证有一个大的data buffer和一个高的命中率。 这个语句可以获得整体的数据缓冲命中率,越高越好 SELECT a.VALUE + b.VALUE logical_reads, c.VALUE phys_reads, round(100*(1-c.value/(a.value+b.value)),4) hit_ratio FROM v$sysstat a,v$sysstat b,v$sysstat c WHERE a.NAME='db block gets' AND b.NAME='consistent gets' AND c.NAME='physical reads' 2、库缓冲说明了SQL语句的重载率,当然,一
DBA脚本 (1)
=========================================================== 一、数据库构架体系 1、表空间的监控是一个重要的任务,我们必须时刻关心表空间的设置,是否满足现在应用的需求,以下的语句可以查询到表空间的详细信息 SELECT TABLESPACE_NAME,INITIAL_EXTENT,NEXT_EXTENT,MIN_EXTENTS, MAX_EXTENTS,PCT_INCREASE,MIN_EXTLEN,STATUS, CONTENTS,LOGGING, EXTENT_MANAGEMENT, -- Columns not available in v8.0.x ALLOCATION_TYPE, -- Remove these columns if
性能分析SQL
-用于查看哪些实例的哪些操作使用了大量的临时段 SELECT to_number(decode(SID, 65535, NULL, SID)) sid, operation_type OPERATION,trunc(EXPECTED_SIZE/1024) ESIZE, trunc(ACTUAL_MEM_USED/1024) MEM, trunc(MAX_MEM_USED/1024) "MAX MEM", NUMBER_PASSES PASS, trunc(TEMPSEG_SIZE/1024) TSIZE FROM V$SQL_WORKAREA_ACTIVE ORDER BY 1,2; ---查询有热块查询的SQL语句 select hash_value from v$sqltext a, (select distinct a.owner,a.segment_name,a.segment_type from dba_
去除数据中的空格
--去除数据中的空格(>=1),用逗号替换/*本例子针对http://www.itpub.net/showthread.php?s=&threadid=608001&perpage=10&pagenumber=1*/create or replace function f_replace (str in varchar2) return varchar2asspace_counter number(18,0) default 0;str_out varchar2(2000);beginfor i in 1..length(str) loopif ascii(substr(str,i,1)) != 32 thenspace_counter := 0;str_out := str_out||substr(str,i,1);elsespace_counter := space_counter + 1;if space_counter = 1 thenstr_out := str_out || ',';end if;end i
oracle10g自动分析任务
dbms_schedulerselect owner,job_name,program_name from dba_scheduler_jobs;停止启动分析:exec dbms_scheduler.disable('SYS.GATHER_STATS_JOB');exec dbms_scheduler.enable('SYS.GATHER_STATS_JOB');查询创建好的PROGRAM:SQL> SELECT PROGRAM_NAME,PROGRAM_ACTION FROM DBA_SCHEDULER_PROGRAMS2 WHERE PROGRAM_NAME='GATHER_STATS_PROG'3 ;PROGRAM_NAME PROGRAM_ACTION------------------------------ --------------------------------------------------------------------------------GATHER_STATS_PROG dbms_stats.gather_da
查看和存储过程相关对象
ORACLE:SELECT * FROM USER_DEPENDENCIES WHERE NAME='P_CHECK_SITE' AND REFERENCED_TYPE='TABLE'SQLSERVER:select name from sysobjects where id in(select distinct bb.depid as kkfrom sysobjects join sysdepends bb on bb.id = sysobjects.idwhere sysobjects.name='存储过程名')[@more@]
一个简单的oracle函数返回数组的例子
create or replace type t_ret_table is table of varchar2(20);create or replace function f_test(var_num in integer) return t_ret_table isvar_out t_ret_table;beginvar_out := t_ret_table();var_out.extend(var_num);for i in 1..var_num loopvar_out(i) := i;end loop;return var_out;end f_test;/set serverout ondeclareaa t_ret_table;beginaa := f_test(10);for i in 1..aa.count loopdbms_output.put_line(aa(i));end loop;end;/一个分隔字符串的例子:把'a|||b|||c'字符串分隔成abccreate or replace function f_test(var_
在oracle10g中可使得排序不区分大小写
SQL> select * from test order by id;ID MC-------------------- ------------------------------------------------------------A AAAAAB BBBBBa aaaaab bbbbb执行计划----------------------------------------------------------Plan hash value: 2007178810---------------------------------------------------------------------------| Id | Operation | Name | Rows | Bytes | Cost (%CPU)| Time |---------------------------------------------------------------------------| 0 | SELECT STATEMENT | | 4 | 176 | 4 (25)|
误删除dual表的解决办法
1 ) Error 980 during db open is causing the shut down of the database2 ) Need to create the Dual Table to resolve the issue (which was not possible in the mount stage)Workaround=========3 ) Set the following parameter in the init.orareplication_dependency_tracking = FALSE4 ) Startup the database5 ) Create the Dual Table and Dual Public SynonymCREATE TABLE "SYS"."DUAL"( "DUMMY" VARCHAR2(1)) PCTFREE 10 PCTUSED 4;Insert Into Dual Values ('X');Commit;Grant Select On Dua
10g和9i执行计划差异
在oracle9i中执行计划如下分析:SQL> select ename,dname from emp, dept where emp.deptno=dept.deptno and dept.dname in ('ACCOUNTING','RESEARCH','SALES','OPERATIONS'); Execution Plan ---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 NESTED LOOPS 2 1 TABLE ACCESS (FULL) OF 'EMP' 3 1 TABLE ACCESS (BY INDEX ROWID) OF 'DEPT' 4 3 INDEX (UNIQUE SCAN) OF 'PK_DEPT' (UNIQUE) 关于前面