posted @ 2016-08-12 10:47 IceWee 閱讀(880) | 評論 (0) | 編輯 收藏
posted @ 2016-01-18 13:43 IceWee 閱讀(429) | 評論 (0) | 編輯 收藏
我們的這次問題原因是程序員在做除法運算時沒有對除數(shù)進行非零判斷,導致計算出來的數(shù)值非法,插入數(shù)據(jù)庫失敗,請看代碼:











經(jīng)過計算后,m和n的值分別是多少?沒在實際開發(fā)中遇到的可能不知道,或者你有個好習慣不會出現(xiàn)這樣的bug,請看結果:


被除數(shù)非零,除數(shù)為零做除法的結果是字符串“Infinity”,翻譯成中文就是“無限”,你的中學數(shù)學老師可能說過;
被除數(shù)為零,除數(shù)為零做觸發(fā)的結果是字符串“NaN”,即不是有效的數(shù)字。
就是這個“Infinity”花費了我一小天的時間才定位。下面詳述問題定位的方法。
異常1:ORA-01438: value larger than specified precision allowed for this column
了解點數(shù)據(jù)庫的打眼一看就知道插入的數(shù)值超過了表字段長度,但你知道是哪個表哪個字段嗎?我不知道,于是網(wǎng)上查閱了下,Oracle數(shù)據(jù)庫服務器在Linux上。
命令行登陸到數(shù)據(jù)庫所在服務器,進入Oracle的安裝目錄,假設是/opt/oracle/
進入到如下目錄:/opt/oracle/admin/實例名/udump
中間的數(shù)據(jù)庫實例名根據(jù)實際情況修改,udump目錄下會有一堆的.trc文件,這些文件記錄了所有操作當前數(shù)據(jù)庫出現(xiàn)異常的堆棧信息。為了定位問題,我將該目錄下的所有.trc文件都刪除了(當然,刪除之前把udump目錄整個備份了),再進行一次系統(tǒng)的業(yè)務操作,查看一下udump目錄,發(fā)現(xiàn)立刻生成一個新 的.trc文件,打開查看(內(nèi)容片段):






















黃色背景紅色字體的SQL就是罪魁禍首,這僅僅能定位發(fā)生問題的數(shù)據(jù)庫表,字段還得自己排查。異常1讓我定位到了這里,這時想起了異常2。
異常2: Could not synchronize database state with session
之前也搜索過這個異常,多數(shù)是由于Number類型的字段導致。冷靜的思考一下,平常我們在做表設計時,會把文字類型的字段設置大一些,Number類型的精度也會根據(jù)實際業(yè)務進行設計,但往往Number類型的字段最容易出問題:
1、如果將非Number值插入該字段,比如字符串
2、如果插入的數(shù)值精度過多,如字段設計Number(10,2),也就是最大支持8為整數(shù)和兩位小數(shù),要插入34.121313就會失敗
根據(jù)表名定位到hibernate的映射文件以及實體類,再從業(yè)務功能入口(一個action方法)搜索,終于定位到一個業(yè)務接口做了該實體類的保存代碼,定位到了那個字段,定位到了做除法沒有判斷除數(shù)是否為0。
posted @ 2014-03-28 18:54 IceWee 閱讀(876) | 評論 (0) | 編輯 收藏
臨時(重啟丟失)

永久(重啟有效)



















由于非法關機導致重啟后無法聯(lián)網(wǎng)


重啟后配置丟失,所以必須在重啟之前執(zhí)行:


不能聯(lián)網(wǎng)是因為非法關機導致ifup腳本丟失
posted @ 2014-01-24 10:50 IceWee 閱讀(905) | 評論 (0) | 編輯 收藏
備份機器:192.168.1.2
前提條件:
1、兩臺機器的網(wǎng)絡是連通的
2、兩臺機器必須同時安裝了SVN服務器
假設:
源機器上需要同步的庫名為autoSync,訪問地址為:svn://192.168.1.1/autoSync,對其具備讀寫權限的賬戶:sync/sync
備份機器配置:
1、創(chuàng)建與源機器庫名相同的空庫


2、配置備份機器上的autoSync
分別修改conf下的svnserve.conf、passwd、authz,根據(jù)實際情況配置,假設創(chuàng)建了用戶sync/sync,對庫autoSync具備讀寫權限,配置方法略,配置完成后啟動SVN服務
3、創(chuàng)建并修改pre-revprop-change文件



將文件末尾的“exit 1”修改為“exit 0”即可,保存退出











增加可執(zhí)行權限

4、初始化
命令:
svnsync init --username 用戶名 --password 密碼 備份機器庫URL 源機器庫URL
說明:
用戶名和密碼是對源機器SVN庫具備讀寫權限的SVN用戶
示例:

5、首次同步
首次同步即為一次全備份過程,在此期間請停止客戶端段源機器哦一切操作(提交代碼等)
命令:
svnsync sync 備份機器庫URL
示例:

源機器配置
6、增量自動同步配置
創(chuàng)建并修改post-commit文件




在文件末尾追加:svnsync sync --non-interactive 備份機器庫URL --username 用戶名 --password 密碼
說明:
用戶名和密碼是對備份機器SVN庫具備讀寫權限的SVN用戶
示例:

7、術語
配置完成,今后客戶端再向SVN(192.168.1.1)提交文件時,會自動觸發(fā)源機器(192.168.1.1)向備份機器(192.168.1.2)提交更新
8、版本庫UUID一致性
首先查看源機器庫的UUID,假設得到的是:fcdcbee9-6be3-4575-8d4a-681ec15ad8e0

更新備份機器庫的UUID為源機器庫的UUID

posted @ 2014-01-23 11:08 IceWee 閱讀(651) | 評論 (0) | 編輯 收藏
備份源文件
# cp /etc/apt/sources.list /etc/apt/sources.list.bak
編輯源文件
# nano /etc/apt/sources.list
注釋掉本地光盤源這一行,注釋后如:
# deb cdrom:[Debian GNU/Linux 6.0.7 _Squeeze_ - Official amd64 NETINST Binary-1 20130223-18:50]/ squeeze main
取消下面兩行官方源前面的注釋
deb http://security.debian.org/ squeeze/updates main
deb-src http://security.debian.org/ squeeze/updates main
追加163的鏡像源地址
deb http://mirrors.163.com/debian/ squeeze main non-free contrib
deb http://mirrors.163.com/debian/ squeeze-proposed-updates main contrib non-free
deb http://mirrors.163.com/debian-security/ squeeze/updates main contrib non-free
deb-src http://mirrors.163.com/debian/ squeeze main non-free contrib
deb-src http://mirrors.163.com/debian/ squeeze-proposed-updates main contrib non-free
deb-src http://mirrors.163.com/debian-security/ squeeze/updates main contrib non-free
deb http://ftp.sjtu.edu.cn/debian/ squeeze main non-free contrib
deb http://ftp.sjtu.edu.cn/debian/ squeeze-proposed-updates main contrib non-free
deb http://ftp.sjtu.edu.cn/debian-security/ squeeze/updates main contrib non-free
deb-src http://ftp.sjtu.edu.cn/debian/ squeeze main non-free contrib
deb-src http://ftp.sjtu.edu.cn/debian/ squeeze-proposed-updates main contrib non-free
deb-src http://ftp.sjtu.edu.cn/debian-security/ squeeze/updates main contrib non-free
保存修改
# ctrl + o 回車
退出
# ctrl + x
更新源
# apt-get update
更新系統(tǒng)
# apt-get upgrade
安裝SVN服務器
# apt-get install subversion subversion-tools
安裝完成后可以運行命令查看SVN服務器版本信息
# svnserve --version
配置SVN
首先創(chuàng)建版本庫的根目錄,如位置:/home/svn/repository,所有項目都將在該目錄下創(chuàng)建相應子文件夾
# mkdir –p /home/svn/repository
創(chuàng)建項目版本庫test(僅為演示)
# svnadmin create /home/svn/repository/test
修改SVN配置文件
nano /home/svn/repository/test/conf/svnserve.conf
以下為文件內(nèi)容:
### This file controls the configuration of the svnserve daemon, if you
### use it to allow access to this repository. (If you only allow
### access through http: and/or file: URLs, then this file is
### irrelevant.)
### Visit http://subversion.tigris.org/ for more information.
[general]
### These options control access to the repository for unauthenticated
### and authenticated users. Valid values are "write", "read",
### and "none". The sample settings below are the defaults
# 未授權配置為禁止訪問none,已授權配置為可以讀寫write
anon-access = none
auth-access = write
### The password-db option controls the location of the password
### database file. Unless you specify a path starting with a /,
### the file's location is relative to the directory containing
### this configuration file.
### If SASL is enabled (see below), this file will NOT be used.
### Uncomment the line below to use the default password file.
# 用戶數(shù)據(jù)庫文件,配置授權用戶,當前使用的文件是和svnserve.conf在相同目錄下的passwd文件,也可以指定其他絕對路徑文件,如:/home/svn/passwd
password-db = passwd
### The authz-db option controls the location of the authorization
### rules for path-based access control. Unless you specify a path
### starting with a /, the file's location is relative to the the
### directory containing this file. If you don't specify an
### authz-db, no path-based access control is done.
### Uncomment the line below to use the default authorization file.
# 授權文件,配置如同用戶配置
authz-db = authz
### This option specifies the authentication realm of the repository.
### If two repositories have the same authentication realm, they should
### have the same password database, and vice versa. The default realm
### is repository's uuid.
# realm = My First Repository
[sasl]
### This option specifies whether you want to use the Cyrus SASL
### library for authentication. Default is false.
### This section will be ignored if svnserve is not built with Cyrus
### SASL support; to check, run 'svnserve --version' and look for a line
### reading 'Cyrus SASL authentication is available.'
# use-sasl = true
### These options specify the desired strength of the security layer
### that you want SASL to provide. 0 means no encryption, 1 means
### integrity-checking only, values larger than 1 are correlated
### to the effective key length for encryption (e.g. 128 means 128-bit
### encryption). The values below are the defaults.
# min-encryption = 0
# max-encryption = 256
保存
# ctrl + o 回車
退出
# ctrl + x
配置用戶
# nano passwd
以下為文件內(nèi)容:
### This file is an example password file for svnserve.
### Its format is similar to that of svnserve.conf. As shown in the
### example below it contains one section labelled [users].
### The name and password for each user follow, one account per line.
[users]
# harry = harryssecret
# sally = sallyssecret
IceWee = IceWee
增加用戶IceWee,密碼也為IceWee,=號兩側需要有空格,保存(ctrl + o 回車)退出(ctrl + x)
配置訪問權限
# nano authz
以下為文件內(nèi)容:
### This file is an example authorization file for svnserve.
### Its format is identical to that of mod_authz_svn authorization
### files.
### As shown below each section defines authorizations for the path and
### (optional) repository specified by the section name.
### The authorizations follow. An authorization line can refer to:
### - a single user,
### - a group of users defined in a special [groups] section,
### - an alias defined in a special [aliases] section,
### - all authenticated users, using the '$authenticated' token,
### - only anonymous users, using the '$anonymous' token,
### - anyone, using the '*' wildcard.
###
### A match can be inverted by prefixing the rule with '~'. Rules can
### grant read ('r') access, read-write ('rw') access, or no access
### ('').
[aliases]
# joe = /C=XZ/ST=Dessert/L=Snake City/O=Snake Oil, Ltd./OU=Research Institute/CN=Joe Average
[groups]
# harry_and_sally = harry,sally
# harry_sally_and_joe = harry,sally,&joe
developers = IceWee
# [/foo/bar]
# harry = rw
# &joe = r
# * =
# [repository:/baz/fuz]
# @harry_and_sally = rw
# * = r
[/]
* = r
IceWee = rw
@developers = rw
[/tags]
IceWee = rw
默認所有用戶可讀取根,IceWee可以讀寫根。可以分別對子目錄進行授權,如上的tags目錄,IceWee具有讀寫權限,以及IceWee所在的組developers也具備讀寫權限。
啟動SVN服務器
# svnserve -d -r /home/svn/repository
-d含義為后臺運行(daemon),-r指定的根目錄,如訪問test應該使用這樣的地址 svn://hostname:port/test
停止SVN服務
# killall svnserve
備份還原命令,與oracle的備份有些類似
導出
# svnadmin dump /home/svn/repository/test > /home/bak/test.dump
導入
# svnadmin load /home/svn/repository/demo < /home/bak/demo.dump
導入前提:
必須先創(chuàng)建要導入版本庫目錄,如上的demo,則需要做以下操作
# svnadmin create /home/svn/respository/demo
修改svnserve.conf、passwd、authz等文件,前面已介紹
posted @ 2014-01-17 15:48 IceWee 閱讀(1229) | 評論 (0) | 編輯 收藏
2013年12月10日
---------------------------
冒泡排序














2013年11月26日
---------------------------
1、String的split方法
平常總是這樣用,String str = "a,b,c,d,e"; String[] arr = str.split(",");
其實還可以這樣用,String lan = "Java;C#?C++:C"; String si = lan.split("[;?:]"); 返回的是字符串數(shù)組{"Java", "C#", "C++", "C"}
2013年11月21日
---------------------------
1、Java對象池知多少?
示例:String s1 = "abc"; String s2 = "abc"; s1 == s2 返回ture還是false?只要不是new出來的都先從對象池中讀取,因此結果為true,兩個變量指向的是同一塊內(nèi)存空間地址。
Java除了String類使用了對象池以外,還有5個基本類型的封裝類:Byte、Short、Integer、Long和Character,例如:Integer inA = 20; Integer inB = 20; 那么 inA == inB 的結果為true,其他類與此相同,不做示例。
特別注意:
(1)浮點型的兩個封裝類Float和Double并沒有參與對象池;
(2)整形封裝類(Byte、Short、Integer和Long)只有數(shù)值小于或等于127時才使用對象池,例如:Integer x = 128; Integer y = 128; x == y的結果為false。
2、Java變量命名規(guī)范
A. String #name = "Joe";
B. int $age = 30;
C. Double _height = 174.4;
D. float ~temp = 37.6;
以上A到D,哪個無法通過編譯?答案是A和D,因為Java變量名只允許字母、下劃線(_)、美元符($)開頭,那么 int _ = 30; String $$ = "I DO";可以嗎?答案是完全可以,但很少有人這樣定義變量名,雖然沒有違法命名規(guī)范,但最后我估計程序員自己都會被自己繞暈。
3、0和1能標識布爾值嗎?
int flag = 0;
if (flag) {
System.out.print("error");
}
error會打印嗎?不會,因為根本就不會編譯通過,編譯器會提示flag是int類型而不是boolean類型,如果你會有這種想法可能之前學過C,C總的0和1可以標識布爾的。
4、靜態(tài)導入
例:
ClassA.java





ClassB.java









輸出:2147483647。不僅僅可以靜態(tài)導入其他類的靜態(tài)屬性還可以導入靜態(tài)方法,這些特性在實際開發(fā)中很少見。
posted @ 2013-11-21 12:49 IceWee 閱讀(465) | 評論 (0) | 編輯 收藏
原因是因為默認緩沖區(qū)大小是1024,也就是1K,當然慢了,在調(diào)用上傳API之前重新修改以下默認設置即可,如將緩沖區(qū)改為10M,API:
posted @ 2013-09-13 16:32 IceWee 閱讀(6706) | 評論 (0) | 編輯 收藏





第二步,殺死數(shù)據(jù)庫會話


第三步,如果第二步無法殺死會話,報ORA-00031,那么只能殺死UNIX/LINUX系統(tǒng)進程了





第四步,根據(jù)查詢到的系統(tǒng)PID,殺掉進程

posted @ 2013-08-23 10:20 IceWee 閱讀(528) | 評論 (0) | 編輯 收藏