zwleisa

BlogJava 首页 新随笔 联系 聚合 管理
  18 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

#

1.Create materialized view V_STKINVESTTRACE AS SELECT * FROM V_STKINVESTTRACE_4_SP
posted @ 2007-07-19 14:45 神仙叹 阅读(116) | 评论 (0)编辑 收藏

         今天客户打电话过来,说程序没有正常运行,收益率等数据没有计算出来.打开tomcat的日志发现,在执行一条insert语句时发生了null值的错误.经过一番跟踪和调试,终于找到闯祸的元凶--一个用来取得编号的函数,但是这个函数已经在很多客户处使用了,都没有错,为什么偏偏在这里出错了呢?在网上google一通后,才发现在对数据库有写操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的函数,是无法简单的用SQL来调用的.这种错误通常发生在低版本的Oracel中.
         原因找到了,解决起来就简单了.一般有2种解决方法:一、在函数外面套一个存储过程;二、使用自治事务(AUTONOMOUS TRANSACTION).第一种方法比较愚蠢且没有技术含量不太符合偶的审美观故pass.
第二种使用起来就很简单了:只需下列PL/SQL的声明部分加上PRAGMA AUTONOMOUS_TRANSACTION 就可以了.
         果然加上这句话后一切OK,世界又太平了.

posted @ 2007-05-14 21:51 神仙叹 阅读(1771) | 评论 (0)编辑 收藏

原文地址:http://www.bokee.net/bloggermodule/blog_viewblog.do?id=465310

Oracle的导入实用程序(Import utility)允许从数据库提取数据,并且将数据写入操作系统文件。imp使用的基本格式:imp[username[/password[@service]]],以下例举imp常用用法。


1. 获取帮助 
         
imp help=y

2. 导入一个完整数据库

						   imp system/manager file=bible_db log=dible_db full=y ignore=y
				

3. 导入一个或一组指定用户所属的全部表、索引和其他对象

						   imp system/manager file=seapark log=seapark fromuser=seapark imp 
						   system/manager file=seapark log=seapark fromuser=(seapark,amy,amyc,harold)
				

4. 将一个用户所属的数据导入另一个用户

						   imp system/manager file=tank log=tank fromuser=seapark touser=seapark_copy
						   imp system/manager file=tank log=tank fromuser=(seapark,amy)
						   touser=(seapark1, amy1)
						
5. 导入一个表
						   imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)
				

6. 从多个文件导入

						   imp system/manager file=(paycheck_1,paycheck_2,paycheck_3,paycheck_4) 
						   log=paycheck, filesize=1G full=y
				

7. 使用参数文件

						   imp system/manager parfile=bible_tables.par
						   bible_tables.par参数文件:
						
   #Import the sample tables used for the Oracle8i Database Administrator's    Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import

8. 增量导入

						   imp system./manager inctype= RECTORE FULL=Y FILE=A
						   Oracle imp/exp
   C:Documents and Settingsadministrator>exp help=y    Export: Release 9.2.0.1.0 - Production on 星期三 7月 28 17:04:43 2004   Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.   通过输入 EXP 命令和用户名/口令,您可以后接用户名/口令的命令:   例程: EXP SCOTT/TIGER   或者,您也可以通过输入跟有各种参数的 EXP 命令来控制“导出”
   按照不同参数。要指定参数,您可以使用关键字:
  格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
   例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
   或 TABLES=(T1: P1,T1: P2),如果 T1 是分区表,
USERID 必须是命令行中的第一个参数。   关键字 说明(默认)    关键字 说明(默认)
--------------------------------------------------------------------------
USERID 用户名/口令 FULL 导出整个文件 (N)
BUFFER 数据缓冲区大小 OWNER 所有者用户名列表
FILE 输出文件 (EXPDAT.DMP) TABLES 表名称列表
COMPRESS 导入到一个区 (Y) RECORDLENGTH IO 记录的长度
GRANTS 导出权限 (Y) INCTYPE 增量导出类型
INDEXES 导出索引 (Y) RECORD 跟踪增量导出 (Y)
DIRECT 直接路径 (N) TRIGGERS 导出触发器 (Y)
LOG 屏幕输出的日志文件 STATISTICS 分析对象 (ESTIMATE)
ROWS 导出数据行 (Y) PARFILE 参数文件名
CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 导出的约束条件 (Y)
OBJECT_CONSISTENT 只在对象导出期间设置为读的事务处理 (N)
FEEDBACK 每 x 行的显示进度 (0)
FILESIZE 每个转储文件的最大大小
FLASHBACK_SCN 用于将会话快照设置回以前状态的 SCN
FLASHBACK_TIME 用于获取最接近指定时间的 SCN 的时间
QUERY 用于导出表的子集的 select 子句
RESUMABLE 遇到与空格相关的错误时挂起 (N)
RESUMABLE_NAME 用于标识可恢复语句的文本字符串
RESUMABLE_TIMEOUT RESUMABLE 的等待时间
TTS_FULL_CHECK 对 TTS 执行完整的或部分相关性检查
TABLESPACES 要导出的表空间列表
TRANSPORT_TABLESPACE 导出可传输的表空间元数据 (N)
TEMPLATE 调用 iAS 模式导出的模板名
在没有警告的情况下成功终止导出。

						
								

oracle的imp和exp的一些用法- -

 

 

Oracle8i/9i EXP/IMP使用经验
一、8i EXP常用选项

1、FULL,这个用于导出整个数据库,在ROWS=N一起使用时,可以导出整个数据库的结构。例如:

exp sys file=./db_str.dmp log=./db_str.log full=y rows=n compress=y direct=y

2、BUFFER和FEEDBACK,在导出比较多的数据时,我会考虑设置这两个参数。例如:

exp new file=yw97_2003.dmp log=yw97_2003_3.log feedback=10000 buffer=100000000 tables=WO4,OK_YT

3、FILL和LOG,这两个参数分别指定备份的DMP名称和LOG名称,包括文件名和目录,例子见上面。

需要说明的是,EXP可以直接备份到磁带中,即使用FILE=/dev/rmt0(磁带设备名),但是一般我们都不这么做,原因有二:一、这样做的速度会慢很多,二、现在一般都是使用磁带库的,不建议直接对磁带进行操作。至于没有使用磁带库的朋友可以考虑和UNIX的TAR结合使用。

如果你真想使用EXP直接到磁带,你可以参考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文档号:30428.1),该文中有详细解释。

4、COMPRESS参数将在导出的同时合并碎块,尽量把数据压缩到initial的EXTENT里,默认是N,一般建议使用。DIRECT参数将告诉EXP直接读取数据,而不像传统的EXP那样,使用SELECT来读取表中的数据,这样就减少了SQL语句处理过程。一般也建议使用。不过有些情况下DIRECT参数是无法使用的。

5、如何使用SYSDBA执行EXP/IMP?

这是一个很现实的问题,有时候我们需要使用SYSDBA来执行EXP/IMP,如进行传输表空间的EXP/IMP,以及在9i下用SYS用户来执行EXP/IMP时,都需要使用SYSDBA才可。我们可以使用下面方式连入EXP/IMP:

exp "'sys/sys as sysdba'" file=1.dmp tables=gototop.t rows=n

6、QUERY参数后面跟的是where条件,值得注意的是,整个where子句需要使用""括起来,where子句的写法和SELECT中相同,如果是UNIX平台所有"和'都需要使用u26469屏蔽它们的特殊含义:

exp gototop/gototop file=1.dmp log=1.log tables=cyx.t query="where c1=20 and c2=gototop"

如果是windows平台,则使用下面的格式:

exp c/c@ncn file=c.dmp log=c.log tables=t query="""where id=1 and name='gototop'"""

二、8i IMP常用选项

1、FROMUSER和TOUSER,使用它们实现将数据从一个SCHEMA中导入到另外一个SCHEMA中。

2、IGNORE、GRANTS和INDEXES,其中IGNORE参数将忽略表的存在,继续导入,这个对于需要调整表的存储参数时很有用,我们可以先根据实际情况用合理的存储参数建好表,然后直接导入数据。而GRANTS和INDEXES则表示是否导入授权和索引,如果想使用新的存储参数重建索引,或者为了加快到入速度,我们可以考虑将INDEXES设为N,而GRANTS一般都是Y。

另外一个EXP/IMP都有的参数是PARFILE,它是用来定义EXP/IMP的参数文件,也就是说,上面的参数都可以写在一个参数文件中,但我们一般很少使用。

三、Oracle9i EXP功能描述

Oracle9i EXP在原有的基础上新增了部分新的参数,按功能主要分为以下几个部分:

1、OBJECT_CONSISTENT - 用于设置EXP对象为只读以保持对象的一致性。默认是N。

2、FLASHBACK_SCN和FLASHBACK_TIME - 用于支持FLASHBACK功能而新增。

3、RESUMABLE、RESUMABLE_NAME和RESUMABLE_TIMEOUT - 用于支持RESUMABLE空间分配而新增。

4、TTS_FULL_CHECK - 用于在传输表空间时使用依赖性检查。

5、TEMPLATE - 用于支持iAS。

6、TABLESPACES - 设置表空间导出模式。个人觉得对于一般用户而言,这个才是新增参数中最实用的一个,可以让用户在原来的FULL、OWNER、TABLES的基础上多了一种选择,使得EXP更加灵活。

四、不同版本的EXP/IMP问题?

一般来说,从低版本导入到高版本问题不大,麻烦的是将高版本的数据导入到低版本中,在Oracle9i之前,不同版本Oracle之间的EXP/IMP可以通过下面的方法来解决:

1、在高版本数据库上运行底版本的catexp.sql;

2、使用低版本的EXP来导出高版本的数据;

3、使用低版本的IMP将数据库导入到底版本数据库中;

4、在高版本数据库上重新运行高版本的catexp.sql脚本。

但在9i中,上面的方法并不能解决问题。如果直接使用底版本EXP/IMP会出现如下错误:

EXP-00008: ORACLE error %lu encountered

ORA-00904: invalid column name

这已经是一个公布的BUG,需要等到Oracle10.0才能解决,BUG号为2261,你可以到METALINK上去查看有关此BUG的详细信息。

BUG归BUG,我们的工作还是要做,在没有Oracle的支持之前,我们就自己解决。在Oracle9i中执行下面的SQL重建exu81rls视图即可。

CREATE OR REPLACE view exu81rls

(objown,objnam,policy,polown,polsch,polfun,stmts,chkopt,enabled,spolicy)

AS select u.name, o.name, r.pname, r.pfschma, r.ppname, r.pfname,

decode(bitand(r.stmt_type,1), 0,'', 'SELECT,')

|| decode(bitand(r.stmt_type,2), 0,'', 'INSERT,')

|| decode(bitand(r.stmt_type,4), 0,'', 'UPDATE,')

|| decode(bitand(r.stmt_type,8), 0,'', 'DELETE,'),

r.check_opt, r.enable_flag,

DECODE(BITAND(r.stmt_type, 16), 0, 0, 1)

from user$ u, obj$ o, rls$ r

where u.user# = o.owner#

and r.obj# = o.obj#

and (uid = 0 or

uid = o.owner# or

exists ( select * from session_roles where role='SELECT_CATALOG_ROLE')

)

/

grant select on sys.exu81rls to public;

/

五、其他问题

本文只讨论了Oracle8i和9i中的EXP/IMP的一些情况,对于之前的版本,在8.0.X中,除了QUERY参数不能用外,其它差别不大。针对没有QUERY的情况,我们可以先在数据库中使用查询条件建立临时中间表,然后使用EXP导出这个中间表即可。至于Oracle7因为目前使用的人较少,gototop不打算在此做详细解释了,如果读者朋友有需求,你可以参考Metalink文档:“Overview of Export and Import in Oracle7”(文档号:61949.1)。关于EXP/IMP的详细参数信息你可以通过EXP/IMP HELP=Y来获得。

另外关于传输表空间的更多信息可以参考下面的Metelink文档,本文不再详述。

[NOTE:77523.1] Transportable Tablespaces -- An Example to setup and use.

[NOTE:100698.1] Perform tablespace point-in-time recovery using Transportable Tablespace.

在进行并行EXP/IMP的时候,如果IMP过程建索引的话不建议同时运行5个以上的IMP,如果你想加快速度

posted @ 2007-05-10 17:29 神仙叹 阅读(7705) | 评论 (0)编辑 收藏

网上找得,觉得还不错。不过MS看到spring里也有类似的功能,有空的话可以研究一下。
/**
 * 文件名称:EMailTool
 * 文件描述:

 × 产品标识:
 × 单元标识:

 × 编写人: zhang wei
 * 编写时间: 2007-2-25
 
*/

import javax.mail.*;
import javax.mail.Store;
import javax.mail.internet.*;
import javax.activation.*;
import java.util.*;
import javax.servlet.http.*;
import java.text.SimpleDateFormat;


/**
 * todo:
 *
 * 
@author zhang wei
 * 
@version 1.0
 
*/

public class EMailTool
{
    
private String from;
    
private String to;
    
private String user;
    
private String password;
    
private String smtpHost;
    
private String pop3Host;
    
private String hostName;

    
public String getFrom()
    {
        
return from;
    }

    
public void setFrom( String from )
    {
        
this.from = from;
    }

    
public String getTo()
    {
        
return to;
    }

    
public void setTo( String to )
    {
        
this.to = to;
    }

    
public String getUser()
    {
        
return user;
    }

    
public void setUser( String user )
    {
        
this.user = user;
    }

    
public String getPassword()
    {
        
return password;
    }

    
public void setPassword( String password )
    {
        
this.password = password;
    }

    
public String getSmtpHost()
    {
        
return smtpHost;
    }

    
public void setSmtpHost( String smtpHost )
    {
        
this.smtpHost = smtpHost;
    }

    
public String getPop3Host()
    {
        
return pop3Host;
    }

    
public void setPop3Host( String pop3Host )
    {
        
this.pop3Host = pop3Host;
    }

    
public String getHostName()
    {
        
return hostName;
    }

    
public void setHostName( String hostName )
    {
        
this.hostName = hostName;
    }

    
public String getSubject()
    {
        
return subject;
    }

    
public void setSubject( String subject )
    {
        
this.subject = subject;
    }

    
public String getContent()
    {
        
return content;
    }

    
public void setContent( String content )
    {
        
this.content = content;
    }

    
public String getFilename()
    {
        
return filename;
    }

    
public void setFilename( String filename )
    {
        
this.filename = filename;
    }

    
private String subject;
    
private String content;
    
private String filename;

    
private void sendMail() throws MessagingException
    {
        
try
        {
            
// this.smtpHost = this.createSmtpHost();
            
// Get system properties
            
// Properties props = System.getProperties();
            Properties props = new Properties();
            
// Setup mail server
            props.put("mail.smtp.host"this.smtpHost);

            props.put(
"mail.smtp.auth""true"); //验证

            
// Get session
            Session session = Session.getDefaultInstance(props);
            session.setDebug(
true);
            
// Define message
            MimeMessage message = new MimeMessage(session);
            message.setFrom(
new InternetAddress(from));
            
//message.setFrom();
            message.addRecipient(Message.RecipientType.TO,
                                 
new InternetAddress(to));
            message.setSubject(
this.getSubject());
             System.out.println(
"::"+this.getFilename());
            
if (this.getFilename() != null)
            {
                BodyPart messagebodyPart 
= new MimeBodyPart();
                messagebodyPart.setContent(
this.getContent(),
                                           
"text/html;charset=gb2312");
                System.out.println(
"文件名称:" + this.getFilename());
                Multipart multipart 
= new MimeMultipart();
                multipart.addBodyPart(messagebodyPart);
                messagebodyPart 
= new MimeBodyPart();
                DataSource source 
= new FileDataSource(this.getFilename());
                messagebodyPart.setDataHandler(
new DataHandler(source));
                messagebodyPart.setFileName(
this.getFilename());
                multipart.addBodyPart(messagebodyPart);

                
// message.setContent(this.content, "text/html;charset=gb2312");
                message.setContent(multipart);
                message.setSentDate(
new java.util.Date());

                
// Send message
                message.saveChanges();
                Transport transport 
= session.getTransport("smtp");
                transport.connect(
this.smtpHost, this.user, this.password);

                transport.sendMessage(message,
                                      message.getAllRecipients());
                transport.close();
                System.out.println(
"发送成功!");
            }
            
else
            {
                message.setContent(
this.content, "text/html;charset=gb2312");
                message.setSentDate(
new java.util.Date());
                
// Send message
                message.saveChanges();
                Transport transport 
= session.getTransport("smtp");
                transport.connect(
this.smtpHost, this.user, this.password);
                message.saveChanges();

                
//transport.sendMessage(message, message.getAllRecipients());
                transport.sendMessage(message,
                                      message.getRecipients(Message.
                        RecipientType.TO));
                transport.close();
            }
        }
        
catch (Exception e)
        {
             e.printStackTrace();
             
throw new MessagingException( e.toString() );
        }
    }

    
//sendMail start method
    public void startSend() throws MessagingException {
        sendMail();
    }
}
posted @ 2007-04-04 18:04 神仙叹 阅读(210) | 评论 (0)编辑 收藏

1.调用List.add()方法,发生异常
代码:

List < String >  _codeList  =   null ;

for int  i  =   0 ; i  <  codeList.length; i ++ )
{
      _codeList.add( codeList[i] );
}


原因:
_codeList初始化不正确,应改为_codeList = new ArrayList();


2.08年8月25日:tomcat启动时出现java.io.EOFException的错误
解决方法:删除work目录下的临时目录即可

3.设置tomcat内存

在catalina.bat最前面加入
set JAVA_OPTS=-Xms128m -Xmx350m
如果用startup.bat启动tomcat,OK设置生效.够成功的分配200M内存.
但是如果不是执行startup.bat启动tomcat而是利用windows的系统服务启动tomcat服务,上面的设置就不生效了,
就是说set JAVA_OPTS=-Xms128m -Xmx350m 没起作用.上面分配200M内存就OOM了..
windows服务执行的是bin\tomcat.exe.他读取注册表中的值,而不是catalina.bat的设置.
解决办法:
修改注册表HKEY_LOCAL_MACHINE\SOFTWARE\Apache Software Foundation\Tomcat Service Manager\Tomcat5\Parameters\JavaOptions
原值为
-Dcatalina.home="C:\ApacheGroup\Tomcat 5.0"
-Djava.endorsed.dirs="C:\ApacheGroup\Tomcat 5.0\common\endorsed"
-Xrs
加入 -Xms300m -Xmx350m

4.lang.OutOfMemoryError:PermGenspace
PermGenspace的全称是Permanent Generation space,是指内存的永久保存区域,
这块内存主要是被JVM存放Class和Meta信息的,Class在被Loader时就会被放到PermGenspace中,
它和存放类实例(Instance)的Heap区域不同,GC(Garbage Collection)不会在主程序运行期对
PermGenspace进行清理,所以如果你的应用中有很多CLASS的话,就很可能出现PermGenspace错误,
这种错误常见在web服务器对JSP进行pre compile的时候。如果你的WEB APP下都用了大量的
第三方jar, 其大小
超过了jvm默认的大小(4M)那么就会产生此错误信息了。
解决方法: 手动设置MaxPermSize大小

修改TOMCAT_HOME/bin/catalina.sh
在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
建议:将相同的第三方jar文件移置到tomcat/shared/lib目录下,这样可以达到减少jar 文档重复占用内存的目的。
posted @ 2007-04-02 11:34 神仙叹 阅读(197) | 评论 (0)编辑 收藏

昨天有客户打电话来说,系统数据没有更新,我便答应他今天去现场看看。
结果在现场检查后发现,系统所用的所有job从1月31号开始都没有执行了。经过一通派查才发现是Oracle的一个bug,最后重起Oracle后解决。
下面就是我在派查过程中在网上找到的一篇文章,上面说得很清楚,我就不重复了:)。
原文地址:http://tech.163.com/05/0622/15/1MS2JH7I00091589.html

摘要:

   本文通过一次Oracle Job任务异常案例诊断,分析其原因及解决过程,从内部揭示Oracle Job任务调度及内部计时机制。

   问题及环境

   接到研发人员报告,数据库定时任务未正常执行,导致某些操作失败。

   开始介入处理该事故.

   系统环境:

SunOS DB 5.8 Generic_108528-21 sun4u sparc SUNW,Ultra-4
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production

   解决过程

   首先介入检查数据库任务

$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.3.0 - Production on Wed Nov 17 20:23:53 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
SQL> select job,last_date,last_sec,next_date,next_sec,broken,failures from
dba_jobs;
JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC B FAILURES
INTERVAL
---------- --------- ---------------- --------- ---------------- - ----------
----------------------------
31 16-NOV-04 01:00:02 17-NOV-04 01:00:00 N 0
trunc(sysdate+1)+1/24
27 16-NOV-04 00:00:04 17-NOV-04 00:00:00 N 0
TRUNC(SYSDATE) + 1
35 16-NOV-04 01:00:02 17-NOV-04 01:00:00 N 0
trunc(sysdate+1)+1/24
29 16-NOV-04 00:00:04 17-NOV-04 00:00:00 N 0
TRUNC(SYSDATE) + 1
30 01-NOV-04 06:00:01 01-DEC-04 06:00:00 N 0
trunc(add_months(sysdate,1),’MM’)+6/24
65 16-NOV-04 04:00:03 17-NOV-04 04:00:00 N 0
trunc(sysdate+1)+4/24
46 16-NOV-04 02:14:27 17-NOV-04 02:14:27 N 0
sysdate+1
66 16-NOV-04 03:00:02 17-NOV-04 18:14:49 N 0
trunc(sysdate+1)+3/24
8 rows selected.

   发现JOB任务是都没有正常执行,最早一个应该在17-NOV-04 01:00:00执行。但是没有执行。

   建立测试JOB

create or replace PROCEDURE pining

IS
BEGIN
NULL;
END;
/
variable jobno number;
variable instno number;
begin
select instance_number into :instno from v$instance;
dbms_job.submit(:jobno, ’pining;’, trunc(sysdate+1/288,’MI’),
’trunc(SYSDATE+1/288,’’MI’’)’, TRUE, :instno);
end;
/

   发现同样的,不执行。

   但是通过dbms_job.run(<job>)执行没有任何问题。

   进行恢复尝试

   怀疑是CJQ0进程失效,首先设置JOB_QUEUE_PROCESSES为0,Oracle会杀掉CJQ0及相应job进程

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
   等2~3分钟,重新设置

SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 5;
   此时PMON会重起CJQ0进程

Thu Nov 18 11:59:50 2004

ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;
Thu Nov 18 12:01:30 2004
ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;
Thu Nov 18 12:01:30 2004
Restarting dead background process CJQ0
CJQ0 started with pid=8
但是Job仍然不执行,而且在再次修改的时候,CJQ0直接死掉了。
Thu Nov 18 13:52:05 2004
ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;
Thu Nov 18 14:09:30 2004
ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;
Thu Nov 18 14:10:27 2004
ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;
Thu Nov 18 14:10:42 2004
ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;
Thu Nov 18 14:31:07 2004
ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;
Thu Nov 18 14:40:14 2004
ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;
Thu Nov 18 14:40:28 2004
ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;
Thu Nov 18 14:40:33 2004
ALTER SYSTEM SET job_queue_processes=1 SCOPE=MEMORY;
Thu Nov 18 14:40:40 2004
ALTER SYSTEM SET job_queue_processes=10 SCOPE=MEMORY;
Thu Nov 18 15:00:42 2004
ALTER SYSTEM SET job_queue_processes=0 SCOPE=MEMORY;

Thu Nov 18 15:01:36 2004
ALTER SYSTEM SET job_queue_processes=15 SCOPE=MEMORY;

   尝试重起数据库,这个必须在晚上进行:

PMON started with pid=2
DBW0 started with pid=3
LGWR started with pid=4
CKPT started with pid=5
SMON started with pid=6
RECO started with pid=7
CJQ0 started with pid=8
QMN0 started with pid=9
....

   CJQ0正常启动,但是Job仍然不执行。

   没办法了...

   继续研究...居然发现Oralce有这样一个bug

1. Clear description of the problem encountered:
slgcsf() / slgcs() on Solaris will stop incrementing after
497 days 2 hrs 28 mins (approx) machine uptime.

2. Pertinent configuration information
No special configuration other than long machine uptime. .
3. Indication of the frequency and predictability of the problem
100% but only after 497 days.
4. Sequence of events leading to the problem
If the gethrtime() OS call returns a value > 42949672950000000
nanoseconds then slgcs() stays at 0xffffffff. This can
cause some problems in parts of the code which rely on
slgcs() to keep moving.
eg: In kkjssrh() does "now = slgcs(&se)" and compares that
to a previous timestamp. After 497 days uptime slgcs()
keeps returning 0xffffffff so "now - kkjlsrt" will
always return 0. .
5. Technical impact on the customer. Include persistent after effects.
In this case DBMS JOBS stopped running after 497 days uptime.
Other symptoms could occur in various places in the code.

   好么,原来是计时器溢出了,一检查我的主机:

bash-2.03$ uptime
10:00pm up 500 day(s), 14:57, 1 user, load average: 1.31, 1.09, 1.08
bash-2.03$ date
Fri Nov 19 22:00:14 CST 2004

   刚好到事发时是497天多一点.ft.

   安排重起主机系统..

   这个问题够郁闷的,NND,谁曾想Oracle这都成...

   Oracle最后声称:

fix made it into 9.2.0.6 patchset

   在Solaris上的9206尚未发布...晕.

   好了,就当是个经历吧,如果有问题非常不可思议的话,那么大胆怀疑Oracle吧,是Bug,可能就是Bug。

   重起以后问题解决,状态如下:

$ sqlplus "/ as sysdba"
SQL*Plus: Release 9.2.0.3.0 - Production on Fri Nov 26 09:21:21 2004
Copyright (c) 1982, 2002, Oracle Corporation. All rights reserved.
Connected to:
Oracle9i Enterprise Edition Release 9.2.0.3.0 - Production
With the Partitioning, OLAP and Oracle Data Mining options
JServer Release 9.2.0.3.0 - Production
SQL> select job,last_date,last_sec,next_date,next_sec from user_jobs;

JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC
---------- --------- ---------------- --------- ----------------
70 26-NOV-04 09:21:04 26-NOV-04 09:26:00
SQL> /
JOB LAST_DATE LAST_SEC NEXT_DATE NEXT_SEC
---------- --------- ---------------- --------- ----------------
70 26-NOV-04 09:26:01 26-NOV-04 09:31:00
SQL>
SQL> select * from v$timer;
HSECS
----------
3388153
SQL> select * from v$timer;
HSECS
----------
3388319
SQL>

posted @ 2007-02-06 15:57 神仙叹 阅读(272) | 评论 (0)编辑 收藏

      今天看到《Java编程思想》继承部分,讲到基类和子类的构造器(constructor),书中主要强调了2点:
1.子类在初始化的时候,Java将自动调用基类的默认构造器;
2.当基类只有带参数的构造器时,子类的构造器必须显式的利用super关键字调用基类的构造器;
3.当基类有多个构造器且其中包含默认构造器,而且子类不显式的调用基类的构造器时,Java将自动调用基类的默认构造器(这点是我琢磨的);


-------------------------------------------
--------------- 华丽的午饭分割线--------------------
下午又看了点书,补充关于final关键字的:
1.所有private的方法都是隐式的申明为final的;
2.当类被定义为final时,该类将不能被继承;

posted @ 2006-08-23 10:22 神仙叹 阅读(376) | 评论 (2)编辑 收藏

公司的技术平台将从.Net迁移到java上,所以现在我开始要恶补Java的知识了。
        .Net由于是微软推出的,因此也继承了微软产品一贯的特点。使用简单,易于上手,有着丰富的中文资料,因此学习.Net是比较容易和便利的,我当年就是拿了本不知道什么名字的书看了几天就可以写出一些小程序了。但是Java的学习就没有这么舒服了,至少我就是在高手的亲自指导下花了1个礼拜才能写一些小程序,有时我在想java程序员工资高是不是就这么来的?(笑)
        .Net现在还没有开源,因此第三方的产品相对于java就显得比较少,思维也比较简单:一切跟着微软走就行了,而java就相反,他是开源的所以第三方的产品那是相当的多,以应用服务器为例,知名的就有:tomcat,weblogic,websphere和jboss等,显示了java阵营勃勃生机,但客观上也给初学者造成相当的疑惑:这些技术或产品有什么区别?哪个更适合我?等等类似的问题,足以让菜鸟们昏头胀脑了。
posted @ 2006-08-22 14:03 神仙叹 阅读(170) | 评论 (0)编辑 收藏

仅列出标题
共2页: 上一页 1 2