oracle性能诊断实例-row migration and row chain
美国PVH DB存在行链接.通过我的检查,发现,我们的DB同样存在行迁移和行链接.ORACLE的dbms_stats.gather_schema_stats只会收集优化器统计信息,不会检测表的记录是否存在行迁移和行链接.(我原先被这个包给骗了,所以执行完dbms_stats.gather_schema_stats后一查数据字典:USER_TABLES,其中的字段chain_cnt值全为0).要检测表的记录是否存在row chain,需要用到ORACLE早先一点的命令:ANALYZE TABLE.所以我写了一个存储过程(P_analyze_schema)以检测DB:PVH91USRD中所有表存在行链接的情况. 值得注意的是:数据字典 USER_TABLES.CHAIN_CNT的值是包含了
虎年初十ORACLE数据库恢复案例
Author: RainnyDate: 2010-2-23虎年刚过,就接手了一个非常困难的ORACLE数据库恢复的CASE。数据库经历了不正常断电,STARTUP ORACLE时报:ORA-01172: recovery of thread 1 stuck at block 3859656 of file 6ORA-01151: use media recovery to recover block, restore backup if needed查看ALERTLOG,发现前面已经有几个错误了:ORA-00600: internal error code, arguments: [kdxlin:psno out of range], [], [], [], [], [], [], []Hex dump of (file 3, block 30968) in trace file /data/app/oracle/admin/ora33/bdump/ora33_p003_6219
Oracle Hang Analysis
Author: rainnyzhongDate:2010-1-151. 症状描述:FALB12从EXCEL IMPORT DATA到DB,预计事务会运行1个多小时,在开始操作后40分钟左右,ORACLE挂死,任何用户都不可以再登陆了。2. 分析(1) 下面是挂死时OS的资源状况:09:37:54 up 73 days, 23:31, 1 user, load average: 0.11, 0.24, 0.18194 processes: 191 sleeping, 3 running, 0 zombie, 0 stoppedCPU states: cpu user nice system irq softirq iowait idletotal 6.7% 0.0% 0.3% 0.3% 0.0% 1.9% 90.4%Mem: 2186616k av, 2168780k used, 17836k free, 0k shrd, 154716k buff1633584k
一个ORACLE死锁问题的追踪
Author: rainnyzhongDate: 2010-01-08不得不记录一下。这个问题花了我一天的时间来追踪。最先是怀疑外键字段是否没有建索引。然后我给相关的外键字段都建上索引,死锁依旧。后来怀疑是ORACLE的BUG,因为ORACLE确实有一个BUG:2530125,某些版本的oracle检查到deadlock后会触发一个关于deadlock的bug。我将整个SCHEMA导出到另外一个DB(64位平台),发现死锁依旧。所以暂时去除了是ORACLE BUG的嫌疑.再后来怀疑存储过程或JAVA中是否有生成动态SQL(ad-hoc SQL),检查代码,发现确实有动态SQL。将JAVA和PROCEDURE中的动态SQL去掉,死锁依旧。靠!
安装VMware tools
Author: RainnyDate: 2009-05-12VMware tools是VMware的工具包,可以提升虚拟机的显示分辨率,若前面安装时选择了"工作站"模式,则安装非常简单,首先选中虚拟机,然后在VM菜单中选设置,如同安装时的步骤一样,将光驱映射到VMware tools的安装包,该安装包在VMware的安装目录下,文件名为:Program FilesVMwareVMware WorkstationLinux.iso。然后登陆FC4,在LINUX下点右键,打开一个终端窗口,在 /media/cdrom/下有VMwareTools的安装包,一种为gz格式,一种为rpm格式,两种安装都非常简单,这里为gz格式为例:#cp VMware*.gz /
oracle加密函数
Author: RainnyDate:2009-12-11create or replace function encrypt_md5(p_text varchar2) return varchar2 isbegin --添加RawToHex(UTL_RAW.CAST_TO_RAW())为得是加密后的输出数据规范些 --input_string必须要有,否则没有办法区分到底是调用那个md5 return RawToHex(UTL_RAW.CAST_TO_RAW(dbms_obfuscation_toolkit.MD5(input_string=>p_text)));end;[@more@]
利用ORACLE正则表达式判断字符串是否为日期格式
Author: rainnyDate:2009-2-18CREATE OR REPLACE FUNCTION F_ISDATE( P_COLVALUE VARCHAR2, P_mandatory VARCHAR2) RETURN PLS_INTEGER IS v_cn PLS_INTEGER;BEGIN IF P_mandatory = 'yes' THEN IF P_COLVALUE IS NULL THEN RETURN 2; ELSE BEGIN SELECT 1 INTO V_CN FROM DUAL WHERE REGEXP_LIKE(P_COLVALUE, '^[1-9][[:digit:]]{3}-[[:digit:]]{1,2}-[[:digit:]]{1,2}$') AND NOT REGEXP_LIKE(P_COLVALUE, '^[1-9][[:digit:]]{3}-((00|0)-((00|0)|[[:di