很囧的ORA-07445
昨晚遇到很囧的问题ORA-07445。[@more@]晚上正在洗衣服,听到手机响了。擦干手跑去接电话,刚好对方挂了,一看是公司MVPN的号码,再一看是X厂 ITS的负责人,当下感觉不妙(此人来电话必有事请发生)。火速连线至相关DB,果然Instance Crash。翻了下ALERT:Errors in file /u01/app/oracle/admin/shanb1/bdump/shanb1_s000_8678.trc:ORA-07445: exception encountered: core dump [ptmak()+144] [SIGSEGV] [Address not mapped to object] [0x000000010] [] []Mon Jun 23 22:06:33 2008found dead shared server 'S000', pid = (12, 1)再接
新PC入手~全部淘宝购置~
E8300ASUS 8800GTSASUS P5Q这几天在忙着OC,过些日子将积累的技术文章一起放上来。[@more@]
一次诡异的ORA-03113
真是诡异的ORA-03113[@more@]今日接到AP开发人员反映:W系统的DB(9208,在RHEL4上)里没权限修改SP。先连接进去了解了下该用户的权限和要修改的SP,发现SP就在此用户account的schema下。应该不是权限问题。用User的account试了一把,发现原来是只要Create or replace procedure, shared_server就会死掉,而SQL Navigate则会挂起。将TNSNAMES改为Dedicated连入,则直接报ORA-03113错误。在Server端用SYS登入,尝试compile这个SP,竟然也出ORA-03113。仔细察看Alert.log,发现并没有ORA-或者是Warning,BDUMP&UDUMP也没有新增纪录。接下
双网卡Server,listerner配置不当导致Clinet无法连接DB一例
早晨刚上班,产线就来催,说昨晚迁移后,Production DB DN连不上。了解了一下情况:Ping可以Ping通Server,Tnsping连不上,报没有listener。登进DB Server看了下listener却是起来的,我也能tnsping到DB想到是双网卡,产线从另一个网段连入。于是去看listener的configration, host对应的是IP。答案就出来了:Listener只能监听到一个网段。昨晚负责迁移的DBA在configure新Listener的时侯只是用了IP。于是把host改成主机名,问题解决。顺带补一下双网卡Listener的配置1. 一、Client会用自己hosts里的IP去解析tnsnames.ora里的host,这是本次的
好的应用设计是性能优异的关键
生产系统MOKP表,100多万rows。SISN+EISN是Index。[@more@]生产系统MOKP表,100多万rows。SISN+EISN是Index。SISN列和EISN列都是前半段字母+后半段数字。原SQL:SELECT COUNT(*) INTO v_CNT2 FROM MOKP WHERE SISN <= p_DATA AND EISN >= p_DATA AND LENGTH(SISN) = LENGTH(p_DATA)。结果Cost=1800up,consistent gets=12000多,走INDEX_FFS。由于执行次数较多,这句便成为整个库第二大buffer gets的SQL。Tuning的任务摆在面前,我观察了半天,Index 合适阿,又观察了下MOKP的数据分布:最主要是SISN<
name convert不正确导致standby 报错一例
上周日,Production DB用上了HDS的AMS200,随之改变的是datafile存放的目录。但是Report DB的结构并没有变。结果在Production DB上为一Partion Table增加一个datafile后,Report DB重起Apply log时侯就开始报ORA-01157: cannot identify/lock data file 114 - see DBWR trace fileORA-01111: name for data file 114 is unknown - rename to correct fileORA-01110: data file 114: '/u01/app/oracle/product/9.2.0/dbs/UNNAMED00114'但是$ORACLE_HOME下的dbs里又没有UNAMED00114,估计只是dictionary里会生成这样的纪录。将standby file m
一个Distinct的优化
一个Distinct的优化。[@more@]一个Distinct的优化。ISN有3000万笔,SCARTON有600万笔原SQL:16:07:02 SQL> set autotrace on;16:07:19 SQL> SELECT COUNT(DISTINCT(SCARTON.SCARNO)) MAX_SCARTON 16:07:59 2 FROM SCARTON,ISN WHERE SCARTON.SO='NB1P813740' AND SCARTON.SOLINE=1 AND SCARTON.SCARNO=ISN.SCARNO;192Elapsed: 00:00:00.93Execution Plan----------------------------------------------------------0 SELECT STATEMENT Optimizer=CHOOSE (Cost=67 Card=1 Bytes=34)1 0 SORT (GROUP BY)2 1 NESTED LOOPS (Cost=67 Ca
Oracle Max()/Min()类的性能优化
工作中的经验。此文写得仓促,较为完整的探讨在http://karsus.itpub.net/post/36558/470885[@more@]1.SELECT MAX(SEQ) FROM MO_ROUTE WHERE ISN=UPPER('NF1S6500020029' ) AND STEP <> '0';是在OMS的 TOP SQL按Disk IO排序出最高的SQL.2.select SEQ FROM MO_ROUTE WHERE ISN=UPPER('NF1S6500020029' ) AND STEP <> '0' and rownum=1 order by seq desc;是改写之后的.2比1的效能好很多,几乎完全消除了physical reads. consistent gets也少很多。按我的经验,MAX/MIN 类这样改写效能都会比原先好(包括SQL Server也是如此,rown
For Report DB的Archived log 获得,新版Shell,完善了一下
RHEL4下的版本。copy到任何目录都可执行。因为上次的shell并不严谨,在某些情况会有遗漏,遂重新写之。[@more@]Oracle ENV先声明。#Some VariablesBTIME=`date`;ARCH_FOLDER=/u04/arch/SHxxx1;SH_DIR=$(cd "$(dirname "$0")"; pwd);DBA="J A "#INIT FOLDRif [ -f $SH_DIR/applied.lst ]then rm -f $SH_DIR/applied.lstfiif [ -f $SH_DIR/compared.lst ]then rm -f $SH_DIR/compared.lstfiif [ -f $SH_DIR/copy.lst ]then rm -f $SH_DIR/copy.lst ]fiif [ -f $SH_DIR/SHXXX02.lst ]then rm -f $SH_DIR/SHXXX
corrupted block的一次处理和古旧版本的PL/SQL Developer问题
今天早晨遇到的问题[@more@]一早来上班就收到User的反应,说有些数据查不到,看了他们的截图,发现可能遇到corrupted block了。赶紧上去看一下严重程度先。08:23:11 SQL> select * from ISN where ISN='NS1S82038200461';select * from ISN where ISN='NS1S82038200461' *ERROR at line 1:ORA-01578: ORACLE data block corrupted (file # 16, block # 68845)ORA-01110: data file 16: '/u02/app/oracle/oradata/shxxx1/isn0807_data01.dbf'08:25:00 SQL> select file#,NAME from v$datafile where file#=16; 1
Standby Database for report
原先的report在Production DB上跑,已经使得其不堪重负。User多次反映有时速度很慢,影响工作效率。 [@more@]Standby Database for report。原先的report在Production DB上跑,已经使得其不堪重负。User多次反映有时速度很慢,影响工作效率。RHEL4 + 9IR2目前已经有一台Physical Standby Database,但主要目的是备援,不适合用来做Report DB。因此需要另外再搭建一台standby database for report.详细搭建不多说,这台Report DB的LOG传输和LOG apply完全靠OS上的机制。9ir2的Standby database本可以从另一个standby DB上接收Archived log,
找出存在FTS的Table
如何找出存在FTS的Table ? 可以采用这样的SQL[@more@]如何找出存在FTS的Table ?可以采用这样的SQL:SELECT s.segment_name,s.segment_type,s.ownerFROM dba_extents s,x$bh xWHERE s.segment_type='TABLE' AND x.dbarfil=s.file_id AND x.dbablk between s.block_id and s.block_id+s.blocks-1AND standard.bitand(x.flag,524288)>0 AND owner<>'SYS';不过这样的语句可能会十分缓慢,性能视图本身一般也是多个table/view的结合。可以采用这样:SELECT o.object_name,o.object_type,o.ownerFROM dba_objects o,x$bh xWH
optimizer_index_cost_adj的测试 I
optimizer_index_cost_adj的测试。关于optimizer_index_cost_adj这个参数,起初并没有太多注意,在9i下其default值100一直工作得很合适。不过偶然看到一个家伙把DB从9i->10g后,默认的100使得很多SQL的execution plan发生了变化。这说明10g和9i的CBO算法是有变化的。因此对这个参数产生了兴趣,[@more@]就按Tim Gorman的观点,每个系统有它自己合适的optimizer_index_cost_adj的值。下面来看生产系统E的optimizer_index_cost_adj的值应该设多少。生产环境是RHEL4up4+Oracle 9i.按照Tim Gorman的算法。这个值大致应该是V$system_event中
Oracle 10g Data Pump II
Data Pump速度测试,单stream & Parallel = 2.[@more@]OS: RHEL4 X86_64 HDD是SCSI RAID1 * 2 测试机,性能不是很强。Oracle Ver: 10.2.0.3测试库资料大概1.7G多。现在测试传统EXP J $ORACLE_HOME/bin/exp $ad full=y buffer=20480000 compress=n file=${ORACLE_SID}_${TODAY}.dmp log=$LOGFILE以上大约花掉3分钟多。然后是expdpexpdp $ad full=y directory=dpump_dir1 dumpfile=full1.dmp logfile=full1.log content=all以上是1分45秒。这是单stream的结果。接下来Parallelism = 2expdp $ad full=y directory=dpump_dir1 dumpfile=ful
诡异的无线网卡Down
Atheros的无线网卡。昨天发现一怪事。我的S2110的无线网卡是自己安装的拆机款Atheros 5212,只要在下BT的时侯开模拟器玩一会,网络就断开了。禁用网卡之后居然发现网卡在设备管理器消失了!真是让人匪夷所思,难道是过热网卡Down掉了?大冬天的也太奇怪了。[@more@]
Oracle 10g Data Pump I
Oracle Data PumpOracle称这是一个比Original EXP/IMP更优秀的东西。说起来一直在用9i,很多新的东西都没有接触过。既然Oracle称其是TOP 20 New Features for DBA,那应该蛮值得去用用看(EXP未来可能会不再被支持,IMP为兼容性还是会存在的)[@more@]OS:Solaris 10Oracle Ver: 10.2.0.1 先在OS层创建目录,用作DUMP下来的file存储,默认会丢到$ORACLE_HOME/rdbms/log/所以mkdir /u03/dump_file,目录属主必须是Oracle用户或者至少有权限读写。 接下来创建Directory ObjectsCreate directory dpump_dir1 as ‘/u03/dump_file’; 如果要让
Oracle 10g FlashBack简单应用一则
Oracle 10g FlashBack.今天物流那边的人说不小心删除了几笔资料,得捞回来。问了下时间,说几分钟前OK.Oracle flashback。SQL> create table xx.fla_table1 as select * from xx.table1 as of timestamp to_timestamp('2008-1-04 11:30:00','yyyy-mm-dd hh24:mi:ss');下面就交给前台人员去捞了。[@more@]
Install Oracle 10g on Solaris 10 simple record
新系统需要Solaris+Oracle 10g,先来测一测。[@more@]新系统需要Solaris+Oracle 10g,先来测一测。1.OS Ver: Solaris 10 GA.2.Oralce Ver : Oracle 10g 10.2.013.安装前的准备:Kernel ParameterSolaris 10 依然可以在/etc/system中设定Kernel Parameter来满足运行Oracle的需求,但是新的Project看起来更加灵活,Oralce的Installation Guide对参数的设定也是采用Project方式。首先创建Oracle user&group----------------------------------------groupadd dbauseradd –g dba oracle -----------------------------------------Pro
安永的IT审计
也有值得学习的东西[@more@] 前些日子Ernst&Young(我这才知道为什么叫安永...)来公司IT审计,我负责应对他们Unix like OS & Database。 单就技术层面来说,来人并不算厉害角色,但是他们的standard procedure到是蛮值得学习一下。以后自己强化系统安全性的时侯可以参考参考... 留下了他们公司的一些shell,有空详细看看,主要还是收集Unix系统信息的。
Oracle 10g Grid Control 部署初步完成
真是不错的工具。[@more@]1.之前的监控一直都是shell方式,收集一些系统状态和性能方面的数据存入自己的一个库作history data。现在有了Oracle 10g Grid Control,感觉自己之前写的shell实现的东西真是少之又少。可以自己出report,这功能在老板需要时非常有用(我讨厌excel)。2.安装agent的时侯需要Gnome的一些东西,由于我们的RHEL4都是最小化for Oracle的安装,补RPM比较痛苦。好在只痛苦了3台,后面shell去做了。3.准备玩一玩DG Broker。之前都是command line方式切换,据说这个更加快捷。4.Monitor Data Guard的configuration还