博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理

随笔分类 -  17管理DBA-Oracle常见问题

摘要:在实际工作中经常要看某个sql语句的执行计划,例如: 在sqlplus使用命令SET AUTOTRACE ON后,执行计划显示如下: SQL>set autotrace on SQL> select count(*) from emp; COUNT(*)---------- 12 Execution Plan---------------------------------------------------------- 0 SELECT STATEMENT Optimizer=CHOOSE 1 0 SORT (AGGREGATE) 2 1 TABLE ACCESS (FULL) 阅读全文

posted @ 2012-08-29 17:48 徐正柱- 阅读(1290) 评论(0) 推荐(0)

摘要:转摘:http://www.cnblogs.com/preftest/archive/2010/11/14/1876856.html1、监控等待事件select event,sum(decode(wait_time,0,0,1)) prev, sum(decode(wait_time,0,1,0)) curr,count(*)from v$session_wait group by event order by 4;Lock wait occur when a session attempts to acquire a lock that is already held by another 阅读全文

posted @ 2012-08-27 16:48 徐正柱- 阅读(13080) 评论(2) 推荐(1)

摘要:Top 10 by Buffer Gets:set linesize 100set pagesize 100SELECT * FROM(SELECT substr(sql_text,1,40) sql, buffer_gets, executions, buffer_gets/executions "Gets/Exec", hash_value,addressFROM V$SQLAREA WHERE buffer_gets > 10000ORDER BY buffer_gets DESC)WHERE rownum <= 10;Top 10 by Physical 阅读全文

posted @ 2012-08-16 17:55 徐正柱- 阅读(824) 评论(0) 推荐(0)

摘要:Oracle Hint Hint 是Oracle 提供的一种SQL语法,它允许用户在SQL语句中插入相关的语法,从而影响SQL的执行方式。因为Hint的特殊作用,所以对于开发人员不应该在代码中使用它,Hint 更像是Oracle提供给DBA用来分析问题的工具 。在SQL代码中使用Hint,可能导致非常严重的后果,因为数据库的数据是变化的,在某一时刻使用这个执行计划是最优的,在另一个时刻,却可能很差,这也是CBO 取代RBO的原因之一,规则是死的,而数据是时刻变化的,为了获得最正确的执行计划,只有知道表中数据的实际情况,通过计算各种执行计划的成本,则其最优,才是最科学的,这也是CBO的工作机.. 阅读全文

posted @ 2012-08-11 17:05 徐正柱- 阅读(475) 评论(0) 推荐(0)

摘要:在Oracle 9i以上,Oracle有时候会选择将B-Tree索引进行BITMAP转换来进行SQL执行,从而导致极其恶劣的执行计划。该转换由隐藏参数_b_tree_bitmap_plans决定。如果该参数为true,则进行转换,否则不进行转换。而8i里,该参数缺省为false,所以只有存在bitmap索引时才会考虑将B树索引转换为bitmap; 而到了9i里,该参数缺省为true了,则对任何索引都有可能进行bitmap转换。解决办法有两个:1.通过过对_b_tree_bitmap_plans参数调整,禁用将B-tree索引转换成位图索引 alter system set "_b_t 阅读全文

posted @ 2012-08-06 10:32 徐正柱- 阅读(775) 评论(0) 推荐(0)

摘要:2011-11-25 11:37 oracle 关闭和开启归档日志一 设置为归档方式1 sql> archive log list; #查看是不是归档方式2 sql> alter system set log_archive_start=true scope=spfile; #启用主动归档 sql> alter system set log_archive_dest=''location=/oracle/ora9/oradata/arch'' scope=spfile; #设置归档路径 sql> alter system set log_ 阅读全文

posted @ 2012-08-02 12:02 徐正柱- 阅读(751) 评论(0) 推荐(0)

摘要:Oracle的普通表没有办法通过修改属性的方式直接转化为分区表,必须通过重建的方式进行转变,下面介绍三种效率比较高的方法,并说明它们各自的特点。方法一:利用原表重建分区表。步骤:SQL> CREATE TABLE T (ID NUMBER PRIMARY KEY, TIME DATE);表已创建。SQL> INSERT INTO T SELECT ROWNUM, CREATED FROM DBA_OBJECTS;已创建6264行。SQL> COMMIT;提交完成。SQL> CREATE TABLE T_NEW (ID, TIME) PARTITION BY RANGE 阅读全文

posted @ 2012-08-01 15:41 徐正柱- 阅读(489) 评论(0) 推荐(0)

摘要:select rowid,dbms_rowid.rowid_object(rowid) data_object_id#,dbms_rowid.rowid_relative_fno(rowid) file#,dbms_rowid.rowid_block_number(rowid) block#,dbms_rowid.rowid_row_number(rowid) row#,b.emp_id,B.EMP_NAMEfrom dim_employee b---where b.rowid='AAAQwWAAEAAAhvfAAD' 阅读全文

posted @ 2012-08-01 11:04 徐正柱- 阅读(405) 评论(0) 推荐(0)

摘要:表空间的空间监控表空间的空间使用其实是一个需要特别注意的问题,因为数据文件不可扩展而导致表空间的空间不够,可能导致无法写入任何新的数据,而甚至导致数据库的停止。以下的语句可以监控表空间的空间利用情况,如果使用了9i的完全临时表空间,则加入后半部分用于检测临时表空间。SELECT D.TABLESPACE_NAME,SPACE "SUM_SPACE(M)",BLOCKS SUM_BLOCKS,SPACE-NVL(FREE_SPACE,0) "USED_SPACE(M)",ROUND((1-NVL(FREE_SPACE,0)/SPACE)*100,2) &q 阅读全文

posted @ 2012-07-31 17:33 徐正柱- 阅读(1854) 评论(0) 推荐(0)

摘要:一、 Oracle数据库I/O相关竞争等待简介当Oracle数据库出现I/O相关的竞争等待的时候,一般来说都会引起Oracle数据库的性能低下,发现数据库存在I/O相关的竞争等待一般可以通过以下的三种方法来查看Oracle数据库是否存在I/O相关的竞争等待:ØStatpack报告中在"Top 5 Wait Events"部分中主要都是I/O相关的等待事件。Ø数据库的等待事件的SQL语句跟踪中主要都是I/O相关的等待事件的限制。Ø操作系统工具显示存储数据库文件的存储磁盘有非常高的利用率。数据库如果发现存在I/O竞争,那我们就必须要通过各种方法来调 阅读全文

posted @ 2012-07-31 17:26 徐正柱- 阅读(1017) 评论(0) 推荐(0)

摘要:1.查询锁的信息SELECT A.OWNER 方案名, A.OBJECT_NAME 表名, B.XIDUSN 回滚段号, B.XIDSLOT 槽号, B.XIDSQN 序列号, B.SESSION_ID 锁表SESSION_ID,... 阅读全文

posted @ 2012-07-30 17:31 徐正柱- 阅读(1236) 评论(0) 推荐(0)

摘要:1.查询普通行的数据所占空间:表:DIM_USAGE如表结构:create table DIM_USAGE( USAGE VARCHAR2(20), USAGE_NAME VARCHAR2(120))求所有记录行所占空间:select 3+vsize(USAGE)+1+nvl(vsize(USAGE_NAME),0)+1 from DIM_USAGE;2.查询含有 BLOB字段的空间大小select dbms_lob.getLength(ATTACHMENT_CONTENT)/1024 ||'KB' from TOP_ATTACHMENT_CONTENT a; 阅读全文

posted @ 2012-07-27 16:47 徐正柱- 阅读(379) 评论(0) 推荐(0)

摘要:dba_tables中的avg_row_len是如何被计算的 =========================================================== 收集信息时avg_row_len被计算,使用analyze 和dbms_stats搜集时计算avg_row_len的差别在于后者不考虑row header占用的3个bytedoc如下:http://download.oracle.com/docs/cd/B19306_01/server.102/b14220/schema.htm#sthref720C:>sqlplus xys/managerdba_table 阅读全文

posted @ 2012-07-26 16:58 徐正柱- 阅读(937) 评论(0) 推荐(0)

摘要:EXECUTE IMMEDIATE解析并马上执行动态的SQL语句或非运行时创建的PL/SQL块。它的动态创建和执行 SQL语句性能超前。使用技巧1、EXECUTE IMMEDIATE将不会提交一个DML事务执行,应该显式提交 假如通过EXECUTE IMMEDIATE处理DML命令,那么在完成以前需要显式提交或者作为EXECUTE IMMEDIATE自己的一部分。假如通过EXECUTE IMMEDIATE处理DDL命令,它提交所有以前改变的数据。2、 EXECUTE IMMEDIATE不支持返回多行的查询,这种交互将用临时表来存储记录或者用REF 游标。3、当执行SQL语句时,后面不要加分号. 阅读全文

posted @ 2012-07-25 16:15 徐正柱- 阅读(416) 评论(0) 推荐(0)

摘要:导致表的执行计划做全表扫描的原因:u SQL谓词列没有建相应的索引u 谓词列建有相应的索引,但执行计划没有使用Oracle不使用b*tree索引的情况大致如下1:where条件中和null比较可能导致不使用索引2:count,sum,ave,max,min等聚集操作时可能导致不使用索引3:显示或者隐式的函数转换导致不使用索引4:在cbo模式下,统计信息过于陈旧导致不使用索引5:组合索引中没有使用前导列导致没有使用索引6:访问的数据量超过一定的比例导致不使用索引下面就其中的几点做一些说明一:Null可以使用索引吗一般情况下,where条件中和null比较将会导致full table scan,实 阅读全文

posted @ 2012-07-25 16:07 徐正柱- 阅读(1004) 评论(0) 推荐(0)

摘要:从Oracle Database 10g开始,Oracle在建库后就默认创建了一个名为GATHER_STATS_JOB的定时任务,用于自动收集CBO的统计信息。这个自动任务默认情况下在工作日晚上10:00-6:00和周末全天开启。调用DBMS_STATS.GATHER_DATABASE_STATS_JOB_PROC收集统计信息。该过程首先检测统计信息缺失和陈旧的对象。然后确定优先级,再开始进行统计信息。可以通过以下查询这个JOB的运行情况:select * from Dba_Scheduler_Jobs where JOB_NAME ='GATHER_STATS_JOB'其实同 阅读全文

posted @ 2012-07-25 15:51 徐正柱- 阅读(449) 评论(0) 推荐(0)

摘要:Microsoft Windows XP [版本 5.1.2600](C) 版权所有 1985-2001 Microsoft Corp.C:\Documents and Settings\RequieM>sqlplus " / as sysdba"SQL*Plus: Release 9.2.0.7.0 - Production on 星期一 7月 16 23:54:37 2007Copyright (c) 1982, 2002, Oracle Corporation.All rights reserved.已连接到空闲例程。SQL/IDLE> startup;O 阅读全文

posted @ 2012-05-10 10:22 徐正柱- 阅读(1274) 评论(0) 推荐(0)

摘要:1.查看数据库是否是归档模式SQL>archive log list;2.非归档模式更转为归档模式C:\Documents and Settings\Administrator>cd \C:\>lsnrctl statusC:\>sqlplus /nologSQL> conn sys/system@ora10g as sysdbaSQL> shutdown immediate;SQL> startup mount;ORA-12514: TNS: 监听程序当前无法识别连接描述符中请求的服务SQL> exitC:\>lsnrctl status 阅读全文

posted @ 2012-03-27 13:22 徐正柱- 阅读(787) 评论(0) 推荐(0)

摘要:在访问Oracle的客户端安装Oracle Client过程中并没有选项选择Oracle Client的字符集,安装完毕后在注册表HKLOCAL_MACHINE\SOFTWARE\ORACLE\KEY_ORACLECLENT_HOME1\可以找到NLS_LANG键,值为当前OS的字符集。如简体系统为:ZHS16GBK,繁体系统为:MSWIN950。可见,Oracle Client(以下简称NLS_LANG)在安装过程中选择了OS的字符集作为默认的NLS_LANG字符集。设定NLS_LANG有三种方法: a) 修改注册表:将HKLOCAL_MACHINE\SOFTWARE\ORACLE\KEY. 阅读全文

posted @ 2012-03-20 14:37 徐正柱- 阅读(7082) 评论(0) 推荐(0)

摘要:sqlplus /nologconn /as sysdbashutdown immediate;startup mount;ALTER SESSION SET SQL_TRACE=TRUE;ALTER SYSTEM ENABLE RESTRICTED SESSION;ALTER SYSTEM SET JOB_QUEUE_PROCESSES=0;ALTER SYSTEM SET AQ_TM_PROCESSES=0;ALTER DATABASE OPEN;set linesize 120;alter database character set zhs16gbk;RROR at line 1: . 阅读全文

posted @ 2011-08-02 15:58 徐正柱- 阅读(305) 评论(0) 推荐(0)