zwleisa

          BlogJava 首頁 新隨筆 聯(lián)系 聚合 管理
            18 Posts :: 0 Stories :: 10 Comments :: 0 Trackbacks

          常用鏈接

          留言簿(1)

          隨筆檔案

          搜索

          最新評論

          閱讀排行榜

          評論排行榜

          #

          1.Create materialized view V_STKINVESTTRACE AS SELECT * FROM V_STKINVESTTRACE_4_SP
          posted @ 2007-07-19 14:45 神仙嘆 閱讀(118) | 評論 (0)編輯 收藏

          ?????????今天客戶打電話過來,說程序沒有正常運行,收益率等數(shù)據(jù)沒有計算出來.打開tomcat的日志發(fā)現(xiàn),在執(zhí)行一條insert語句時發(fā)生了null值的錯誤.經(jīng)過一番跟蹤和調(diào)試,終于找到闖禍的元兇--一個用來取得編號的函數(shù),但是這個函數(shù)已經(jīng)在很多客戶處使用了,都沒有錯,為什么偏偏在這里出錯了呢?在網(wǎng)上google一通后,才發(fā)現(xiàn)在對數(shù)據(jù)庫有寫操作(INSERT、UPDATE、DELETE、CREATE、ALTER、COMMIT)的函數(shù),是無法簡單的用SQL來調(diào)用的.這種錯誤通常發(fā)生在低版本的Oracel中.
          ?????????原因找到了,解決起來就簡單了.一般有2種解決方法:一、在函數(shù)外面套一個存儲過程;二、使用自治事務(wù)(AUTONOMOUS TRANSACTION).第一種方法比較愚蠢且沒有技術(shù)含量不太符合偶的審美觀故pass.
          第二種使用起來就很簡單了:只需下列PL/SQL的聲明部分加上PRAGMA AUTONOMOUS_TRANSACTION 就可以了.
          ?????????果然加上這句話后一切OK,世界又太平了.

          posted @ 2007-05-14 21:51 神仙嘆 閱讀(1777) | 評論 (0)編輯 收藏

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

          Oracle的導(dǎo)入實用程序(Import utility)允許從數(shù)據(jù)庫提取數(shù)據(jù),并且將數(shù)據(jù)寫入操作系統(tǒng)文件。imp使用的基本格式:imp[username[/password[@service]]],以下例舉imp常用用法。


          1. 獲取幫助?
          ?????????
          imp help=y

          2. 導(dǎo)入一個完整數(shù)據(jù)庫

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

          3. 導(dǎo)入一個或一組指定用戶所屬的全部表、索引和其他對象

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

          4. 將一個用戶所屬的數(shù)據(jù)導(dǎo)入另一個用戶

          						???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. 導(dǎo)入一個表
          						???imp system/manager file=tank log=tank fromuser=seapark TABLES=(a,b)
          				

          6. 從多個文件導(dǎo)入

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

          7. 使用參數(shù)文件

          						???imp system/manager parfile=bible_tables.par
          						???bible_tables.par參數(shù)文件:
          						
          ???#Import the sample tables used for the Oracle8i Database Administrator's ???Bible. fromuser=seapark touser=seapark_copy file=seapark log=seapark_import

          8. 增量導(dǎo)入

          						???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 ??或者,您也可以通過輸入跟有各種參數(shù)的 EXP 命令來控制“導(dǎo)出”
          ???按照不同參數(shù)。要指定參數(shù),您可以使用關(guān)鍵字:
          ??格式: EXP KEYWORD=value 或 KEYWORD=(value1,value2,...,valueN)
          ???例程: EXP SCOTT/TIGER GRANTS=Y TABLES=(EMP,DEPT,MGR)
          ???或 TABLES=(T1: P1,T1: P2),如果 T1 是分區(qū)表,
          USERID 必須是命令行中的第一個參數(shù)。???關(guān)鍵字 說明(默認) ???關(guān)鍵字 說明(默認)
          --------------------------------------------------------------------------
          USERID 用戶名/口令 FULL 導(dǎo)出整個文件 (N)
          BUFFER 數(shù)據(jù)緩沖區(qū)大小 OWNER 所有者用戶名列表
          FILE 輸出文件 (EXPDAT.DMP) TABLES 表名稱列表
          COMPRESS 導(dǎo)入到一個區(qū) (Y) RECORDLENGTH IO 記錄的長度
          GRANTS 導(dǎo)出權(quán)限 (Y) INCTYPE 增量導(dǎo)出類型
          INDEXES 導(dǎo)出索引 (Y) RECORD 跟蹤增量導(dǎo)出 (Y)
          DIRECT 直接路徑 (N) TRIGGERS 導(dǎo)出觸發(fā)器 (Y)
          LOG 屏幕輸出的日志文件 STATISTICS 分析對象 (ESTIMATE)
          ROWS 導(dǎo)出數(shù)據(jù)行 (Y) PARFILE 參數(shù)文件名
          CONSISTENT 交叉表的一致性 (N) CONSTRAINTS 導(dǎo)出的約束條件 (Y)
          OBJECT_CONSISTENT 只在對象導(dǎo)出期間設(shè)置為讀的事務(wù)處理 (N)
          FEEDBACK 每 x 行的顯示進度 (0)
          FILESIZE 每個轉(zhuǎn)儲文件的最大大小
          FLASHBACK_SCN 用于將會話快照設(shè)置回以前狀態(tài)的 SCN
          FLASHBACK_TIME 用于獲取最接近指定時間的 SCN 的時間
          QUERY 用于導(dǎo)出表的子集的 select 子句
          RESUMABLE 遇到與空格相關(guān)的錯誤時掛起 (N)
          RESUMABLE_NAME 用于標識可恢復(fù)語句的文本字符串
          RESUMABLE_TIMEOUT RESUMABLE 的等待時間
          TTS_FULL_CHECK 對 TTS 執(zhí)行完整的或部分相關(guān)性檢查
          TABLESPACES 要導(dǎo)出的表空間列表
          TRANSPORT_TABLESPACE 導(dǎo)出可傳輸?shù)谋砜臻g元數(shù)據(jù) (N)
          TEMPLATE 調(diào)用 iAS 模式導(dǎo)出的模板名
          在沒有警告的情況下成功終止導(dǎo)出。

          						
          								

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

          ?

          ?

          Oracle8i/9i EXP/IMP使用經(jīng)驗
          一、8i EXP常用選項

          1、FULL,這個用于導(dǎo)出整個數(shù)據(jù)庫,在ROWS=N一起使用時,可以導(dǎo)出整個數(shù)據(jù)庫的結(jié)構(gòu)。例如:

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

          2、BUFFER和FEEDBACK,在導(dǎo)出比較多的數(shù)據(jù)時,我會考慮設(shè)置這兩個參數(shù)。例如:

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

          3、FILL和LOG,這兩個參數(shù)分別指定備份的DMP名稱和LOG名稱,包括文件名和目錄,例子見上面。

          需要說明的是,EXP可以直接備份到磁帶中,即使用FILE=/dev/rmt0(磁帶設(shè)備名),但是一般我們都不這么做,原因有二:一、這樣做的速度會慢很多,二、現(xiàn)在一般都是使用磁帶庫的,不建議直接對磁帶進行操作。至于沒有使用磁帶庫的朋友可以考慮和UNIX的TAR結(jié)合使用。

          如果你真想使用EXP直接到磁帶,你可以參考Metalink文章“EXPORTING TO TAPE ON UNIX SYSTEMS”(文檔號:30428.1),該文中有詳細解釋。

          4、COMPRESS參數(shù)將在導(dǎo)出的同時合并碎塊,盡量把數(shù)據(jù)壓縮到initial的EXTENT里,默認是N,一般建議使用。DIRECT參數(shù)將告訴EXP直接讀取數(shù)據(jù),而不像傳統(tǒng)的EXP那樣,使用SELECT來讀取表中的數(shù)據(jù),這樣就減少了SQL語句處理過程。一般也建議使用。不過有些情況下DIRECT參數(shù)是無法使用的。

          5、如何使用SYSDBA執(zhí)行EXP/IMP?

          這是一個很現(xiàn)實的問題,有時候我們需要使用SYSDBA來執(zhí)行EXP/IMP,如進行傳輸表空間的EXP/IMP,以及在9i下用SYS用戶來執(zhí)行EXP/IMP時,都需要使用SYSDBA才可。我們可以使用下面方式連入EXP/IMP:

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

          6、QUERY參數(shù)后面跟的是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,使用它們實現(xiàn)將數(shù)據(jù)從一個SCHEMA中導(dǎo)入到另外一個SCHEMA中。

          2、IGNORE、GRANTS和INDEXES,其中IGNORE參數(shù)將忽略表的存在,繼續(xù)導(dǎo)入,這個對于需要調(diào)整表的存儲參數(shù)時很有用,我們可以先根據(jù)實際情況用合理的存儲參數(shù)建好表,然后直接導(dǎo)入數(shù)據(jù)。而GRANTS和INDEXES則表示是否導(dǎo)入授權(quán)和索引,如果想使用新的存儲參數(shù)重建索引,或者為了加快到入速度,我們可以考慮將INDEXES設(shè)為N,而GRANTS一般都是Y。

          另外一個EXP/IMP都有的參數(shù)是PARFILE,它是用來定義EXP/IMP的參數(shù)文件,也就是說,上面的參數(shù)都可以寫在一個參數(shù)文件中,但我們一般很少使用。

          三、Oracle9i EXP功能描述

          Oracle9i EXP在原有的基礎(chǔ)上新增了部分新的參數(shù),按功能主要分為以下幾個部分:

          1、OBJECT_CONSISTENT - 用于設(shè)置EXP對象為只讀以保持對象的一致性。默認是N。

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

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

          4、TTS_FULL_CHECK - 用于在傳輸表空間時使用依賴性檢查。

          5、TEMPLATE - 用于支持iAS。

          6、TABLESPACES - 設(shè)置表空間導(dǎo)出模式。個人覺得對于一般用戶而言,這個才是新增參數(shù)中最實用的一個,可以讓用戶在原來的FULL、OWNER、TABLES的基礎(chǔ)上多了一種選擇,使得EXP更加靈活。

          四、不同版本的EXP/IMP問題?

          一般來說,從低版本導(dǎo)入到高版本問題不大,麻煩的是將高版本的數(shù)據(jù)導(dǎo)入到低版本中,在Oracle9i之前,不同版本Oracle之間的EXP/IMP可以通過下面的方法來解決:

          1、在高版本數(shù)據(jù)庫上運行底版本的catexp.sql;

          2、使用低版本的EXP來導(dǎo)出高版本的數(shù)據(jù);

          3、使用低版本的IMP將數(shù)據(jù)庫導(dǎo)入到底版本數(shù)據(jù)庫中;

          4、在高版本數(shù)據(jù)庫上重新運行高版本的catexp.sql腳本。

          但在9i中,上面的方法并不能解決問題。如果直接使用底版本EXP/IMP會出現(xiàn)如下錯誤:

          EXP-00008: ORACLE error %lu encountered

          ORA-00904: invalid column name

          這已經(jīng)是一個公布的BUG,需要等到Oracle10.0才能解決,BUG號為2261,你可以到METALINK上去查看有關(guān)此BUG的詳細信息。

          BUG歸BUG,我們的工作還是要做,在沒有Oracle的支持之前,我們就自己解決。在Oracle9i中執(zhí)行下面的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參數(shù)不能用外,其它差別不大。針對沒有QUERY的情況,我們可以先在數(shù)據(jù)庫中使用查詢條件建立臨時中間表,然后使用EXP導(dǎo)出這個中間表即可。至于Oracle7因為目前使用的人較少,gototop不打算在此做詳細解釋了,如果讀者朋友有需求,你可以參考Metalink文檔:“Overview of Export and Import in Oracle7”(文檔號:61949.1)。關(guān)于EXP/IMP的詳細參數(shù)信息你可以通過EXP/IMP HELP=Y來獲得。

          另外關(guān)于傳輸表空間的更多信息可以參考下面的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 神仙嘆 閱讀(7716) | 評論 (0)編輯 收藏

          網(wǎng)上找得,覺得還不錯。不過MS看到spring里也有類似的功能,有空的話可以研究一下。
          /**
          ?*?文件名稱:EMailTool
          ?*?文件描述:

          ?×?產(chǎn)品標識:
          ?×?單元標識:

          ?×?編寫人:?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(
          "發(fā)送成功!");
          ????????????}
          ????????????
          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 神仙嘆 閱讀(211) | 評論 (0)編輯 收藏

          1.調(diào)用List.add()方法,發(fā)生異常
          代碼:

          List < String > ?_codeList? = ? null ;

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


          原因:
          _codeList初始化不正確,應(yīng)改為_codeList = new ArrayList();


          2.08年8月25日:tomcat啟動時出現(xiàn)java.io.EOFException的錯誤
          解決方法:刪除work目錄下的臨時目錄即可

          3.設(shè)置tomcat內(nèi)存

          在catalina.bat最前面加入
          set JAVA_OPTS=-Xms128m -Xmx350m
          如果用startup.bat啟動tomcat,OK設(shè)置生效.夠成功的分配200M內(nèi)存.
          但是如果不是執(zhí)行startup.bat啟動tomcat而是利用windows的系統(tǒng)服務(wù)啟動tomcat服務(wù),上面的設(shè)置就不生效了,
          就是說set JAVA_OPTS=-Xms128m -Xmx350m 沒起作用.上面分配200M內(nèi)存就OOM了..
          windows服務(wù)執(zhí)行的是bin\tomcat.exe.他讀取注冊表中的值,而不是catalina.bat的設(shè)置.
          解決辦法:
          修改注冊表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,是指內(nèi)存的永久保存區(qū)域,
          這塊內(nèi)存主要是被JVM存放Class和Meta信息的,Class在被Loader時就會被放到PermGenspace中,
          它和存放類實例(Instance)的Heap區(qū)域不同,GC(Garbage Collection)不會在主程序運行期對
          PermGenspace進行清理,所以如果你的應(yīng)用中有很多CLASS的話,就很可能出現(xiàn)PermGenspace錯誤,
          這種錯誤常見在web服務(wù)器對JSP進行pre compile的時候。如果你的WEB APP下都用了大量的
          第三方j(luò)ar, 其大小
          超過了jvm默認的大小(4M)那么就會產(chǎn)生此錯誤信息了。
          解決方法: 手動設(shè)置MaxPermSize大小

          修改TOMCAT_HOME/bin/catalina.sh
          在“echo "Using CATALINA_BASE: $CATALINA_BASE"”上面加入以下行:
          JAVA_OPTS="-server -XX:PermSize=64M -XX:MaxPermSize=128m
          建議:將相同的第三方j(luò)ar文件移置到tomcat/shared/lib目錄下,這樣可以達到減少jar 文檔重復(fù)占用內(nèi)存的目的。
          posted @ 2007-04-02 11:34 神仙嘆 閱讀(200) | 評論 (0)編輯 收藏

          昨天有客戶打電話來說,系統(tǒng)數(shù)據(jù)沒有更新,我便答應(yīng)他今天去現(xiàn)場看看。
          結(jié)果在現(xiàn)場檢查后發(fā)現(xiàn),系統(tǒng)所用的所有job從1月31號開始都沒有執(zhí)行了。經(jīng)過一通派查才發(fā)現(xiàn)是Oracle的一個bug,最后重起Oracle后解決。
          下面就是我在派查過程中在網(wǎng)上找到的一篇文章,上面說得很清楚,我就不重復(fù)了:)。
          原文地址:http://tech.163.com/05/0622/15/1MS2JH7I00091589.html

          摘要:

             本文通過一次Oracle Job任務(wù)異常案例診斷,分析其原因及解決過程,從內(nèi)部揭示Oracle Job任務(wù)調(diào)度及內(nèi)部計時機制。

             問題及環(huán)境

             接到研發(fā)人員報告,數(shù)據(jù)庫定時任務(wù)未正常執(zhí)行,導(dǎo)致某些操作失敗。

             開始介入處理該事故.

             系統(tǒng)環(huán)境:

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

             解決過程

             首先介入檢查數(shù)據(jù)庫任務(wù)

          $ 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.

             發(fā)現(xiàn)JOB任務(wù)是都沒有正常執(zhí)行,最早一個應(yīng)該在17-NOV-04 01:00:00執(zhí)行。但是沒有執(zhí)行。

             建立測試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;
          /

             發(fā)現(xiàn)同樣的,不執(zhí)行。

             但是通過dbms_job.run(<job>)執(zhí)行沒有任何問題。

             進行恢復(fù)嘗試

             懷疑是CJQ0進程失效,首先設(shè)置JOB_QUEUE_PROCESSES為0,Oracle會殺掉CJQ0及相應(yīng)job進程

          SQL> ALTER SYSTEM SET JOB_QUEUE_PROCESSES = 0;
             等2~3分鐘,重新設(shè)置

          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仍然不執(zhí)行,而且在再次修改的時候,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;

             嘗試重起數(shù)據(jù)庫,這個必須在晚上進行:

          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仍然不執(zhí)行。

             沒辦法了...

             繼續(xù)研究...居然發(fā)現(xiàn)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

             剛好到事發(fā)時是497天多一點.ft.

             安排重起主機系統(tǒng)..

             這個問題夠郁悶的,NND,誰曾想Oracle這都成...

             Oracle最后聲稱:

          fix made it into 9.2.0.6 patchset

             在Solaris上的9206尚未發(fā)布...暈.

             好了,就當(dāng)是個經(jīng)歷吧,如果有問題非常不可思議的話,那么大膽懷疑Oracle吧,是Bug,可能就是Bug。

             重起以后問題解決,狀態(tài)如下:

          $ 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 神仙嘆 閱讀(276) | 評論 (0)編輯 收藏

          ??????今天看到《Java編程思想》繼承部分,講到基類和子類的構(gòu)造器(constructor),書中主要強調(diào)了2點:
          1.子類在初始化的時候,Java將自動調(diào)用基類的默認構(gòu)造器;
          2.當(dāng)基類只有帶參數(shù)的構(gòu)造器時,子類的構(gòu)造器必須顯式的利用super關(guān)鍵字調(diào)用基類的構(gòu)造器;
          3.當(dāng)基類有多個構(gòu)造器且其中包含默認構(gòu)造器,而且子類不顯式的調(diào)用基類的構(gòu)造器時,Java將自動調(diào)用基類的默認構(gòu)造器(這點是我琢磨的);


          -------------------------------------------
          --------------- 華麗的午飯分割線--------------------
          下午又看了點書,補充關(guān)于final關(guān)鍵字的:
          1.所有private的方法都是隱式的申明為final的;
          2.當(dāng)類被定義為final時,該類將不能被繼承;

          posted @ 2006-08-23 10:22 神仙嘆 閱讀(379) | 評論 (2)編輯 收藏

          公司的技術(shù)平臺將從.Net遷移到j(luò)ava上,所以現(xiàn)在我開始要惡補Java的知識了。
          ??????? .Net由于是微軟推出的,因此也繼承了微軟產(chǎn)品一貫的特點。使用簡單,易于上手,有著豐富的中文資料,因此學(xué)習(xí).Net是比較容易和便利的,我當(dāng)年就是拿了本不知道什么名字的書看了幾天就可以寫出一些小程序了。但是Java的學(xué)習(xí)就沒有這么舒服了,至少我就是在高手的親自指導(dǎo)下花了1個禮拜才能寫一些小程序,有時我在想java程序員工資高是不是就這么來的?(笑)
          ??????? .Net現(xiàn)在還沒有開源,因此第三方的產(chǎn)品相對于java就顯得比較少,思維也比較簡單:一切跟著微軟走就行了,而java就相反,他是開源的所以第三方的產(chǎn)品那是相當(dāng)?shù)亩啵詰?yīng)用服務(wù)器為例,知名的就有:tomcat,weblogic,websphere和jboss等,顯示了java陣營勃勃生機,但客觀上也給初學(xué)者造成相當(dāng)?shù)囊苫螅哼@些技術(shù)或產(chǎn)品有什么區(qū)別?哪個更適合我?等等類似的問題,足以讓菜鳥們昏頭脹腦了。
          posted @ 2006-08-22 14:03 神仙嘆 閱讀(175) | 評論 (0)編輯 收藏

          僅列出標題
          共2頁: 上一頁 1 2 
          主站蜘蛛池模板: 西华县| 博白县| 浦城县| 怀安县| 云霄县| 武穴市| 象山县| 惠州市| 威信县| 稷山县| 山东| 海城市| 类乌齐县| 潮安县| 上犹县| 山西省| 雅江县| 英超| 乐都县| 和平县| 隆化县| 名山县| 永丰县| 灵璧县| 那坡县| 哈密市| 青铜峡市| 营口市| 马鞍山市| 贵州省| 广河县| 广昌县| 桦甸市| 勃利县| 白玉县| 西昌市| 加查县| 渭源县| 天津市| 阿鲁科尔沁旗| 凉城县|