optimizer_mode 之 all_rows
看oracle performance tuning guide时看到一句:ALL_ROWS --The optimizer uses a cost-based approach for all SQL statements in the session regardless of the presence of statistics and optimizes with a goal of best throughput (minimum resource use to complete the entire statement).于是做了个测试:1.将scott这个schema的所有statistics删除。1.1用sql>explian for select * from emp;sql>@?/rdbms/admin/utlxpls看到cost,rows等信息已消失,符合optimizer mode的choose规则:当对table做了analyze后,会采用CBO,
多列子查询
单行子查询是指查询只返回单列单行数据。多行子查询是指子查询返回单列多行数据。2者都是针对单列而言。多列子查询则是指返回多列数据的子查询语句。当多列子查询返回单行数据时,在where子句中可以使用单行比较符。而返回多行数据时,在where字句中必须使用多行比较符。(in,all,any)。[@more@]在使用子查询比较多个列时,可以使用成对比较。即:要求多个列的数据必须同时匹配。如:在emp表中,要求在部门20中找到与部门30 薪水与补助完全相同的人:sql>select ename,job,sal,comm,deptno from emp where (sal,comm) in (select sa
顺序事务与只读事务
只读事务是指只允许查询操作,而不允许任何dml操作的事务。如有2个session,sessionA及session B.当sessionA设置了只读事务后,即使session B对sessionA所查询信息做了修改,而sessionA所查询的仍然是修改前的值。Time 1:Session A:scott@KENNY> set transaction read only;Transaction set.Time2:Session B:scott@KENNY> update emp set sal=4000 where ename='SMITH';1 row updated.scott@KENNY> commit;Commit complete.Time 3:Session A:scott@KENNY> select * from emp where ename='SMITH'; EMPNO ENAME JOB
逻辑IO,逻辑读,sql调优最关注的是什么
有时候静下心来,总结一下实践中遇到的问题,会把一些概念理解得更好.比如什么是逻辑读?什么是逻辑IO?sql tuning中最关注的又是什么?其实很简单,假设有一个刚刚启动的数据库,你执行了一个查询,方法1是用了full table scan,方法2是加了索引. 在方法1中,oracle在数据文件中获取了1000个block,并放到buffer cache中.方法2中oracle 获取了10个block.并放到buffer cache中.那么cpu在内存中读这些block的过程就叫做逻辑读(consistent get),在读的过程中产生的IO就是逻辑IO.逻辑读的过程中,是要消耗cpu资源的.因此,逻辑读越少越好.[@more@]
1个关于函数索引的性能调优过程
程序员报应用慢,用OEM抓了sql出来,SELECT nvl(to_char(status), 'null') status, nvl(to_char(subscribeid), 'null')subscribeidFROM abcWHERE status > 0AND replace(bbid, '''', '') = '9999-0009-11111'。然后进行分析。[@more@]1.检查表是否分析。用OEM查看schema下的table,右栏可以显示last analyzed的日期。结果显示表已分析过。2.用set auotrace traceonly; set timing on 看执行计划以及执行时间,发现是full scan,运行时间大概是18秒。3.查看索引的选择性,所谓选择性高,是指列中某个值的个数在正个列中所占比例低。如1个
设置autotrace
网上关于autotrace的设置已有很多了。在这里补充1点,当client的版本在9.2.0.3以下时,当发出set autotrace traceonly 后,会报sp-0618的错。即使将plustrace角色权限给了public也不行。此时,解决方法是:1.以sql用户登陆:sql>grant select on v_$session to public;就能解决了。[@more@]How to set up autotrace:以sys用户登陆:1.sql>@?/rdbms/admin/utlxplan.sql2.sql>create public synonym plan_table for plan_table;3.sql>grant all on plan_table to public;3.sql>@?/sqlplus/admin/plustrce4.sql>grant plus
在aix平台上监视cpu并实时获得sql语句 1
DBA会经常碰到以下问题:在夜间有时一些批处理程序会突然变慢,虽然可以通过statspack来获取当时的sql,但毕竟不是非常实时。因此,可以通过一些脚本来实现:我写这个脚本的思路是:1.环境设定:在oracle用户的$HOME目录下,创建cpu_alarm,pid,output三个目录。1.1 考虑到有些主机上可能有多个sid的情况,因此,以oracle用户登陆主机,先通过以下命令:$ps -ef | grep ora_smon获取当前主机上所安装的oracle。并将sid名称放在ora.txt文件中。2.脚本内容 cpu_monitor.ksh:#!/usr/bin/ksh#-----------------------------------------------
用脚本在windows平台发邮件
对以下脚本写成*.vbs文件,然后写一个bat文件:cscript *.vbs,用taskschedule调用。 Set objEmail = CreateObject("CDO.Message") objEmail.From = "tpemsbrs@avon.com" objEmail.To = "vincent.lee@avon.com,lias.liang@avon.com,kenny.wu@avon.com,benny.zhang@avon.com" objEmail.Subject = "TPEMSBRS standby database status"' objEmail.Textbody = Computer & " " & objLogicalDisk.DeviceID & " free disk space is " & FreeMegaBytes & "
喧嚣中的宁静与浪漫--小野丽莎的音乐与珍惜生命
小时候就很喜欢听Jazz,自由而浪漫。一个炎热的周末午后打开电脑,很不经意的就到google去搜了小野丽莎,接着就听到了轻轻柔柔的的Jambalaya,娓娓道来的一个法国港湾小镇,一对情人的悠闲生活,小木桥下潺潺的河水,人们在桥上吃着小龙虾与黄秋葵,岸边有紫蓝色的熏衣草,迎风摇曳,亲人们一起欢聚。顿时感到清清凉凉,思绪也柔和下来。听Lisa Ono的歌,能感觉到很浓郁的法国爵士的味道,很浪漫,恬淡而从容。可能因为她在巴西长大的缘故吧,又能感觉到南美人的自由与庸懒,不经意间,又能感觉仿佛有一缕一缕的阳光从梧桐树间的间隙撒下,人
查看session信息的sql
虽然用oem查session比较方便,但有时用sql能比较快获得信息,尤其在连接数已经满的情况下,为了进行诊断,用sql往往能快速找到问题所在。selectsubstr(s.username,1,18) username,substr(s.program,1,15) program,s.sid,s.serial#,s.machine,s.status,s.logon_time,decode(s.command,0,'No Command',1,'Create Table',2,'Insert',3,'Select',6,'Update',7,'Delete',9,'Create Index',15,'Alter Table',21,'Create View',23,'Validate Index',35,'Alter Database',39,'Create Tablespace',41,'Drop Tablespace',40,'Alter Tablespace',53,'
数据迁移后sequence的处理
有时候需要将schema的数据从这个库导到别的库上。若原来的schema存在sequence,则导入到别的库后就会发生变化,若应用需要使用这些sequence,就会发生错误。如何处理:[@more@]案例:将db-a的schema a导入到db-b,schema a的密码在db-a,db-b是一样的。1.用a在toad登陆到db-a:选database-export-sequence.在弹出的界面上:选:start sequences at NextVal+1include drop statement并定义一个文件进行保存,按ok后会产生一个sql文件。2.用schema a,以sqlplus登陆到db-b然后sql>@刚才保存的文件.sql就可以了。
扒带
大学时不象现在有许多软件可以对一首歌进行各种处理,分析。因此,如果想弹一首歌或乐队想排一首歌时就靠耳朵把各乐器各声部记下来。我们称这个叫扒带。那么,弹得跟原来的曲子相似程度就体现了扒带的水平了。当时的设备就只有录音机,可以别在腰间,那时候大家向家里要钱购买的借口都差不多,那就是学英语。扒带的过程中是肯定有很多太快而听不请的,特别是solo。那时也不象现在,找个软件(media player也有这个功能),设播放速度就可以了。为了听清楚音,就用已经没电但又还有一口气的电池来放,这样速度就慢下来了。扒过的歌也有不少
失效对象的处理
在10g的dbconsole或在9i的oem(schema-源类型-各包,触发器等)中,都可以发现已失效的对象。有些是跟系统对象有关,有的跟应用的schema有关。发现这种情况时,可以对数据库所有的对象先编译一下:sqlplus "sys/password as sysdba"sql>@?/RDBMS/ADMIN/UTLRP.SQL要以sys用户才能顺利执行完。执行完后,可以再检查一下,如果还是编译失效,就可以利用oem中菜单-对象-创建报告 --选择相关项,报告会产生在你的客户端机中,非常方便。此对象报告还可以对其他项进行report,很好用。当然,还可以更好的诊断工具rda进行诊断。放在下
administer resource manager/sys.sys_group 的授权
今天台湾同事说执行一个脚本时出错,脚本出错的2个命令是:GRANT ADMINISTER RESOURCE MANAGER TO DM_ADMIN;GRANT EXECUTE ON SYS.SYS_GROUP TO DM_ADMIN;先处理第一个:1.报错信息:ERROR at line 1:ORA-00990: missing or invalid privilege解决:先执行:select * from dba_sys_privs where privilege like 'ADMINISTER%';结果如下:GRANTEE PRIVILEGE ADM------------------------------ ---------------------------------------- ---DBA ADMINI
exp 命令中的query参数
当我们希望只导表的某一部分时,可以用query参数来导。其实就是query加where语句的条件部分,但前提是类似于select * from tab where .....命令格式如下:exp table.'s owner/passwd@service_name tables=(table_names) query="where....."不知道为什么格式显示不出来,应该在等号后面先写一个反斜杠,接着是双引号,然后是where子句,再斜杠,最后以双引号结尾。这是在windows格式下的,注意一下query后的格式。[@more@]exp table.'s owner/passwd@service_name tables=(table_names) query="where..."
如果一台aix的机器不让客户端用reflectionx直接连,应该怎么办?
1.可以用windows客户端,拿reflectionx先连接到一台允许介入的服务器中2.出现图形界面后,以root用户敲2.1#ssh -x 远程服务器的ip 敲密码后进入远程服务器2.2#export DISPLAY=windows客户端的ip:0.02.3#xterm 开启远程服务器的图形终端界面[@more@]
利用profile进行资源控制
在一台测试机上,连接时经常报连接数超出最大限制。1.诊断:select sid,username,machine,terminal from v$session.发现连接都来自同一台机器。进行询问,原来在进行压力测试。2.由于压力测试会影响其他用户连接,于是打算用profile进行资源限制:2.1.sqlplus "/as sysdba" --> show parameters resource_limit;2.2如果不为true,用alter system set resource_limit=true;2.3用toad或用命令创建profile: create profile test limit sessions_per_user 2; 2.4 alter user username profile profile_name;将profile与用户绑定。
SYS.LT_EXPORT_PKG程序包出错导致exp备份失败
收到error log,查了一下错误信息,报以下错误DATA COLLECTED===============EXP-00008: ORACLE error 4068 encounteredORA-04068: existing state of packages has been discardedORA-04063: package body "SYS.LT_EXPORT_PKG" has errorsORA-06508: PL/SQL: could not find program unit being calledORA-06512: at line 1EXP-00083: The previous problem occurred when calling SYS.LT_EXPORT_PKG.schema_info_exp原因:WORKSPACE , XDB 这2个schemas有invalid objects。用oem看程序包可以看到失效的object。解决方法:Run
吃一堑,长一智的英文翻译
记得是林雨堂翻的,既简单又压韵A fall in a pit,A gain in your wit.经典。[@more@]
Dataguard-备机产生gap的解决方法
有时候因为网络或备份故障等原因,主机所产生的归档日志无法传到备机上,这个时候备机就产生了gap。对于这种情况,应该如何解决?需要注意的是,一旦产生gap,即使gap之后的archive log能正常传到standby库中,standby库并不会对后继传来的日志文件做apply。只有通过对standby做recover把从产生gap的第一个文件到最新的archive log文件都apply了才能做到2个库一致。1.在primary库中重新创建standby controlfile。并将它拷贝到standby库中。位置与以前同。ALTER DATABASE CREATE STANDBY CONTROLFILE AS '[path][ctl_file_name].CTL';2.进入