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) 关于前面
LMT和DMT下存储参数的异同
假设当前数据库的DB_BLOCK_SIZE为D(K),建表的DDL设定了INITIAL为T,MINEXTENTS为S,PCTINCREASE为P,NEXT为N本文的DB_BLOCK_SIZE=8K1、字典管理MIN_EXTENT:可以是大于0的任意整数PCT_INCREASE:INITIAL:,则如果建表时设定的INITIAL设定的值大于2*D,则实际INITIAL=CEIL(T/D)*D;如果建表时设定的INITIAL设定的值小于等于2*D,则实际INITIAL值为2*D。如:EXP-1create table test1(a number)tablespace system--字典管理表空间storage(initial 1knext 1kminextents 4pctincrease 20);在这个例子中,实际INITIAL为16K;EXP-2create table t
Oracle时间日期操作
sysdate+(5/24/60/60) 在系统时间基础上延迟5秒sysdate+5/24/60 在系统时间基础上延迟5分钟sysdate+5/24 在系统时间基础上延迟5小时sysdate+5 在系统时间基础上延迟5天add_months(sysdate,-5) 在系统时间基础上延迟5月add_months(sysdate,-5*12) 在系统时间基础上延迟5年上月末的日期:select last_day(add_months(sysdate, -1)) from dual;本月的最后一秒:select trunc(add_months(sysdate,1),'MM') - 1/24/60/60 from dual本周星期一的日期:select trunc(sysdate,'day')+1 from dual年初至今的天数:select ceil(sysdate - trunc(sysd
Oracle10g释放flash_recovery_area
ORA-19815: WARNING: db_recovery_file_dest_size of 2147483648 bytes is 100.00% used, and has 0 remaining bytes available.*************************************************************You have the following choices to free up space fromflash recovery area:1. Consider changing your RMAN retention policy. If you are using dataguard, then consider changing your RMAN archivelog deletion policy.2. Backup files to tertiary device such as tape using the RMAN command BACKUP RECOVERY AREA.3. Add disk
查找bad sql
一些查找bad sql的方法: column sql_text format a80;-- 值得怀疑的SQL 来自http://www.ixora.com.au/select substr(to_char(s.pct, '99.00'), 2) || '%' load, s.executions executes, p.sql_textfrom ( select address, disk_reads, executions, pct, rank() over (order by disk_reads desc) ranking from ( select address, disk_reads, executions, 100 * ratio_to_report(disk_reads) over () pct from sys.v_$sql where command_type != 47 ) where dis
监控索引的使用(2)
2、oracle9i中如何确定索引的使用情况 在oracle9i中,情况会简单得多,因 为有一个新得字典视图V$SQL_PLAN存储了实际计划,这些计划用于执行共享SQL区中得语句。V$SQL_PLAN视图很类似与计划表,但 V$SQL_PLAN使用ADDRESS和HASH_VALUE列 来识别语句, 而计划表使用用户提供得STATEMENT_ID来识别语句。下面的SQL显示了在一个oracle9i数据库中,由出现在共享SQL区中语句使用的所有 索引 [/code] select object_owner, object_name, options, count(*) from v$sql_plan where operation='INDEX' and object_o
ORA-03113错误分析
版本历史2003-5-22 v0.1 Created by Fenng (Fenng@itpub.net)版权声明转载请注明作者及出处----------------------前言----------------------每一个DBA在进行数据库管理的过程中不可避免的要遇到形形色色的错误(ORA-xxxx).有些错误由于频繁出现、原因复杂而被DBA们戏称之为"经典的错误".其中ORA-3113 "end of file on communication channel" 就是这样的一个.我们可以简单的把这个错误理解为Oracle客户端进程和数据库后台进程连接中断.不过,导致这个错误的原因实际上有很多种,对数据库设置不当、任何能导致数据库后台
监控索引的使用(1)
研究发现,oracle数据库使用的索引不会超过总数的25%,或者不易他们期望被使用的方式使用。通过 监控数据库索引的使用,释放那些未被使用的索引,从而节省维护索引的开销,优化性能。 1、在oracle8i中,确定使用了那个索引的方法意味着要对存在语共享SQL区中的所有语句运行EXPLIAN PALN,然后查询计划表中的OPERATION列,从而识别有OBJECT_OWNER和OBJECT_NAME列所确定的那个索引上的索引访问。 下面是一个监控索引使用的脚本,这个脚本仅仅是一个样品,在某种条件下成立: 条件: 运行这个脚本的用户拥有权限解释所有
oracle性能调整(2)
2 调整 Client/Server 模式下的网络 I/O Client/Server环境中的应用处理是分布在客户应用程序和数据库服务程序之间的。在 Client/Server环境中Client与Server之间的网络I/O是整个系统性能提高的瓶颈,一个客户应用程序引起的网络I/O越少,应用及整个系统的性能越好。减少网络I/O的最重要的一条原则:将应用逻辑集中在数据库服务器中。2.1 当为应用建表时,应当为一些有特殊要求的数据加上适当的完整性约束,这样就能实现由数据库本身而不是应用程序来约束数据符合一定的条件。数据库服务器端的完整约束的执行操作是在比 使用Oracle数据
recursive calls, db block gets,consistent gets,physical Reads
Recursive Calls. Number of recursive calls generated at both the user and system level. Oracle Database maintains tables used for internal processing. When it needs to change these tables, Oracle Database generates an internal SQL statement, which in turn generates a recursive call. In short, recursive calls are basically SQL performed on behalf of your SQL. So, if you had to parse the query, for example, you might have had to run some other queries to get data dictionary information. Thes
oracle性能调整(1)
Oracle 数据库广泛应用在社会的各 个领域,特别是在Client/Server模式的应用,但是应用开发者往往碰到整个系统的性能随着数据量的增大显著下降的问题,为了解决这个问题,从以 下几个方面:数据库服务器、网络I/O、应用程序等对整个系统加以调整,充分发挥Oracle的效能,提高整个系统的性能。1 调整数据库服务器的性能 Oracle数据库服务器是整个系统的核心,它的性能高低直接影响整个系统的性能,为了调整Oracle数据库服务器的性能,主要从以下几个方面考虑:1.1 Oracle 调整操作系统以适合Oracle数据库服务器运行 数据库服务器很
oracle日期函数(5)
查出任一年月所含的工作日CREATE OR REPLACE FUNCTION Get_WorkingDays( ny IN VARCHAR2) RETURN INTEGER IS/*------------------------------------------------------------------------------------------函数名称:Get_WorkingDays中文名称:求某一年月中共有多少工作日作者姓名: XINGPING编写时间: 2004-05-22输入参数:NY:所求包含工作日数的年月,格式为yyyymm,如200405返 回 值:整型值,包含的工作日数目。算法描述: 1).列举出参数给出的年月中的每一天。这里使用了一个表(ljrq是我的库中的一张表。这个表可以是有权访问的
删除重复行
create table students(id number(15,0),area varchar2(10),stu_type varchar2(2),score number(20,2));create index idx_students on students(id);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(2, '222', 'g', 60 );insert into students valu
oracle日期函数(4)
在Oracle中实现时间相加处理-- 名称:Add_Times-- 功能:返回d1与NewTime相加以后的结果,实现时间的相加-- 说明:对于NewTime中的日期不予考虑-- 日期:2004-12-07-- 版本:1.0-- 作者:Kevincreate or replace function Add_Times(d1 in date,NewTime in date) return date is hh number; mm number; ss number; hours number; dResult date; begin -- 下面依次取出时、分、秒 select to_number(to_char(NewTime,'HH24')) into hh from dual; select to_number(to_char(NewTime,'MI')) into mm from dual; select to_n
oracle日期函数(3)
常用日期数据格式(该段为摘抄)Y或YY或YYY 年的最后一位,两位或三位 Select to_char(sysdate,’YYY’) from dual; 002表示2002年 SYEAR或YEAR SYEAR使公元前的年份前加一负号 Select to_char(sysdate,’SYEAR’) from dual; -1112表示公元前111 2年 Q 季度,1~3月为第一季度 Select to_char(sysdate,’Q’) from dual; 2表示第二季度① MM 月份数 Select to_char(sysdate,’MM’) from dual; 12表示12月 RM 月份的罗马表示 Select to_char(sysdate,’RM’) from dual; IV表示4月 Month 用9个字符长度表示的月份名 Select to_char(
oracle日期函数(2)
1。Sysdate 当前日期和时间SQL> Select sysdate from dual;SYSDATE----------21-6月 -052。Last_day 本月最后一天 SQL> Select last_day(sysdate) from dual;LAST_DAY(S----------30-6月 -053。Add_months(d,n) 当前日期d后推n个月 用于从一个日期值增加或减少一些月份 date_value:=add_months(date_value,number_of_months)SQL> Select add_months(sysdate,2) from dual;ADD_MONTHS----------21-8月 -054。Months_between(f,s) 日期f和s间相差月数 SQL> select months_between(sysdate,to_date('2005-11-12','yyyy-mm-dd'))f
oracle日期函数(1)
trunc(sysdate,'Q') --本季度第一天trunc(sysdate,'D') --本周的第一天(周日)查询Oracle日期格式 ----------------------------------select * from nls_database_parameters; 得到结果如下表: 表中NLS_DATE_FORMAT表示日期格式.PARAMETER VALUE ----------------------------------- ----------------------------------- NLS_LANGUAGE AMERICAN NLS_TERRITORY AMERICA NLS_CURRENCY $ NLS_ISO_CURRENCY AMERICA NLS_NUMERIC_CHARACTERS ., NLS_CHARACTERSET ZHS16GBK NLS_CALENDAR GREGORIAN NLS_DATE_FORMAT DD-MON-RR NLS_DATE_LANGUA
shared_pool_spare_free.sql
select avg(v.value) shared_pool_size,greatest(avg(s.ksmsslen) - sum(p.ksmchsiz), 0) spare_free,to_char(100 * greatest(avg(s.ksmsslen) - sum(p.ksmchsiz), 0) / avg(v.value),'99999') || '%' wastagefrom sys.x$ksmss s, sys.x$ksmsp p,sys.v$parameter vwhere s.inst_id = userenv('Instance') andp.inst_id = userenv('Instance') andp.ksmchcom = 'free memory' ands.ksmssnam = 'free memory' andv.name = 'shared_pool_size';[@more@]
10R2 group by 无序
以往以为group by 后的记录集是排序的,而且在9i环境下屡试如此,最近在升级过程中终于发现了这种写法的不严谨之处。也可能是10gR2的内部算法开始有变,至少10gR2之前的版本group by是排序结果集,但10gR2不灵了!前几天从9i升级到10gR2时,以往排好序的报表突然出现了乱序,查代码,发现select ... from tb group by ..没有强制使用order by ,虽然在以前的环境中得到的就是期望的排序结果集,可到了10gR2里不灵了!!!仔细翻阅了Oracle各版本的官方文档http://tahiti.oracle.com/ 均明确注明:The GROUP BY clause groups rows but doe
Oracle常见等待事件
Oracle的等待事件是衡量Oracle运行状况的重要依据及指标。等待事件的概念是在Oracle7.0.1.2中引 入的,大致有100个等待事件。在Oracle 8.0中这个数目增加到了大约150个,在Oracle8i中大约有200个事件,在Oracle9i中大约有360个等待事件。主要有两种类别的等待事 件,即空闲(idle)等待事件和非空闲(non-idle)等待事件。 空闲事件指Oracle正等待某种工作,在诊断和优化数据库的时候,我们不用过多注意这部分事件。 常见的空闲事件有: • dispatcher timer • lock element cleanup • Null event •