10g 自动内存管理--当前各参数值的的大小
10g开始,内存参数如shared_pool_size,db_cache_size在sqlplus中用show parameters都会显示为0,那么在当前状态下如何获得各个pool的值呢?[@more@]1.data buffer pool:SQL> select current_size from v$buffer_pool;CURRENT_SIZE------------33122.其他的poolSQL> select pool,sum(bytes)/1024/1024 from v$sgastat group by pool;POOL SUM(BYTES)/1024/1024------------ --------------------3327.99767shared pool 736.00457large pool 16java pool 16
读后感:oracle性能调整 Shared pool深入分析及性能调整
今天在网上读了文章:oracle性能调整 Shared pool深入分析及性能调整。在这篇文章中,对以下问题做了比较深刻的解释:1.为什么程序中引用了绑定变量可以加快效率2.ORA-04031的成因[@more@]1.为什么程序中引用了绑定变量可以加快效率oracle 对sql语句的解析实际上生成执行计划。在生成执行计划时是需要消耗资源的。为了实现这一过程,oracle实际上对sql语句进行了概括与抽象。将sql语句分成静态与动态两部分。静态部分包括oracle的关键字,如select,from等,以及表名,列名等。而动态部分实际上就是数据。静态部分是有限的小部分,而数据是
unix 中的&&与||命令
在unix中,执行命令时我们希望有以下几种情况:1.当第一个命令成功时,才接着做下一个命令。2.当第一个命令失败时,才接着做下一个命令。对于1,可以在脚本中用&&命令实现:cp *.doc ./test&&rm *.doc对于2,可以在脚本中用||命令实现:mv *.doc ./test||mkdir test --如果不存在test目录,则创建。综合举例:mv *.doc ./test/||mkdir test&&mv *.doc ./test/意思是:将*.doc 移到./test目录中,如果不存在test目录就创建这个目录,再将*.doc文件移到test目录中。3.在脚本中连续执行命令:(命令1;命令2.....)[@
Windows平台 用邮件方式发送export备份情况
windows平台,对于export备份,希望能在备份结束后将出错信息发给相关人员。可以这么做:[@more@]1.写export的bat文件:set nls_lang=AMERICAN_AMERICA.WE8MSWIN1252EXP username/password@service_name FILE=*.dmp LOG=*.LOG FULL=Y COMPRESS=Ntype *.LOG | find "Export terminated successfully without warnings."IF ERRORLEVEL 1 GOTO SendAlertGOTO End:SendAlertcscript D:DBEXPBackupAlert.vbs:End2.BackupAlert.vbs:Option ExplicitDim objMessage, strReceiver, strSender, strSubject, strContent, strAttachmentst
对表归档的一个思路及方法
随着数据库的日渐庞大,有时需要进行归档。以下是一些思路:1.新建一个表空间存放各表的历史数据。1.1写一个存储过程搬数据,数据搬迁到历史表后,在基表中将搬迁的数据删除。2.定期将历史数据exp到磁带中去做永久保存。3.历史数据exp之后,可以清空各历史数据表。这样,表空间的大小实际上是很容易伸缩及控制的。在这个过程当中,我们可以看到基本的数据由于可以定期清理到历史数据表,继而再清理到磁带。因此,数据库不会越来越大。方便备份及减少查询时间。具体的实现过程如下:[@more@]procedure的思路是:1.创建临时表:CREATE GLOBA
10g的一个bug:'IN' IS NOT A VALID INTEGER VALUE
今天在调试一个procedure的时候,需要有这样的一个语句:insert into table_a select rowid from table_b where...调试过程中报'IN' IS NOT A VALID INTEGER VALUE错。以下是解决过程:[@more@]解决方法:1.以sys登陆,将view:ALL_ARGUMENTS 改名以做backup。2.运行以下sql:CREATE OR REPLACE VIEW ALL_ARGUMENTS (OWNER, OBJECT_NAME, PACKAGE_NAME, OBJECT_ID, OVERLOAD, ARGUMENT_NAME, POSITION, SEQUENCE, DATA_LEVEL, DATA_TYPE, DEFAULT_VALUE, DEFAULT_LENGTH, IN_OUT, DATA_LENGTH, DATA_PRECISION, DATA_SCALE, RADIX, CHARAC
Oracle Internet Directory 软件下载及文档
现在公司对OID的需求越来越迫切了。所以,在网上搜了搜。未果。还是通过metalink问support。反馈信息如下:[@more@] QUESTION========Where to download OID and get the corresponding documentations ?ANSWER======+ The latest version of OID is 10.1.4.0.1 which can be downloaded from the following pagehttp://www.oracle.com/technology/software/products/ias/htdocs/101401.htmlOID is available with the "Oracle Identity Management Infrastructure and Oracle IdentityFederation" suite(During the installat
Windows平台上9i与10g共存是listener的问题
当在一台 server上同时装9i与10g时,无法用9i的listener去监听10g的数据库。连接时报ora-12537。说tns连接关闭。解决方法:1.在services.msc中,关闭9i的listener.ora服务。并设为manual。2.用10g的net configuration assistant创建一个新的listener.ora.3.将9i的oracle_homenetworkadmin下的listerner.ora拷贝到10g的oracle_homenetworkadmin目录下。4.重起10g的listener服务。问题解决。说穿了就是兼容性不好。[@more@]
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也有这个功能),设播放速度就可以了。为了听清楚音,就用已经没电但又还有一口气的电池来放,这样速度就慢下来了。扒过的歌也有不少