ice world

There is nothing too difficult if you put your heart into it.
posts - 104, comments - 103, trackbacks - 0, articles - 0

2014年1月23日

这个问题很多小伙伴都遇到了,网上搜罗了半天也没找到太好、太完美的解决办法,有人说是因为安装IE11时联网了,导致自动打了补丁,这个补丁可以自动检查IE主页是否损坏,可以通过卸载相应的补丁解决,我同时又找到了另外一个通过修改hosts文件的方法,貌似目前解决了我的问题,修改方法如下: 使用记事本打开 C:\Windows\System32\drivers\etc\hosts 文件,在最下面追加一行: 127.0.0.1 ieonline.microsoft.com

posted @ 2016-08-12 10:47 IceWee 阅读(867) | 评论 (0)编辑 收藏

将JDK中BIN文件夹下的 msvcr71.dll 这个文件复制到 TOMCAT 中的 BIN 下

posted @ 2016-01-18 13:43 IceWee 阅读(416) | 评论 (0)编辑 收藏

有段日子没做记录了,这段日子一直在排雷(前人埋下的隐患代码,或者直接说bug),今天这个雷让我排了将近大半天,因为是正式上线的系统,只能看后台日志,不能调试,打印出的异常信息不完整,种种的条件不充分,导致问题很难定位。标题上的两个异常,第一个一看就明白是插入的数值大于数据库字段长度,第二个多是因为Number类型的字段导致,比如精度不足。

我们的这次问题原因是程序员在做除法运算时没有对除数进行非零判断,导致计算出来的数值非法,插入数据库失败,请看代码:
public static void main(String[] args) {
        
double a = 10;
        
double b = 0;
        
double c = 0;
        
        
double m = a/c;
        
double n = b/c;
        
        System.out.println(m);
        System.out.println(n);
    }

经过计算后,m和n的值分别是多少?没在实际开发中遇到的可能不知道,或者你有个好习惯不会出现这样的bug,请看结果:
Infinity
NaN

被除数非零,除数为零做除法的结果是字符串“Infinity”,翻译成中文就是“无限”,你的中学数学老师可能说过;
被除数为零,除数为零做触发的结果是字符串“NaN”,即不是有效的数字。

就是这个“Infinity”花费了我一小天的时间才定位。下面详述问题定位的方法。

异常1:ORA-01438: value larger than specified precision allowed for this column
了解点数据库的打眼一看就知道插入的数值超过了表字段长度,但你知道是哪个表哪个字段吗?我不知道,于是网上查阅了下,Oracle数据库服务器在Linux上。

命令行登陆到数据库所在服务器,进入Oracle的安装目录,假设是/opt/oracle/
进入到如下目录:/opt/oracle/admin/实例名/udump
中间的数据库实例名根据实际情况修改,udump目录下会有一堆的.trc文件,这些文件记录了所有操作当前数据库出现异常的堆栈信息。为了定位问题,我将该目录下的所有.trc文件都删除了(当然,删除之前把udump目录整个备份了),再进行一次系统的业务操作,查看一下udump目录,发现立刻生成一个新 的.trc文件,打开查看(内容片段):
Oracle Database 10g Enterprise Edition Release 10.2.0.4.0 - 64bit Production
With the Partitioning
, Real Application Clusters, OLAP, Data Mining
and Real Application Testing options
ORACLE_HOME 
= /u01/app/oracle/product/10.2/db_1
System name:    AIX
Node name
:    gsdj1
Release
:    1
Version
:    6
Machine
:    00CFD4644C00
Instance name
: bjwd1
Redo thread mounted by this instance: 1
Oracle process number
: 132
Unix process pid
: 48300280, image: oracle@gsdj1

*** SERVICE NAME:(bjwd) 2014-03-28 16:48:05.683
*** SESSION ID:(2969.439612014-03-28 16:48:05.683
*** 2014-03-28 16:48:05.683
ksedmp
: internal or fatal error
ORA
-01438: value larger than specified precision allowed for this column
Current SQL statement 
for this session:
insert into CP_TEMP_STOCKTRAN (APPLY_ID, ALIEN, CER_TYPE, CER_NO, TRANS_AM, TRANS_AM_PR, TRANS_TYPE, TRANS_DATE, ENDORSOR, BLIC_TYPE, ALIEN_ID, ENDORSOR_ID, STOCKTRAN_ID) values (:1, :2, :3, :4, :5, :6, :7, :8, :9, :10, :11, :12, :13)

黄色背景红色字体的SQL就是罪魁祸首,这仅仅能定位发生问题的数据库表,字段还得自己排查。异常1让我定位到了这里,这时想起了异常2。


异常2: Could not synchronize database state with session
之前也搜索过这个异常,多数是由于Number类型的字段导致。冷静的思考一下,平常我们在做表设计时,会把文字类型的字段设置大一些,Number类型的精度也会根据实际业务进行设计,但往往Number类型的字段最容易出问题:
1、如果将非Number值插入该字段,比如字符串
2、如果插入的数值精度过多,如字段设计Number(10,2),也就是最大支持8为整数和两位小数,要插入34.121313就会失败

根据表名定位到hibernate的映射文件以及实体类,再从业务功能入口(一个action方法)搜索,终于定位到一个业务接口做了该实体类的保存代码,定位到了那个字段,定位到了做除法没有判断除数是否为0。








posted @ 2014-03-28 18:54 IceWee 阅读(831) | 评论 (0)编辑 收藏

网络配置:
临时(重丢失)
ifconfig eth0 192.168.1.xxx netmask 255.255.xxx.0


永久(重启有效)
vi /etc/network/interfaces

# This file describes the network interfaces available on your system
# and how to activate them. For more information, see interfaces(5).

# The loopback network interface
auto lo
iface lo inet loopback

# The primary network interface
allow-hotplug eth0
iface eth0 inet static
        address 192.168.1.xxx
        netmask 255.255.xxx.0
        network 192.168.1.1
        broadcast 192.168.1.255
        gateway 192.168.1.1
        
# dns-* options are implemented by the resolvconf package, if installed
        dns-nameservers 202.106.196.115


由于非法关机导致重启后无法联网

ifconfig eth0 192.168.1.xxx netmask 255.255.xxx.0 

route add default gw 192.168.1.1

重启后配置丢失,所以必须在重启之前执行:
apt-get update

apt-get install ifupdown

不能联网是因为非法关机导致ifup脚本丢失





posted @ 2014-01-24 10:50 IceWee 阅读(869) | 评论 (0)编辑 收藏

源机器:192.168.1.1
备份机器:192.168.1.2

前提条件:
1、两台机器的网络是连通的
2、两台机器必须同时安装了SVN服务器

假设:
源机器上需要同步的库名为autoSync,访问地址为:svn://192.168.1.1/autoSync,对其具备读写权限的账户:sync/sync

备份机器配置:
1、创建与源机器库名相同的空库
# 假设备份机器的SVN根目录建立在 /home/backup/svn/repository下
svnadmin create /home/backup/svn/repository/autoSync

2、配置备份机器上的autoSync
分别修改conf下的svnserve.conf、passwd、authz,根据实际情况配置,假设创建了用户sync/sync,对库autoSync具备读写权限,配置方法略,配置完成后启动SVN服务

3、创建并修改pre-revprop-change文件
cd /home/backup/svn/repository/autoSync/hooks
cp pre
-revprop-change.tmpl pre-revprop-change
vi pre-revprop-change

将文件末尾的“exit 1”改为“exit 0”即可,保存退出
REPOS="$1"
REV
="$2"
USER
="$3"
PROPNAME
="$4"
ACTION
="$5"

if
[ "$ACTION" = "M" -a "$PROPNAME" = "svn:log" ]; then exit 0; fi

echo
"Changing revision properties other than svn:log is prohibited" >&2
exit
0

增加可执行权限
chmod 755 pre-revprop-change

4、初始化
命令:
svnsync init --username 用户名 --password 密码 备份机器库URL 源机器库URL

说明:
用户名和密码是对源机器SVN库具备读写权限的SVN用户

示例:
svnsync init --username sync --password sync svn://192.168.1.2/autoSync svn://192.168.1.1/autoSync

5、首次同步
首次同步即为一次全备份过程,在此期间请停止客户端段源机器哦一切操作(提交代码等)
命令:
svnsync sync 备份机器库URL
示例:
svnsync sync svn://192.168.1.2/autoSync

源机器配置
6、增量自动同步配置
创建并修改post-commit文件
# 假设源机器的SVN根目录建立在 /home/svn/repository下
cd /home/svn/repository/autoSync/hooks
cp post
-commit.tmpl post-commit
vi post
-commit

在文件末尾追加:svnsync sync --non-interactive 备份机器库URL --username 用户名 --password 密码

说明:
用户名和密码是对备份机器SVN库具备读写权限的SVN用户

示例:
svnsync sync --non-interactive svn://192.168.1.2/autoSync --username sync --password sync

7、术语
配置完成,今后客户端再向SVN(192.168.1.1)提交文件时,会自动触发源机器(192.168.1.1)向备份机器(192.168.1.2)提交更新

8、版本库UUID一致性
首先查看源机器库的UUID,假设得到的是:fcdcbee9-6be3-4575-8d4a-681ec15ad8e0
svnlook uuid svn://192.168.1.1/autoSync

更新备份机器库的UUID为源机器库的UUID
svnadmin setuuid svn://192.168.1.2/autoSync fcdcbee9-6be3-4575-8d4a-681ec15ad8e0




posted @ 2014-01-23 11:08 IceWee 阅读(615) | 评论 (0)编辑 收藏