SM/OPTSTAT导致sysaux异常增长
这问题是由最近一个数据库AYSAUX使用空间过多引出来的.SM/OPTSTAT是用于存储老的统计信息,10G之前,当对表/字段/索引做了相应的统计信息之后,新的统计信息就会覆盖老的统计信息,也就是说的无法直接找回统计信息,要找回,只能事先通过dbms_stats导出来。10G就不必了,它会自动的存到相应的表里,而这些表是存在sysaux的,但这也引出了一个问题:如果这些表的数据不断的增长,而不把老的数据删除的话,sysaux迟早会暴了的。默认的情况下,系统会为SM/OPTSTAT保留31天的记录,可以通过dbms_stats.get_stats_history_retention来确定。这里
ORA-01012
自上次的文件系统owner变成数字200,数据库启动不了的问题后,这两天还碰到类似的问题。症状:以自己的ID试图连接数据库,出现如下错误:SQL*Plus: Release 10.2.0.2.0 - Production on Mon Apr 19 22:20:37 2010Copyright (c) 1982, 2005, Oracle. All Rights Reserved.Enter password:ERROR:ORA-12541: TNS:no listenertnsping没问题,到server那端查一下listener的trace:19-APR-2010 22:00:42 * (CONNECT_DATA=(SID=<SID>)(CID=(PROGRAM=sqlplus)(HOST=hostname)(USER=***))) * (ADDRESS=(PROTOCOL=tcp)(HOST=123.123.123.123)(
Expdp ORA-600 unable to load XDB library
今天导数据碰到如下错误:Processing object type SCHEMA_EXPORT/SEQUENCE/GRANT/OWNER_GRANT/OBJECT_GRANTORA-39014: One or more workers have prematurely exited.ORA-39029: worker 1 with process name "DW01" prematurely terminatedORA-31671: Worker process DW01 had an unhandled exception.ORA-00600: internal error code, arguments: [unable to load XDB library], [], [], [], [], [], [], []ORA-06512: at "SYS.KUPW$WORKER", line 1397ORA-06512: at line 2Job "SYS"."SYS_EXPORT_S
文件系统问题导致数据库,监听起不来
昨天碰到一个比较怪异的事,启动数据库时,报这样的错误:SQL> startupORACLE instance started.Total System Global Area 557842432 bytesFixed Size 2085328 bytesVariable Size 415239728 bytesDatabase Buffers 104857600 bytesRedo Buffers 35659776 bytesORA-00221: error on write to control fileORA-00206: error in writing (block 1, # blocks 1) of control fileORA-00202: control file: 'PATH/control01.<SID>'ORA-27041: unable to open fileIBM AIX RISC
SQL语句中的model用法
事情起因,今天看到一条非常”稀奇古怪“的SQL,select语句中,在表后面跟了一大窜以model开头的东东,后来查一下资料,原来model在数据仓库中是比较有地位的.列一下几个简单的测试:[@more@]1,测试表中数据:SQL> select * from test1;COUNTRY PRODUCT YEAR SALES---------- ---------- ---------- ----------USA Stock1 2008 100USA Stock1 2009 200USA Stock2 2008 300USA Stock2 2009 500CHINA Stock1
不同统计方式导致分区表的统计信息不同
问题的起因:最近发现一张分区表:从dba_table得到的统计信息跟dba_tab_stats/dba_tab_partitions查得的信息出入很大,后来查得的原因是: 脚本里调用dbms_ddl来收集统计信息,而dbms_ddl实际上是调用analyze命令,analyze基本上不会用来收集统计信息了。我们通常是调用dbms_stats来统计的。下面是实验证明:num_rows和last_analyzed来自dba_tables/dba_tab_stats/dba_tab_partitions[@more@]SQL> create table test( a number, b varchar2(30)) partition by hash(a) partitions 8;Table created.SQL> insert into test select objec
又一则ORA-4030
环境:OS: SunOS Hostname 5.10 Generic_127111-11 sun4u sparc SUNW,Sun-Fire-V890DB VERSION: Oracle9i Enterprise Edition Release 9.2.0.8.0 – Production改动: 安装了CPUJul2009 这里有点要说明的:操作系统是64位的,而数据库是32位的。这个从理论上讲不会造成什么问题的,因为这个系统已经跑了几年了。症状:执行如下SQL,碰到ORA-4030.SQL> declaresr sys_refcursor;beginsr:=Pkg_rpt_BillVsAccrual.FN_RPT_BILLVSACCRUAL('DE5','BILL-030',to_date('01/02/2006','MM/DD/YYYY'),to_date('02/28/2006', 'MM/DD/YYYY'));end; 2
DDL语句parse阶段隐式执行代码
通常情况下,一条SQL语句经过parse,bind variables,execution和fetch,但对于DDL是不经过后面两个阶段的,这个现象是同事刚刚发现,查一下文档上面也确实提到了DDL经过parse就执行了:PARSE ProcedureThis procedure parses the given statement in the given cursor. All statements are parsed immediately. In addition, DDL statements are run immediately when parsed.There are two versions of the PARSE procedure: one uses a VARCHAR2 statement as an argument, and the other uses a VARCHAR2S (table of VARCHAR2) as an arg
系统产生的SYS_PLSQL对象
环境OS: SunOS HOSTNAME 5.10 Generic_127111-11 sun4u sparc SUNW,Sun-Fire-V890DB:Oracle9i Enterprise Edition Release 9.2.0.8.0 - Production问题:一个包处于无效状态,通常直接用命令编译一下,就行了,但这个简单的操作,却碰到:SQL> alter package SCHEMA.PACKAGENAME compile;alter package SCHEMA.PACKAGENAME compile*ERROR at line 1:ORA-04043: object SYS_PLSQL_6459_DUMMY_2 does not exist[@more@]这个错误,其实在9i里这是比较常见的错误,在SP里定义:TYPE和TABLE OF TYPE的数据对象时.Oracle就会自动的在系统内生
wait for stopper event to be increased
环境OS:SunOS hostname 5.10 Generic_127111-11 sun4u sparc SUNW,Sun-Fire-V490DB: Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production一个JOB做MVIEW refresh做了十多个小时,还没做完,这个JOB定义:每隔20分钟去涮新一次,发现现在JOB状态为broken了,显然上次refresh完全在20分钟内完成;先查一下alert,发现日志切换太频繁了,2到3分钟就切换一下,online redo才50M(也不知道那个家伙这么设置的),这个显示太小了,把它扩展到500M,性能并没有什么好转.[@more@] 查下JOB的具体名为内容: dbms_refr
只读文件系统启动不了数据库
启动一个数据库时,碰到这个错误: [oracle]$ sqlplus "/ as sysdba" SQL*Plus: Release 10.2.0.4.0 - Production on Mon Jan 4 10:40:36 2010 Copyright (c) 1982, 2007, Oracle. All Rights Reserved. ERROR: ORA-09925: Unable to create audit trail file Linux Error: 30: Read-only file system Additional information: 9925 ORA-09925: Unable to create audit trail file Linux Error: 30: Read-only file system Additional information: 9925[@more@] 从上面输出的错误来看,第一个判断是不能创建审计跟踪文件,可能
9i升级中的orapls9.dll
今天接到朋友电话,关于从9.2.0.1升级到9.2.0.8出现的问题,在windows平台,报的错误如下:写入文件'D:oracleora92BINorapls9.dll'时出错,[D:oracleora92BINorapls9.dll(另一个程序正在使用此文件,进程无法访问.)][@more@]从错误上来看,这个文件orapls9.dll肯定是被其它的进程调用了。到得所有的服务都关闭的确认之后,有点迷惑了,会是哪个进程还在使用? 我的思路是这样,把相应的进程杀了,就可以继续升级.找进程可以用命令:tasklist /m orapls9.dll杀进程可以用命令:orakill或者taskkill后来朋友反馈说,杀了线程,接着又有线程调
ORA-600 [kpotcgah-9]
环境:DB: 10.2.0.4OS: SunOS HOSTNAME 5.10 Generic_120011-14 sun4u sparc SUNW,Sun-Fire-V490碰到这个错误的情形:用expdp导一张表,除了参数directory,dumpfile,logfile,tables之外,加上了parallel=4参数,得到的具体错误如下:[@more@]Processing object type TABLE_EXPORT/TABLE/INDEX/STATISTICS/INDEX_STATISTICSORA-31693: Table data object "BASELDWH"."AUX_FACT_EREC_DETL" failed to load/unload and is being skipped due to error:ORA-29913: error in executing ODCIEXTTABLEOPEN calloutORA-00600:
ORA-00600 [kqludp2]
环境: OS Solaris 10. DB version: 9.2.0.8一直跑得好好的程序,开发人员报执行SP有错误:ORA-04068: existing state of package has been discardedORA-04063: package body "..." has errorsORA-06508: PL/SQL: could not fine program unit being calledORA-06512: at line 1[@more@]最近也没对数据做什么变动,怎么会报包无效。 查下DBA_OBJECTS,发出这个包目前的状态是INVALID,执行utl_recomp.recomp_serial()重新编译一下,再看一下DBA_OBJECTS里的status,竟然还是invalid!查看一下DBA_ERRORS,得到这样的错误信息:350 P
CLOB的一个问题
今天一开发员提交了这样的问题,他的代码执行时,碰到如下的错误:...32767:3276732768:32768declare*ERROR at line 1:ORA-06502: PL/SQL: numeric or value errorORA-06512: at line 9SQL> l1 declare2 v_doc CLOB;3 c char(1);4 i NUMBER;5 begin6 i := 0;7 c :='1';8 for i in 1..100000 loop9 v_doc := v_doc || '' || 1;10 dbms_output.put_line('' || i || ':' || dbms_lob.getlength(v_doc));11 end loop;12* end;SQL>从上面的执行结果来看,错误执行到32769轮回时出错,出错的时候,CLOB的长度32768.CLOB不可能只存储这么点
9.2.0.8上打最新的CPU碰到的问题
公司规定的每年至少要打一次CPU(Critical Patch Update)补丁,而Oracle则每个季度更新一次CPU。现在数据库基本都跑在10G上了,对了9i的数据库来说,算是古董了。之前10G上打CPU,也不存在什么大的问题,但这次在Solaris 10/AIX都碰到了问题。[@more@]在Solaris 10打补丁的时,前期准备(关数据库,listener,修改oraInst.loc)之后,然后opatch apply ,跳过Y|N之后,备分文件,编译之后,貌似一切都顺利了,但到了verifying patch...,就没任何进展了,半小时过后,没任何屏幕输出,后来,问一下同事,同事说是java版本的问题,版本要1.4以上。
Logmnr分析SQL长度大于8000的潜在问题.
问题的起因是被同事问起当SQL_UNDO长度大于4000是怎么组装SQL。我们都知道通过LOGMINER可以找出相应的REDO SQL和UNDO SQL,经过DBMS_LOGMNR分析后,相应的REDO SQL和UNDO SQL存在视图V$LOGMNR_CONTENTS,从这张视图的结构里可以看出,字段sql_redo,sql_undo的类型为varchar2(4000),从这里可以看出v$logmnr_contents里的一行记录里,存储的SQL长度至多为4000,但有时SQL的长度超过4000怎么办?[@more@]从reference文档里可以看到这张视图还有几个字段:RS_ID,SSN,CSF.他们的作用是:RS_ID: Record set ID. The tuple (RS_ID, SSN) together u
创建spfile时碰到600
创建spfile时碰到600, 今天碰到的情况,在Solaris 10上,先把软件升级到10.2.0.4,然后手工建库,手工写pfile(只写了几个参数),前面一切进展顺得,当准备建spfile替换当前的pfile时,碰到如下的错误:SQL> create spfile from pfile='path/pfile.ora'; create spfile from pfile='path/pfile.ora' * ERROR at line 1: ORA-00600: internal error code, arguments: [kspsetpao1], [180], [160], [*], [db_name], [9], [], [] 从上面的错误上,可看到一个参数db_name,第一反映是,难道是参数db_name有问题,从v$database确认的数据名跟
总结上次碰到的ORA-04030错误
先更正一下,上次碰到的SQL,不是in里有9500多个值,是开发人员把9500多个值拆成了10个in,然后用or连接起来,太长了,没仔细看。所以不会报ORA-01795。通常情况下4030错误,是由于PGA内存分配出现了问题,那么具体是PGA的哪一块出了问题呢?这就得理清楚PGA有些component,有四块组成:1, User Session Memory,存储session涉及到的一些变量,及session相关的信息,比如登录信息。如果在MTS模式下,这块内存是共用的。2,Private SQL Areas,存储邦定变量相关信息以及跑SQL时用到的一些临时内存,数据结构。根据执行SQL(cursor)的生命周期,一
ORA-04030
环境 OS AIX 5.3DB Oracle Database 10g Enterprise Edition Release 10.2.0.3.0 - 64bi今天一开发人员提交一个错误过来,情形是这样:在Oracle SQL developer里跑一条SQL报的:SQL Error: ORA-04030: out of process memory when trying to allocate 2992 bytes (kxs-heap-c,temporary memory)04030. 00000 - "out of process memory when trying to allocate %s bytes (%s,%s)"*Cause: Operating system process private memory has been exhausted看到Ora-04030,难道是PGA不足?难道是sort,hash等操作过多?叫开发人员发那条S