Archives for 2007

Trace Analyzer

对于非技术人员来讲,做Trace也是件麻烦事,很多人不知Trace为何物,更不懂tkprof这种简单但不经培训便毫无头绪的东西。 Oracle提供一种更方便的方式,可以直接用SQL达到tkprof才能实现的功能。对于EBS用户来讲,这个工具提供更具针对性的内容。它以HTML格式输出tkprof所能提供的所有信息,更具可读性,适合对单个事务性能进行分析。 下载见Metalink: 224270.1

Change windows hostname

Step 1 – Create Hosts Entry for Old Hostname add entry to the file WINNT\system32\drivers\etc\hosts Step 2 – Uninstall Enterprise Manager Console emca -deconfig dbcontrol db -repos drop Step 3 – Stop All Oracle Services Step 4 – Update listener.ora and tnsnames.ora with the new Hostname Step 5 – Rename Host and Restart DELETE THE [...]

ORA-14551

Form中需要调用一个函数来产生单据号,却发现了这个警告: ORA-14551:cannot perform a DML operation inside a query 原来,很多赋值语句,不是存储过程,而是一系列的SELECT语句。比如form个性化中的=my_func,实际上是 SELECT my_func INTO :MY_VAR FROM DUAL; 在SELECT时,系统会分析是否存在对表的插入、更新、修改等操作,默认是禁止此类行为的。如果必要,这时需要对函数做适当调整,加上PRAGMA AUTONOMOUS_TRANSACTION即可。如: FUNCTION get_doc_num(p_doc_type IN VARCHAR2, p_given_date IN DATE DEFAULT SYSDATE) RETURN VARCHAR2 IS PRAGMA AUTONOMOUS_TRANSACTION; BEGIN … … END get_doc_num; 常用的PRAGMA还有: RESTRICT_REFERENCES EXCEPTION_INIT SERIALLY_REUSABLE

使用LogMiner

因为某次偶然事故,想要看看究竟发生了什么,于是用到了logminer——查看归档日志中的SQL记录。 首先需要用SYSDBA安装LogMiner,执行: $ORACLE_HOME/rdbms/admin/dbmslm.sql $ORACLE_HOME/rdbms/admin/dbmslmd.sql. 创建字典文件: DECLARE BEGIN dbms_logmnr_d.build(dictionary_filename => ‘logmnr_dic.ora’, dictionary_location => ‘F:\ORCL\ARC’); END; 该文件几十兆到几百兆不等,视数据库大小而定,创建时间也由数秒至数分钟不等: bash-3.00$ ls -lh l* -rw-r–r– 1 oratest dba 80M Aug 24 13:28 logmnr_dic.ora bash-3.00$ ls -lh l* -rw-r–r– 1 oratest dba 136M Aug 24 13:38 logmnr_dic.ora bash-3.00$ ls -lh l* -rw-r–r– 1 oratest dba 169M Aug 24 13:43 logmnr_dic.ora bash-3.00$ [...]

PL/SQL: Wait 10 seconds

会话中发现问题,需要等待几秒钟重新执行,怎么办?看下面的: — Created on 2007-8-15 by ZEENO DECLARE i NUMBER; ii NUMBER; BEGIN i := dbms_utility.get_time; dbms_lock.sleep(3); ii := dbms_utility.get_time; dbms_output.put_line(i); dbms_output.put_line(ii); END;