创建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
Perl画图
从目标所掌握的资料来看,perl调用GD作图还是比较方便的,下面贴一下代码作图的一段代码。use GD::Graph::lines;my ($title,$legend1,$legend2);my (@text,@y1,@y2);sub drawimage{ my @data = (@text,@y1,@y2 ); my $graph = new GD::Graph::lines(1200, 400); $graph->set( two_axes => 1, zero_axis => 1, title => $title, transparent => 0, x_label_skip => 2, x_labels_vertical =>1,
Expdp指定导出带有匹配符的对象
在SQL中,字符'_'和'%'是有特定含意的:‘_’匹配任何一个字符,'%'则匹配任何数量的字符,包括0个字符。如果要在SQL中,要让这两个字符表示字符本身,则要做相应的处理,加有escape关键字,如:SQL> select table_name from user_tables where table_name like 'A_%' escape '';TABLE_NAME------------------------------A_A_1A_2在expdp时,如果也期望导出如上的表,即导出经字符A_开头的表,在expdp里的include里是不能识别escape,这样的话,就会导出多余的表出来的:执行命令:expdp directory=expdp_dir dumpfile=test.dump INCLUD
EXP-00090: cannot pin type "SCHEMA"."TYPE_NAME"
EXP-00056: ORACLE error 22303 encounteredEXP-00090: cannot pin type "UserName"."KU$_CLUSTER_T"环境: OS Solaris 10, DB 10.2.0.4数据库升级之后(从10.2.0.3到10.2.0.4),这个升级也不知是谁做的,不知期间是怎么做升级。也太不负责了,一升级就整出了这么多无效的对象,也不查一下原因.目前的问题是:exp导数据,日志里出现大量exp-90错误, 登陆数据库查了一下,发现无效的对象比较多,都是KU$_开头的,这些KU$_都是type类型。不知道这些type是干什么的,从查到的资料来看,XDB数据库会到,对XDB不太了解。查看
Eclipse里写perl程序。
eclipse写perl代码,要安装相应的插件EPIC,具体的操作是:从eclipse里的主菜单:[help]=>[install new software...]=>[add],输入http://e-p-i-c.sf.net/updates/testing(这个可以到e-p-i-c网站上查看最新的插件),保存,接着在当前界面选中刚才的地址,然后选择install,这样插件就安装完了。还要设置perl相应的执行路经。[windows]=>[Preferences]=>选中左边的Perl EPIC,在相应的右边输入perl.exe的全路径。至此就可以用eclipse写perl程序了。顺便说一下,写perl的图形工具很多,但貌似免费的不多,之前好不容易从网上down
Datapump的几个参数
Datapump有些参数并没有公开,但是在实际情况下,这些参数还是比较有用处的,在此总结几个参数.[@more@]1.metrics=y 这个是隐藏参数。功能是显示导出来多少个对象,这些对象花了多少时间,这些对象主要指的是定义(导入时,建index花了多少时间,有参考价值),不显示导表数据时间。如果能够把导每张表花了多少时间显示出来,还是很有参考价值的.可能以后的版本会做到这点,这也可能为什么这个是隐藏参数的原因.下面是加了此参数,显示的信息:Processing object type SCHEMA_EXPORT/USER Completed 1 USER objects in 0 secondsProcess
设置OS用户跑schedule job执行外部程序
一直不清楚Oracle Schedule是通过哪个OS用户去执行外面的程序,metalink 391820.1提到了,在这里做个记录。以备后查。相应程序执行的用户定义在externaljob.ora里,默认情况下是nobody用户,其OS权限是相当低的。可以修改这个文件,指定相应的用户跑外部程序。同时要把这个文件的属主改成root,设置权限为640. 还有$ORACLE_HOME/extjob权限设置为4750.$ tail -2 $ORACLE_HOME/rdbms/admin/externaljob.orarun_user = nobodyrun_group = nobody[@more@]
ORA-28031: maximum of 148 enabled roles exceeded
在alert_<SID>.log里报如下错误:ORA-12012: error on auto execute of job 2ORA-28031: maximum of 148 enabled roles exceeded[@more@]今天一同事提到ORA-28031错误,错误信息明显的提示了授予用户role的数量超过148个导致的。这些role的数量,包括直接授予的,也包括间接授予的。当一个用户被直接和间接授予的role超过148个时,导致的直接问题是用户不能登录数据库,布置的后台job也不能执行。有一个例外就是sys可以拥有超过148个role,它可以正常的登录数据库,但后台sys的JOB不能正常的跑。同时要注意,创建role的用户,隐含的被
DBMS_DDL加密脚本.
在10G版本, 有一个新的package DBMS_DDL,它提供脚本加密的功能。同时10G也增强了字符窜的处理方式,通常情况在字符窜里有单引号的话,要用两个单引号才能在字符窜里显示一个单引号,10G有了新的方法处理这一情形了。下面的示例结合dbms_ddl显示这个功能,感觉跟perl里的q//一样(perl里也可以q[])下面是测试示例:[@more@]SQL>declare 2 fun varchar2(200); 3 begin 4 fun:=q'[create or replace function f_test1 return date 5 is 6 begin 7 return sysdate-1; 8 end; 9 ]'; 10 dbms_ddl.create_wrapped(fun); 11
通过写规则,控制streams复制.
下面的代码是通来写代码实现RULE,然后应用到streams,这个例子比较简单,做复杂的业务转换,可通过类似示例中的function rename_schema_01来实现.Declarative Rule-Based transformation Streams能实现的功能,自己写规则都可以实现,更复杂的功能,可以通来PL/SQL来实现,然后包装成规则.[@more@]SQL> alter database add supplemental log data;Database altered.SQL> select log_mode SUPPLEMENTAL_LOG_DATA_MIN,SUPPLEMENTAL_LOG_DATA_PK,SUPPLEMENTAL_LOG_DATA_UI,SUPPLEMENTAL_LOG_DATA_FK,SUPPLEMENTAL_LOG_DAT A_ALL from v$data
Declarative Rule-Based transformation Streams
As I mentioned last time, there are 2 type of Rule transformations, one is declarative rule-based transformation (rules provided by Oracle itself), and the other is Custom rule-base transformation ( rules coded by Oracle users, write PL/SQL to realize the rule).[@more@]As I mentioned last time, there are 2 type of Rule transformations, one is declarative rule-based transformation (rules provided by Oracle itself), and the other is Custom rule-base transformation ( rules coded by Oracle users, wr
Error: cannot fetch last explain plan from plan_table
环境:OS: Solaris 10DB: 10.2.0.3今天碰到这样的怪事,用dbms_xplan.display显示一条SQL执行计划时,报错"Error: cannot fetch last explain plan from plan_table". 一开始就觉得Plan_table的版本是不是过时了,也没仔细看,就重新生成plan_table,再跑刚条SQL,还是报一样的错误,这样看来,就不是Plan_table版本的问题了,那会不会是SQL本身的问题呢?换一条SQL:select sysdate from dual,通过dbms_xplan.display正确显示结果,再跑一下有问题的那SQL,错误依旧。从上面的现象来判断,那应是SQL本身的问题。分析一下出问题的
du和df
两个命令常用于计算/查看磁盘使用率:df: 查看文件系统空间使用率.du: 常用于查看一个目录下的文件占用磁盘空间大小。[@more@]今天一同事,在Solaris 10上做数据库升级遇到问题,把ORACLE_HOME空间不够了,赶紧df看一下,8G的空间使用了95%,但有点疑惑的是,整个Oracle数据库软件,不可能占用8G空间的呀?肯定里面的某个或几个不相关文件占用了比较大的空间,跑到ORACLE_HOME目录下 du -sk,屏幕显示的是2G,这个跟df的结果相差太远了。难道du计策有误,没有统计到相关的目录? 还是自己写段bash shell来处理,检查ORACLE_HOME下的每个目录占
Oracle 10G/11G自带DBI了
Oracle 10G/11G自带了DBI[@more@]Oracle9i及之前的版本,如果用Perl访问Oracle,还得用ppm安装DBI包或编译器编译源代码。 10G之后,貌似这一情况改变了。自己的台式机上装了11G,就上面测试通过了。在Linux上的10G也测试没问题。主要之前要设置下面几个环境变量:PATH, PERL5LIB, LD_LIBRARY_PATH附上测试的日志Microsoft Windows XP [Version 5.1.2600](C) Copyright 1985-2001 Microsoft Corp.c:>set PATH=C:appproduct11.1.0db_1perl5.8.3binMSWin32-x86-multi-thread;%PATH%c:>echo %PATH%C:appproduct11.1.0db_1perl5.8.3binMSWi
执行计划导致错误的结果
执行计划导致不正确的结果.[@more@]环境:Oracle: 10.2.0.4OS: Redhat Linux 2.6.9-42.ELsmp构建测试环境:CREATE TABLE AA( A NUMBER(11,0),B VARCHAR2(12),C NUMBER(11,0)) ;CREATE TABLE AB( D VARCHAR2(4) NOT NULL ENABLE,ID NUMBER(11,0),DATE1 DATE NOT NULL ENABLE,B VARCHAR2(12) NOT NULL ENABLE,C NUMBER(11,0) NOT NULL ENABLE);CREATE TABLE AC( ID NUMBER(11,0) NOT NULL ENABLE,E VARCHAR2(50)) ;CREATE TABLE AD( F NUMBER(2,0) NOT NULL ENABLE,E VARCHAR2(20) NOT NULL ENABLE) ;insert into AA values(2155,'0000000000
Slow expdp with parallel when exporting LONG RAW data type
A case I suffered recently.Normally, expdp is more efficient than triditional exp, so many users tend to use expdp. yet, there are some limitions on this tool, or performance issue. since it is a new tool, it can be perfect. below is the case, I met recently.[@more@]Environment:OS: AIX 5.3.0.0, Num of Physical CPU: 8, Physical Mem 20GBDB: 10.2.0.3This case happened last Saturday during the process to deploy an application release. As the plan scheduled there was a step to export the whole databa
LOGMNR遭遇Ora-600
LOGMNR遭遇Ora-600OS: AIX 5.3.0.0DB: 10.2.0.3数据被误删除之后,最容易想到的解决方案是logmnr, 但logmnr也时也会出问题(在非常时期,真是什么都有可能)。按照logmnr的操作流程:SQL> dbms_logmnr.add_logfile(‘归档文件全路径’, dbms_logmnr.new);SQL> dbms_logmnr.start_logmnr(options=>dbms_logmnr.dict_from_online_catalog);SQL> create table temp_logmnr as select * from v$logmnr_contents; create table temp_logmnr tablespace data_01 as select * from v$logmnr_contents
转一篇AIX内存配置的文档
AIX内存分为计算页面和非计算页面。Oracle跑在AIX上所分配的内存SGA属于计算页面,出于对oracle性能的考虑,应尽量减少计算页面的换出,曾经碰到在AIX默认的参数配置中,当oracle做备份时,大量的SGA被换出,导致前端报性能问题。这里转一篇metalink 316533.1SymptomsDatabase performance continues to get slower and slower the longer the database is left running. You may also notice a continuing increase in the amount of paging space usage the longer the database is left running. However, database performance return