#
錯(cuò)誤提示:
Exception in thread "main" org.hibernate.exception.SQLGrammarException: could not fetch initial value for increment generator
at org.hibernate.exception.SQLStateConverter.convert(SQLStateConverter.java:67)
at org.hibernate.exception.JDBCExceptionHelper.convert(JDBCExceptionHelper.java:43)
at org.hibernate.id.IncrementGenerator.getNext(IncrementGenerator.java:107)
at org.hibernate.id.IncrementGenerator.generate(IncrementGenerator.java:44)
at org.hibernate.event.def.AbstractSaveEventListener.saveWithGeneratedId(AbstractSaveEventListener.java:91)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.saveWithGeneratedOrRequestedId(DefaultSaveOrUpdateEventListener.java:186)
at org.hibernate.event.def.DefaultSaveEventListener.saveWithGeneratedOrRequestedId(DefaultSaveEventListener.java:33)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.entityIsTransient(DefaultSaveOrUpdateEventListener.java:175)
at org.hibernate.event.def.DefaultSaveEventListener.performSaveOrUpdate(DefaultSaveEventListener.java:27)
at org.hibernate.event.def.DefaultSaveOrUpdateEventListener.onSaveOrUpdate(DefaultSaveOrUpdateEventListener.java:70)
at org.hibernate.impl.SessionImpl.fireSave(SessionImpl.java:530)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:518)
at org.hibernate.impl.SessionImpl.save(SessionImpl.java:514)
at hibernatedao.Myuser2DAO.save(Myuser2DAO.java:28)
at HibernateDaoTest.main(HibernateDaoTest.java:24)
Caused by: com.microsoft.sqlserver.jdbc.SQLServerException: 對(duì)象名 user' 無效。
at com.microsoft.sqlserver.jdbc.SQLServerException.makeFromDatabaseError(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerStatement.getNextResult(Unknown Source)
at com.microsoft.sqlserver.jdbc.SQLServerPreparedStatement.doExecutePreparedStatement(Unknown Source)
hbm.xml代碼:
<hibernate-mapping>
<class name="hibernatedao.Myuser2" table="t_myuser2" schema="dbo" catalog="myssh">
<id name="id" type="java.lang.Integer">
<column name="id" />
<generator class="increment" />
</id>
<property name="username" type="java.lang.String">
<column name="username" length="50" not-null="true" />
</property>
<property name="password" type="java.lang.String">
<column name="password" length="50" not-null="true" />
</property>
</class>
</hibernate-mapping>
錯(cuò)誤原因一:
要將 <generator class="increment"> </generator>中的"increment"換成"native".
將主鍵的生成交給數(shù)據(jù)庫來維護(hù)。
原因二:對(duì)象名不能為“user"
原因三:在SQLServer企業(yè)管理器,選中表格,編輯
在底部有一個(gè)[標(biāo)識(shí)],選中是
Java入門--漫談Java程序的性能優(yōu)化
2008-03-14 11:06 作者:shenkai 來源:賽迪網(wǎng)
[摘要] 在java中,使用最頻繁、同時(shí)也是濫用最多的一個(gè)類或許就是java.lang.String,它也是導(dǎo)致代碼性能低下最主要的原因之一。
[關(guān)鍵字]
Java 程序 性能優(yōu)化
Java使得復(fù)雜應(yīng)用的開發(fā)變得相對(duì)簡(jiǎn)單。毫無疑問,它的這種易用性對(duì)Java的大范圍流行功不可沒。然而,這種易用性實(shí)際上是一把雙刃劍。一個(gè)設(shè)計(jì)良好的Java程序,性能表現(xiàn)往往不如一個(gè)同樣設(shè)計(jì)良好的C++程序。在Java程序中,性能問題的大部分原因并不在于Java語言,而是在于程序本身。養(yǎng)成好的代碼編寫習(xí)慣非常重要,比如正確地、巧妙地運(yùn)用java.lang.String類和java.util.Vector類,它能夠顯著地提高程序的性能。下面我們就來具體地分析一下這方面的問題。
在java中,使用最頻繁、同時(shí)也是濫用最多的一個(gè)類或許就是java.lang.String,它也是導(dǎo)致代碼性能低下最主要的原因之一。請(qǐng)考慮下面這個(gè)例子:
String s1 = "Testing String";
String s2 = "Concatenation Performance";
String s3 = s1 + " " + s2;
幾乎所有的Java程序員都知道上面的代碼效率不高。那么,我們應(yīng)該怎么辦呢?也許可以試試下面這種代碼:
StringBuffer s = new StringBuffer();
s.append("Testing String");
s.append(" ");
s.append("Concatenation Performance");
String s3 = s.toString();
這些代碼會(huì)比第一個(gè)代碼片段效率更高嗎?答案是否定的。這里的代碼實(shí)際上正是編譯器編譯第一個(gè)代碼片段之后的結(jié)果。既然與使用多個(gè)獨(dú)立的String對(duì)象相比,StringBuffer并沒有使代碼有任何效率上的提高,那為什么有那么多的Java書籍批評(píng)第一種方法、推薦使用第二種方法?
第二個(gè)代碼片段用到了StringBuffer類(編譯器在第一個(gè)片段中也將使用StringBuffer類),我們來分析一下StringBuffer類的默認(rèn)構(gòu)造函數(shù),下面是它的代碼:
public StringBuffer() { this(16); }
默認(rèn)構(gòu)造函數(shù)預(yù)設(shè)了16個(gè)字符的緩存容量?,F(xiàn)在我們?cè)賮砜纯碨tringBuffer類的append()方法:
public synchronized StringBuffer append(String str) {
if (str == null) {
str = String.valueOf(str);
}
int len = str.length();
int newcount = count + len;
if (newcount > value.length) expandCapacity(newcount);
str.getChars(0, len, value, count);
count = newcount; return this;
}
append()方法首先計(jì)算字符串追加完成后的總長(zhǎng)度,如果這個(gè)總長(zhǎng)度大于StringBuffer的存儲(chǔ)能力,append()方法調(diào)用私有的expandCapacity()方法。expandCapacity()方法在每次被調(diào)用時(shí)使StringBuffer存儲(chǔ)能力加倍,并把現(xiàn)有的字符數(shù)組內(nèi)容復(fù)制到新的存儲(chǔ)空間。
在第二個(gè)代碼片段中(以及在第一個(gè)代碼片段的編譯結(jié)果中),由于字符串追加操作的最后結(jié)果是“Testing String Concatenation Performance”,它有40個(gè)字符,StringBuffer的存儲(chǔ)能力必須擴(kuò)展兩次,從而導(dǎo)致了兩次代價(jià)昂貴的復(fù)制操作。因此,我們至少有一點(diǎn)可以做得比編譯器更好,這就是分配一個(gè)初始存儲(chǔ)容量大于或者等于40個(gè)字符的StringBuffer,如下所示:
StringBuffer s = new StringBuffer(45);
s.append("Testing String");
s.append(" ");
s.append("Concatenation Performance");
String s3 = s.toString();
再考慮下面這個(gè)例子:
String s = "";
int sum = 0;
for(int I=1; I<10; I++) {
sum += I;
s = s + "+" +I ;
}
s = s + "=" + sum;
分析一下為何前面的代碼比下面的代碼效率低:
StringBuffer sb = new StringBuffer();
int sum = 0;
for(int I=1;
I<10; I++){
sum + = I;
sb.append(I).append("+");
}
String s = sb.append("=").append(sum).toString();
原因就在于每個(gè)s = s + "+" + I操作都要?jiǎng)?chuàng)建并拆除一個(gè)StringBuffer對(duì)象以及一個(gè)String對(duì)象。這完全是一種浪費(fèi),而在第二個(gè)例子中我們避免了這種情況。
我們?cè)賮砜纯戳硗庖粋€(gè)常用的Java類??java.util.Vector。簡(jiǎn)單地說,一個(gè)Vector就是一個(gè)java.lang.Object實(shí)例的數(shù)組。Vector與數(shù)組相似,它的元素可以通過整數(shù)形式的索引訪問。但是,Vector類型的對(duì)象在創(chuàng)建之后,對(duì)象的大小能夠根據(jù)元素的增加或者刪除而擴(kuò)展、縮小。請(qǐng)考慮下面這個(gè)向Vector加入元素的例子:
Object obj = new Object();
Vector v = new Vector(100000);
for(int I=0;
I<100000; I++) { v.add(0,obj); }
除非有絕對(duì)充足的理由要求每次都把新元素插入到Vector的前面,否則上面的代碼對(duì)性能不利。在默認(rèn)構(gòu)造函數(shù)中,Vector的初始存儲(chǔ)能力是10個(gè)元素,如果新元素加入時(shí)存儲(chǔ)能力不足,則以后存儲(chǔ)能力每次加倍。Vector類就象StringBuffer類一樣,每次擴(kuò)展存儲(chǔ)能力時(shí),所有現(xiàn)有的元素都要復(fù)制到新的存儲(chǔ)空間之中。下面的代碼片段要比前面的例子快幾個(gè)數(shù)量級(jí):
Object obj = new Object();
Vector v = new Vector(100000);
for(int I=0; I<100000; I++) { v.add(obj); }
同樣的規(guī)則也適用于Vector類的remove()方法。由于Vector中各個(gè)元素之間不能含有“空隙”,刪除除最后一個(gè)元素之外的任意其他元素都導(dǎo)致被刪除元素之后的元素向前移動(dòng)。也就是說,從Vector刪除最后一個(gè)元素要比刪除第一個(gè)元素“開銷”低好幾倍。
假設(shè)要從前面的Vector刪除所有元素,我們可以使用這種代碼:
for(int I=0; I<100000; I++){ v.remove(0); }
但是,與下面的代碼相比,前面的代碼要慢幾個(gè)數(shù)量級(jí):
for(int I=0; I<100000; I++){ v.remove(v.size()-1); }
從Vector類型的對(duì)象v刪除所有元素的最好方法是:
v.removeAllElements();
假設(shè)Vector類型的對(duì)象v包含字符串“Hello”。考慮下面的代碼,它要從這個(gè)Vector中刪除“Hello”字符串:
String s = "Hello"; int i = v.indexOf(s); if(I != -1) v.remove(s);
這些代碼看起來沒什么錯(cuò)誤,但它同樣對(duì)性能不利。在這段代碼中,indexOf()方法對(duì)v進(jìn)行順序搜索尋找字符串“Hello”,remove(s)方法也要進(jìn)行同樣的順序搜索。改進(jìn)之后的版本是:
String s = "Hello"; int i = v.indexOf(s); if(I != -1) v.remove(i);
這個(gè)版本中我們直接在remove()方法中給出待刪除元素的精確索引位置,從而避免了第二次搜索。一個(gè)更好的版本是:
String s = "Hello"; v.remove(s);
最后,我們?cè)賮砜匆粋€(gè)有關(guān)Vector類的代碼片段:
for(int I=0; I
如果v包含100,000個(gè)元素,這個(gè)代碼片段將調(diào)用v.size()方法100,000次。雖然size方法是一個(gè)簡(jiǎn)單的方法,但它仍舊需要一次方法調(diào)用的開銷,至少JVM需要為它配置以及清除堆棧環(huán)境。在這里,for循環(huán)內(nèi)部的代碼不會(huì)以任何方式修改Vector類型對(duì)象v的大小,因此上面的代碼最好改寫成下面這種形式:
int size = v.size(); for(int I=0; I
雖然這是一個(gè)簡(jiǎn)單的改動(dòng),但它仍舊贏得了性能。畢竟,每一個(gè)CPU周期都是寶貴的。
拙劣的代碼編寫方式導(dǎo)致代碼性能下降。但是,正如本文例子所顯示的,我們只要采取一些簡(jiǎn)單的措施就能夠顯著地改善代碼性能。
1.如果沒有線程同步,最好習(xí)慣用StringWriter而不是StringBuffer,因?yàn)?StringBuffer是線程安全的,所以,效率會(huì)稍微低一點(diǎn).
當(dāng)然JDK5以后,還提供了StringBulder,這個(gè)類要比StringWriter更好用一些,當(dāng)然也不是線程安全的.
如果要用StringBuffer,請(qǐng)盡量使用append,不要用+,在用StringBuffer時(shí)盡量先分配空間如:StringBuffer s = new StringBuffer(45);
2.數(shù)據(jù)庫查詢的結(jié)果集處理,我們對(duì)數(shù)據(jù)庫操作時(shí),可能會(huì)針對(duì)里面的數(shù)據(jù)做處理性質(zhì)的遷移.一般都是先Select一把,然后把結(jié)果集的內(nèi)容處理,
最后Insert或Update回?cái)?shù)據(jù)庫.這個(gè)是效率最低下的.無論是否使用Hibernate都很低下.當(dāng)然,最好是寫一個(gè)存儲(chǔ)過程來完成這件事,
我們只是調(diào)用一下,觸發(fā)這個(gè)事件就可以了.如果非要自己寫程序完成,
那么,一定要注意,你在Select的時(shí)候,不要將所有數(shù)據(jù)一次性全都查詢出來,
要按行數(shù)分次處理否則很容易將內(nèi)存暴掉.因?yàn)?這些數(shù)據(jù)即使你已經(jīng)處理完了,
但是,對(duì)象有可能被Map或者Collection的某個(gè)對(duì)象所引用,這樣JVM就無法進(jìn)行回收.
3.程序慢,要找到瓶頸在哪里,這樣才能解決.一般是三大部分,一個(gè)CPU占用率過高;一個(gè)是硬盤訪問過于頻繁;一個(gè)是網(wǎng)絡(luò)擁塞.
a.CPU占用又可以分三個(gè)部分,一個(gè)是tomcat占用過高;一個(gè)是數(shù)據(jù)庫占用過高;另一個(gè)是其他程序(如遠(yuǎn)程控制程序)占用過高...tomcat過高,
最有可能是處理數(shù)據(jù)算法效率太低.數(shù)據(jù)庫占用過高,最有可能的是頻繁對(duì)一個(gè)已經(jīng)很長(zhǎng)的表進(jìn)行了操作(可以通過建臨時(shí)表來進(jìn)行緩解,效果不錯(cuò)).
其他程序想辦法不使用這些程序或再找個(gè)空閑的服務(wù)器來run這些程序.
b.一般硬盤訪問頻繁,CPU是不會(huì)過高的.比如有一個(gè)循環(huán)程序,因數(shù)據(jù)不合要求總是打印日志,而日志就寫在文件里,
這樣,由于寫日志文件而使得處理線程進(jìn)展緩慢.可以通過對(duì)數(shù)據(jù)進(jìn)行預(yù)處理,來緩解硬盤訪問頻繁的狀況,或者根據(jù)特點(diǎn)采用緩沖區(qū),多線程寫文件等技術(shù)來解決這樣的問題.
c.網(wǎng)絡(luò)擁塞,看看是否有網(wǎng)絡(luò)攻擊(DOS或者ARP之類的),或者增加帶寬.如果是由于聯(lián)通和電信的互訪造成慢的,那么可以考慮使用鐵通之類的節(jié)點(diǎn)進(jìn)行中轉(zhuǎn),效果還算可以.
可以利用觸發(fā)器同步,在觸發(fā)器中通過系統(tǒng)表獲取數(shù)據(jù)庫中的表、視圖等對(duì)象,然后同步。
觸發(fā)器同步參照:
- SQL code
- --====================================================
--發(fā)布/訂閱的效果最好.
--自己寫觸發(fā)器同步的實(shí)時(shí)性和可控制性最好.
--====================================================
如果只是簡(jiǎn)單的數(shù)據(jù)同步,可以用觸發(fā)器來實(shí)現(xiàn).下面是例子:
--測(cè)試環(huán)境:SQL2000,遠(yuǎn)程主機(jī)名:xz,用戶名:sa,密碼:無,數(shù)據(jù)庫名:test
--創(chuàng)建測(cè)試表,不能用標(biāo)識(shí)列做主鍵,因?yàn)椴荒苓M(jìn)行正常更新
--在本機(jī)上創(chuàng)建測(cè)試表,遠(yuǎn)程主機(jī)上也要做同樣的建表操作,只是不寫觸發(fā)器
if exists (select * from dbo.sysobjects where id = object_id(N'[test]') and OBJECTPROPERTY(id, N'IsUserTable') = 1)
drop table [test]
create table test(id int not null constraint PK_test primary key
,name varchar(10))
go
--創(chuàng)建同步的觸發(fā)器
create trigger t_test on test
for insert,update,delete
as
set XACT_ABORT on
--啟動(dòng)遠(yuǎn)程服務(wù)器的MSDTC服務(wù)
exec master..xp_cmdshell 'isql /S"xz" /U"sa" /P"" /q"exec master..xp_cmdshell ''net start msdtc'',no_output"',no_output
--啟動(dòng)本機(jī)的MSDTC服務(wù)
exec master..xp_cmdshell 'net start msdtc',no_output
--進(jìn)行分布事務(wù)處理,如果表用標(biāo)識(shí)列做主鍵,用下面的方法
BEGIN DISTRIBUTED TRANSACTION
delete from openrowset('sqloledb','xz';'sa';'',test.dbo.test)
where id in(select id from deleted)
insert into openrowset('sqloledb','xz';'sa';'',test.dbo.test)
select * from inserted
commit tran
go
--插入數(shù)據(jù)測(cè)試
insert into test
select 1,'aa'
union all select 2,'bb'
union all select 3,'c'
union all select 4,'dd'
union all select 5,'ab'
union all select 6,'bc'
union all
-
JBoss內(nèi)存溢出處理 原文來自:http://jboss.cn/read.php?tid=250
前幾天公司一個(gè)項(xiàng)目的服務(wù)器壞了,就換了一個(gè)備份服務(wù)器頂替一下,但是沒有跑一會(huì)就宕機(jī)了,一直報(bào)java.lang.OutOfMemoryError。。。。一看到這里,就知道是內(nèi)存溢出,但是JBoss的內(nèi)存配置已經(jīng)達(dá)到1024M了,而且對(duì)JBoss內(nèi)存的監(jiān)測(cè)結(jié)果看,并不高,怎么會(huì)死機(jī)呢,好奇怪。搞了半天還是沒有結(jié)果。郁悶~~~~
到了最后,已經(jīng)絕望了我,打算換一個(gè)JBoss版本,再換一個(gè)JDK,看看是不是這些的問題。但是再換以前,我就把日志又重新看了一次,發(fā)現(xiàn)一個(gè)問題。報(bào)的java.lang.OutOfMemoryError后面還有內(nèi)容:java.lang.OutOfMemoryError: PermGen space,這個(gè)好像和java.lang.OutOfMemoryError: Java heap space這個(gè)不一樣。最后找了一下這個(gè)異常!
PermGen space的全稱是Permanent Generation space,是指內(nèi)存的永久保存區(qū)域。這一部分用于存放Class和Meta的信息,Class在被 Load的時(shí)候被放入PermGen space區(qū)域,它和和存放Instance的Heap區(qū)域不同,GC(Garbage Collection)不會(huì)在主程序運(yùn)行期對(duì)PermGen space進(jìn)行清理,所以如果你的APP會(huì)LOAD很多CLASS的話,就很可能出現(xiàn)PermGen space錯(cuò)誤。這種錯(cuò)誤常見在web服務(wù)器對(duì)JSP進(jìn)行pre compile的時(shí)候。
改正方法,在 run.bat 中加入:-Xms512m -Xmx1024m -XX:MaxNewSize=256m -XX:MaxPermSize=256m
因?yàn)轫?xiàng)目中引用了很多的 jar 包,而這些 jar 包中的 class 信息會(huì)被 JBoss 的 class loader 加載到 PermGen space 區(qū)域,在 JVM 默認(rèn)的情況下,該部分空間的大小只有 4M,在 jar 包非常多的情況下,顯然是不夠用的,所以通過 -XX:MaxPermSize=256m 指定最大值后即可解決問題。
我的JBoss里面裝載了6個(gè)應(yīng)用,jar包和class加起來有100m左右,配上這個(gè)參數(shù)后,一切OK,最后服務(wù)器修好以后,發(fā)現(xiàn),這個(gè)里面的JBoss也是這么來配置的,哎~~看來以后備份,最好還是吧JBoss一起備份出來吧!
而當(dāng)出現(xiàn)出現(xiàn) java.lang.OutOfMemoryError: Java heap space 這個(gè)異常時(shí),通過調(diào)節(jié)-Xms512m -Xmx1024m這個(gè)就可以解決。
另外,這個(gè)兩個(gè)參數(shù) -XX:+UseParallelGC -XX:+UseParallelOldGC 讓服務(wù)并行回收內(nèi)存空間。但是,這兩個(gè)參數(shù)配置上去以后,也會(huì)占用一定的內(nèi)存空間。
import java.io.FileInputStream;
public class ParseClassFile {
public static void main(String args[]) {
try {
// 讀取文件數(shù)據(jù),文件是當(dāng)前目錄下的First.class
FileInputStream fis = new FileInputStream("e:/logout_jsp.class");
int length = fis.available();
// 文件數(shù)據(jù)
byte[] data = new byte[length];
// 讀取文件到字節(jié)數(shù)組
fis.read(data);
// 關(guān)閉文件
fis.close();
// 解析文件數(shù)據(jù)
parseFile(data);
} catch (Exception e) {
System.out.println(e);
}
}
private static void parseFile(byte[] data) {
// 輸出魔數(shù)
System.out.print("魔數(shù)(magic):0x");
System.out.print(Integer.toHexString(data[0]).substring(6)
.toUpperCase());
System.out.print(Integer.toHexString(data[1]).substring(6)
.toUpperCase());
System.out.print(Integer.toHexString(data[2]).substring(6)
.toUpperCase());
System.out.println(Integer.toHexString(data[3]).substring(6)
.toUpperCase());
// 主版本號(hào)和次版本號(hào)碼
int minor_version = (((int) data[4]) << 8) + data[5];
int major_version = (((int) data[6]) << 8) + data[7];
System.out.println("版本號(hào)(version):" + major_version + "."
+ minor_version);
}
}
運(yùn)行:
E:\>javac ParseClassFile.java
E:\>java ParseClassFile
魔數(shù)(magic):0xCAFEBABE
版本號(hào)(version):48.0
48代表JDK1.5.0
believe it or not
信不信由你!
it's very hot these days in bingjing
這些天非常熱
that means i am not eautiful enough to impress you.
這意味著我不美麗足以打動(dòng)你!
I am so disappointed
我非常失望!
it seem to some star
看起來好像明星
it is me!!no doubt otherwise i'll be angry
這是我,毫無疑問,否則我會(huì)生氣!
you are leaving?
你要離開?
I'm scared~
我怕
all right, everyone,I should out duty now
我要下班了!各位
maybe he is gone
也許他走了
playboy,don't hidden yourself,
花花公子,不要隱藏自己!
sorry,just now ,my boss called me!
報(bào)qian,剛剛老板叫我!
i working
我正在工作。
do you often chat online?
你經(jīng)常在線聊天嗎?
hi,long time no see! still remember me?
很長(zhǎng)時(shí)間不見,大家還記得我嗎?
i nearly forget you,sorry
對(duì)不起,差點(diǎn)把你給忘了!
Kevin is so thin, be a man, you should eat as much as you can from now on.
凱文是瘦了很多,做一個(gè)男人,你應(yīng)該吃了,您可以從現(xiàn)在開始。
I am waiting for my fast food
我在等我的快餐。
so, beauty, why dont you post your pic and feast our eyes? hehe
因此,如此漂亮,為什么不讓我們看看你的相片,讓我們一抱眼福
color wolf
色狼
take a nap~
小睡一會(huì)
i was a little busy just now
現(xiàn)在我有點(diǎn)忙!
every administrator should think twice about it
每個(gè)管理員應(yīng)該要三思而后行
would be done soon
很快就完了
i have never ever been to there
我從來沒去過那!
--壓縮日志及數(shù)據(jù)庫文件大小 ?
? ?
? 1.清空日志 ?
? DUMP ? ? TRANSACTION ? ? 庫名 ? ? WITH ? ? NO_LOG ? ? ? ? ?
? ?
? 2.截?cái)嗍聞?wù)日志: ?
? BACKUP ? LOG ? 數(shù)據(jù)庫名 ? WITH ? NO_LOG ?
? ?
? 3.收縮數(shù)據(jù)庫文件(如果不壓縮,數(shù)據(jù)庫的文件不會(huì)減小 ?
? 企業(yè)管理器--右鍵你要壓縮的數(shù)據(jù)庫--所有任務(wù)--收縮數(shù)據(jù)庫--收縮文件 ?
? --選擇日志文件--在收縮方式里選擇收縮至XXM,這里會(huì)給出一個(gè)允許收縮到的最小M數(shù),直接輸入這個(gè)數(shù),確定就可以了 ?
? --選擇數(shù)據(jù)文件--在收縮方式里選擇收縮至XXM,這里會(huì)給出一個(gè)允許收縮到的最小M數(shù),直接輸入這個(gè)數(shù),確定就可以了 ?
? ?
? 也可以用SQL語句來完成 ?
? --收縮數(shù)據(jù)庫 ?
? DBCC ? SHRINKDATABASE(客戶資料) ?
? ?
? --收縮指定數(shù)據(jù)文件,1是文件號(hào),可以通過這個(gè)語句查詢到:select ? * ? from ? sysfiles ?
? DBCC ? SHRINKFILE(1) ?
? ?
? 4.為了最大化的縮小日志文件 ?
? a.分離數(shù)據(jù)庫: ?
? 企業(yè)管理器--服務(wù)器--數(shù)據(jù)庫--右鍵--分離數(shù)據(jù)庫 ?
? ?
? b.在我的電腦中刪除LOG文件 ?
? ?
? c.附加數(shù)據(jù)庫: ?
? 企業(yè)管理器--服務(wù)器--數(shù)據(jù)庫--右鍵--附加數(shù)據(jù)庫 ?
? ?
? 此法將生成新的LOG,大小只有500多K ?
? ?
? 或用代碼: ? ?
? 下面的示例分離 ? pubs,然后將 ? pubs ? 中的一個(gè)文件附加到當(dāng)前服務(wù)器。 ?
? ?
? a.分離 ?
? EXEC ? sp_detach_db ? @dbname ? = ? 'pubs' ?
? ?
? b.刪除日志文件 ?
? ?
? c.再附加 ?
? EXEC ? sp_attach_single_file_db ? @dbname ? = ? 'pubs', ? ?
? ? ? ? @physname ? = ? 'c:\Program ? Files\Microsoft ? SQL ? Server\MSSQL\Data\pubs.mdf' ?
? ?
? 5.為了以后能自動(dòng)收縮,做如下設(shè)置: ?
? 企業(yè)管理器--服務(wù)器--右鍵數(shù)據(jù)庫--屬性--選項(xiàng)--選擇"自動(dòng)收縮" ?
? ?
? --SQL語句設(shè)置方式: ?
? EXEC ? sp_dboption ? '數(shù)據(jù)庫名', ? 'autoshrink', ? 'TRUE' ?
? ?
? 6.如果想以后不讓它日志增長(zhǎng)得太大 ?
? 企業(yè)管理器--服務(wù)器--右鍵數(shù)據(jù)庫--屬性--事務(wù)日志 ?
? --將文件增長(zhǎng)限制為xM(x是你允許的最大數(shù)據(jù)文件大小) ?
? ?
? --SQL語句的設(shè)置方式: ?
? alter ? database ? 數(shù)據(jù)庫名 ? modify ? file(name=邏輯文件名,maxsize=20)??
清空.ldf大小:
backup?log?database with?NO_LOG
backup?log?database with?TRUNCATE_ONLY
DBCC?SHRINKDATABASE(database )?查詢?nèi)罩敬笮?
dbcc sqlperf(logspace)
DOS命令關(guān)閉JBOSS窗口。
E:\jboss-3.2.5\bin\shutdown.bat --
如果JBOSS窗口仍存在,查看run.bat中
:END
if "%NOPAUSE%" == "" pause
:END_NO_PAUSE
如果有以上這句,那么就得去掉 if "%NOPAUSE%" == "" pause 相當(dāng)于去掉pause命行。
再試試,一切OK了!
http://www.suneca.com/article.asp?id=31
覺得寫得不錯(cuò)。鏈接地址先!
出現(xiàn)錯(cuò)誤:
javax.naming.NoInitialContextException: Cannot instantiate class: org.jnp.interfaces.NamingContextFactory. Root exception is java.lang.ClassNotFoundException: org.jnp.interfaces.NamingContextFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:198)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:186)
at java.lang.ClassLoader.loadClass(ClassLoader.java:306)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:265)
at java.lang.ClassLoader.loadClass(ClassLoader.java:262)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:322)
at java.lang.Class.forName0(Native Method)
at java.lang.Class.forName(Class.java:207)
at com.sun.naming.internal.VersionHelper12.loadClass(VersionHelper12.java:42)
at javax.naming.spi.NamingManager.getInitialContext(NamingManager.java:649)
at javax.naming.InitialContext.getDefaultInitCtx(InitialContext.java:243)
at javax.naming.InitialContext.init(InitialContext.java:219)
at javax.naming.InitialContext.<init>(InitialContext.java:195)
at zizz.ejb.client.UserServiceClient.main(UserServiceClient.java:38)
原因:包沒有加載,直接在classpath里加上,或在eclipse工具里build path