Sunday, February 3, 2008

java locale的设置

今天碰到一个问题,指定了一个SimpleDateFormat的格式为yyyy-MMM-dd,然后传一个字符串"2008-Feb-03"让他解析,结果在家里的机器上没有问题,但在公司的机器上说不认识"Feb",我倒~~!

比较了2个java环境,家里的locale是US,公司的是CN,所以公司机器要使用"2月"这个形式而不是"Feb"。所以只能在公司机器的java程序里设置locale。

设置代码:
Locale locale=new Locale("en","US");
Locale.setDefault(locale);
SimpleDateFormat format=new SimpleDateFormat("yyyy-MMM-dd",locale);
Date date=format.parse("2008-Feb-03");
System.out.println(format.format(date));

Friday, February 1, 2008

在RHEL5.1上安装oracle 11g(linux x86_64)

以前在Debian上面成功安装过oracle 9i,那时费了好大的力才把需要的包一个一个apt-get过来。现在用Gentoo,但使用的是纯64位软件,所以估计没法装oracle 11g(x86_64版本貌似仍然需要一些32位的包)。都怪linux发行版五花八门,不象windows那么千篇一律。

这次在HP ProLiant G5上装了一个RHEL5.1,所以准备在这上面装一个oracle 11g x86_64的版本用作开发测试。值得庆幸的是RHEL是oracle认证的linux发行版,而且oracle自己的那个linux也是基于redhat的,所以应该问题不大。

最最值得庆幸的也是要感激的就是Jeff Hunter已经在CentOS5.1上成功安装了oracle 11g,英文原文Installing Oracle Database 11g Release 1 on Linux - (RHEL 5),因为CentOS是对RHEL的100%兼容版本,所以理论上RHEL上按照他给出的步骤可以100%成功安装。太easy了,傻瓜式的按部就班。在扮演傻瓜的同时也学到了不少redhat linux与Debian,Gentoo,FreeBSD所不同的地方。

1.安装RHEL5.1
这个没什么好说的,每个人有每个人的装法,就罗列一下安装的package groups。
*Desktop Environments

GNOME Desktop Environment

*Applications

Editors

Graphical Internet

Text-based Internet

*Development

Development Libraries

Development Tools

Legacy Software Development

*Servers

Server Configuration Tools

*Base System

Administration Tools

Base

Java

Legacy Software Support

System Tools

X Window System

2.装好之后把firewall和SELinux都暂时关掉。然后把oracle11g需要的包都检查一下是否全部都有,没有就从dvd装。
binutils-2.17.50.0.6

compat-libstdc++-33-3.2.3

compat-libstdc++-33-3.2.3 (32 bit)

elfutils-libelf-0.125

elfutils-libelf-devel-0.125

gcc-4.1.1

gcc-c++-4.1.1

glibc-2.5-12

glibc-2.5-12 (32 bit)

glibc-common-2.5

glibc-devel-2.5

glibc-devel-2.5-12 (32 bit)

libaio-0.3.106

libaio-0.3.106 (32 bit)

libaio-devel-0.3.106

libgcc-4.1.1

libgcc-4.1.1 (32 bit)

libstdc++-4.1.1

libstdc++-4.1.1 (32 bit)

libstdc++-devel 4.1.1

make-3.81

sysstat-7.0.0

3.确保/tmp有大于400M的空间并设置内核参数。
在/etc/sysctl.conf文件中有内核参数。
# +---------------------------------------------------------+

# | SHARED MEMORY |

# +---------------------------------------------------------+

kernel.shmmax = 536870912

kernel.shmmni = 4096

kernel.shmall = 2097152



# +---------------------------------------------------------+

# | SEMAPHORES |

# | ---------- |

# | |

# | SEMMSL_value SEMMNS_value SEMOPM_value SEMMNI_value |

# | |

# +---------------------------------------------------------+

kernel.sem = 250 32000 100 128



# +---------------------------------------------------------+

# | FILE HANDLES |

# ----------------------------------------------------------+

fs.file-max = 102696



# +---------------------------------------------------------+

# | LOCAL IP RANGE |

# ----------------------------------------------------------+

net.ipv4.ip_local_port_range = 1024 65000



# +---------------------------------------------------------+

# | NETWORKING |

# ----------------------------------------------------------+

net.core.rmem_default = 4194304

net.core.rmem_max = 4194304

net.core.wmem_default = 262144

net.core.wmem_max = 262144

使用#/sbin/sysctl -p命令让以上设置生效而不需reboot。

4.在/etc/hosts文件中把不要的hostname从回路地址中去掉,把ipv6也去掉。
127.0.0.1 test2 localhost.localdomain localhost
应该改为 127.0.0.1 localhost.localdomain localhost

5.创建oinstall,dba,oper,asm,asmdba这5个组,然后创建一个属于这5个组的oracle用户。在英文原文中对这5个组对应的数据库组有详细的说明。
可以使用命令行来创建:
# groupadd -g 501 oinstall

# groupadd -g 502 dba

# groupadd -g 503 oper

# groupadd -g 504 asm

# groupadd -g 506 asmdba

# useradd -m -u 501 -g oinstall -G dba,oper,asm -d /home/oracle -s /bin/bash -c "Oracle Software Owner" oracle

# id oracle

uid=501(oracle) gid=501(oinstall) groups=501(oinstall),502(dba),503(oper),504(asm)
之后设置密码给oracle用户。

6.查看nobody用户是否已经存在。
# id nobody

uid=99(nobody) gid=99(nobody) groups=99(nobody)
如果不存在就创建:
# /usr/sbin/useradd nobody

7.接下来就是创建oracle base directory了,对于非advanced安装,不需要指定数据文件的文件夹。
# mkdir -p /xxx/app/oracle

# chown -R oracle:oinstall /u01/app

# chmod -R 775 /u01/app
如果使用advanced安装,请看英文原文。

8.为oracle用户创建登陆脚本,在/home/oracle/.bash_profile文件中加入:
# User specific environment and startup programs

export ORACLE_BASE=/xxx/app/oracle

export ORACLE_HOME=$ORACLE_BASE/product/11.1.0/db_1

export ORACLE_PATH=$ORACLE_BASE/common/oracle/sql:.:$ORACLE_HOME/rdbms/admin

export ORACLE_SID=MYDBSID



export PATH=.:${JAVA_HOME}/bin:${PATH}:$HOME/bin:$ORACLE_HOME/bin

export PATH=${PATH}:/usr/bin:/bin:/usr/bin/X11:/usr/local/bin

export PATH=${PATH}:$ORACLE_BASE/common/oracle/bin

export ORACLE_TERM=xterm

export TNS_ADMIN=$ORACLE_HOME/network/admin

export ORA_NLS10=$ORACLE_HOME/nls/data

export LD_LIBRARY_PATH=$ORACLE_HOME/lib

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:$ORACLE_HOME/oracm/lib

export LD_LIBRARY_PATH=${LD_LIBRARY_PATH}:/lib:/usr/lib:/usr/local/lib

export CLASSPATH=$ORACLE_HOME/JRE

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/jlib

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/rdbms/jlib

export CLASSPATH=${CLASSPATH}:$ORACLE_HOME/network/jlib

export THREADS_FLAG=native

export TEMP=/tmp

export TMPDIR=/tmp

9.用oracle用户进入X根据提示进行安装。我选的是基本安装,并且创建初始化数据库应该是没什么问题的,只是等待而已,呵呵~~!好了之后应该可以用https://localhost:1158/em登录了。

10.装好之后我发现重新启动后oracle没自动起来,看来自动启动/关闭脚本还没加,编辑/etc/oratab文件:
MYDBSID:/u01/app/oracle/product/11.1.0/db_1:Y

然后创建/etc/init.d/oracle文件,使得oracle作为系统的service。
文件内容:
#!/bin/sh

# chkconfig: 345 99 10

# description: Oracle auto start-stop script.

#

# Set ORA_HOME to be equivalent to the $ORACLE_HOME

# from which you wish to execute dbstart and dbshut;

#

# Set ORA_OWNER to the user id of the owner of the

# Oracle database in ORA_HOME.



ORA_HOME=/xxx/app/oracle/product/11.1.0/db_1

ORA_OWNER=oracle



if [ ! -f $ORA_HOME/bin/dbstart ]

then

echo "Oracle startup: cannot start"

exit

fi



case "$1" in

'start')

# Start the Oracle databases:

# The following command assumes that the oracle login

# will not prompt the user for any values

su - $ORA_OWNER -c "$ORA_HOME/bin/dbstart $ORA_HOME"

;;

'stop')

# Stop the Oracle databases:

# The following command assumes that the oracle login

# will not prompt the user for any values

su - $ORA_OWNER -c "$ORA_HOME/bin/dbshut $ORA_HOME"

;;

esac

之后# chmod 750 /etc/init.d/oracle
最后就是把这个启动脚本放到服务里面去。
英文原文中使用的是# chkconfig --level 345 oracle on这个命令把这个启动脚本防到3、4、5这3个run level中,但我用这个命令说command not found,只能从图形界面进去手动把这个服务加到服务列表里。效果一样。哈哈。

11.最后的最后就是这个,为了要使用web页面的em,所以必须要把emctl start dbconsole和emctl stop dbconsole放如/etc/init.d/oracle文件的适当位子。否则每次都要手动启动多麻烦啊~~!

英文原文写得很好很详细,我只是把我使用到的步骤从中抽取出来中文化了一下,而且很简略,有能力的朋友强烈建议看英文原文。

RHEL5.1 vnc的使用

RHEL5.1 自带了Xvnc,省得象gentoo里面自己装x11vnc了。先查看一下是否有vncservers的包:
[root@test2 jojo]# rpm -q vnc-server
vnc-server-4.1.2-9.el5

然后编辑配置文件:
[root@test2 jojo]# nano /etc/sysconfig/vncservers
把VNCSERVERS="1:ccair"这行的注释去掉。就是使用ccair登录到display:1,这里display和用户看你的系统了。

现在要设置一个vnc的密码,否则vnc不能被连接使用:
[ccair@test2 jojo]$ vncpasswd
Password:

Verify:
设置好之后在ccair用户的~/.vnc目录下会有相应的passwd文件。

一切设置ok之后就是启动vncserver服务:
[root@test2 jojo]# /sbin/service vncserver start

接下来在ccair用户的~/.vnc目录下会生成一个xstartup文件,打开之后把如下两行注释去掉:
unset SESSION_MANAGER

exec /etc/X11/xinit/xinitrc

最后restart vncserver即可:
[root@test2 jojo]# /sbin/service vncserver restart

现在用vnc客户端可以顺利连接到display1上去了,相应的端口是5901,所以防火墙的5901要打开。