iSQL*Plus quite simple.

Author:Milo
Copyright:2007

When finished Oracle 10g installation on CentOS,I find the problem that a windows pop up and let me input the username and password,but the user name and the password is not the one that database use.

so after install oracle ,i did this :
1.Add the JAVA_HOME into ~/.bash_profile and source it,let it works.
JAVA_HOME=/u01/app/oracle/product/10.2.0/db_1/jdk/
export JAVA_HOME

2.Test if it's right:
[oracle@localhost bin]$ echo $JAVA_HOME
/u01/app/oracle/product/10.2.0/db_1/jdk/

3.Enter this directory:
[oracle@localhost bin]$ cd /u01/app/oracle/product/10.2.0/db_1/oc4j/j2ee/isqlplus/application-deployments/isqlplus

4.Use the command above to enter JAZN:
[oracle@localhost isqlplus]$ $JAVA_HOME/bin/java -Djava.security.properties=/u01/app/oracle/product/10.2.0/db_1/oc4j/j2ee/home/config/jazn.security.props -jar /u01/app/oracle/product/10.2.0/db_1/oc4j/j2ee/home/jazn.jar  -user "iSQL*Plus DBA/admin" -password welcome -shell

5.Use JAZN to add user and grant it  DBA:
JAZN:> adduser "iSQL*Plus DBA" oca oca
JAZN:> grantrole webDba "iSQL*Plus DBA" oca
JAZN:> exit
JAZN:>

6.Start the serivce of isqlplus:
[oracle@localhost isqlplus]$ isqlplusctl start
iSQL*Plus 10.2.0.1.0
Copyright (c) 2003, 2005, Oracle.  All rights reserved.
Starting iSQL*Plus ...
iSQL*Plus started.

7.Start the listener:
[oracle@localhost isqlplus]$ lsnrctl start

LSNRCTL for Linux: Version 10.2.0.1.0 - Production on 19-NOV-2007 12:31:56

Copyright (c) 1991, 2005, Oracle.  All rights reserved.

Starting /u01/app/oracle/product/10.2.0/db_1/bin/tnslsnr: please wait...

TNSLSNR for Linux: Version 10.2.0.1.0 - Production
System parameter file is /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Log messages written to /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
Listening on: (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))

Connecting to (DESCRIPTION=(ADDRESS=(PROTOCOL=IPC)(KEY=EXTPROC1)))
STATUS of the LISTENER
------------------------
Alias                     LISTENER
Version                   TNSLSNR for Linux: Version 10.2.0.1.0 - Production
Start Date                19-NOV-2007 12:31:58
Uptime                    0 days 0 hr. 0 min. 0 sec
Trace Level               off
Security                  ON: Local OS Authentication
SNMP                      OFF
Listener Parameter File   /u01/app/oracle/product/10.2.0/db_1/network/admin/listener.ora
Listener Log File         /u01/app/oracle/product/10.2.0/db_1/network/log/listener.log
Listening Endpoints Summary...
  (DESCRIPTION=(ADDRESS=(PROTOCOL=ipc)(KEY=EXTPROC1)))
  (DESCRIPTION=(ADDRESS=(PROTOCOL=tcp)(HOST=localhost.localdomain)(PORT=1521)))
Services Summary...
Service "PLSExtProc" has 1 instance(s).
  Instance "PLSExtProc", status UNKNOWN, has 1 handler(s) for this service...
The command completed successfully

8.Then you can type :
http://localhost:5560/isqlplus
or
http://localhost:5560/isqlplus/dba

Posted in 未分类 | Leave a comment

The LANG problem while compile apache:

I got this problem while compile apache:
sort: sort.c:701:inittables_mb: 断言“mblength != (size_t)-1 && mblength != (size_t)-2”失败。 /bin/sh: line 9: 13628 已放弃

after I tried many times and google,I find the solution:

export LANG=en_US

./configure --prefix=/usr/local/apache

make

make install

all the sky is clean.......

Posted in 未分类 | Leave a comment

How to set color in terminal on Linux?

Here are some good links about the bash shell programing examples and the conntent this passage will cover:
http://www.linuxsir.org/bbs/showthread.php?t=113178
http://www.linuxsir.org/bbs/showthread.php?threadid=20558
http://www.linuxsir.org/bbs/showthread.php?threadid=112305


Linux 终端机下的彩色显示
(2001-04-27 15:20:29)
作者: Thorbjørn Ravn Andersen, ravn@dit.ou.dk
译者: Chou-Kai Wang, stylon@ms2.hinet.net
v1.4, 7 August 1997 


--------------------------------------------------------------------------------
虽然大部份的 Linux 发行版本都附有一个用来把目录的内容列出来,而且可以利用彩色来增强输出在视觉上的效果的'ls'指令,不过要把他设定的合你意却不是件容易的事。这份文件说明了设定一些已经内附在你的 Linux 发行版本的软体,来达到这个目地的好几种不同的方法,还有在那□可以找到一些在大部份版本的 Unix □都会用到,但是却常常不被附在 Slackware 或 RedHat Linux □的软体。这份文件的 HTML 版本也可以在我的原始档案这□ http://www.mip.ou.dk/~ravn/colour-ls 找的到。 
--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

1. 简介
这些年来彩色的显示器已经相当普遍,使用者也开始使用一些以彩色来表示例如:程式语言□的保留字,或是拼错的字,来给使用者一些视觉上的回馈。 

自从 Linux 的文字模式控制台支援彩色後,原来的 GNU ls 也很快的被修改成支援输出彩色的讯息而且被附在 Slackware 2.0 版□。这些改良原来版本的缀补档案已经被整合到标准版的 GNU ls 里,现在也应该是所有新的 Linux 发行版本的一部份了。 

现在这版本的文件是把最初的版本改写了许多部份後更新而来的,包括了一些关於 xterm 和 如何利用缀补档来更新核心的资讯。 

这份文件里的资讯都在 Redhat 4.1 □验证过,而且主要是在Slackware 2.0.2 版及核心版本 1.1.54 的环境□搜集而来的。核心的缀补档的资讯是在 slackware 2.2.0,1.2.13 版的核心,并且以 tcsh 为预设的 shell的环境□取得的,而後来也在 2.0.27 的核心□验证过。如果你使用其它的设定或是 unix 版本,我会很感激你告诉我你的作业系统及版本,还有它是否支援彩色的显示。 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

2. 快速入门:给没有那麽多耐心的读者
如果你有个 新版的 Linux,对你使用者目录下的这些档案作这些修改,下次你登入的时候就会生效了。 


~/.bashrc:
    alias ls="ls ‐‐color"

~/.cshrc:
    alias ls 'ls ‐‐color'
    

这样就好啦! 
你也许还会想要作:``eval `dircolors $HOME/.colourrc`'',来设定你自己想要的颜色。这个档案可以用 ``dircolors -p >$HOME/.colourrc'' 来制造出来,而且□面有许多的注解方便你更改设定。 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

3. 这样就好了吗?

首先你需要知道你使用的 ls 是不是可以适当的处理彩色输出。在 Linux 的文字模式控制台试试看这个指令(在 xterm □也可以): 


% ls ‐‐color

(这□的 % 是 shell 的提示符号): 

如果你看到了表示你的 ls 不能接受这个选项的错误讯息,那你应该安装新版本的 GNU fileutils 软体。如果你使用的发行版本没有提供新的升级软体,那麽就从 GNU 的映射站台取得这个软体并且直接从原始码安装。 

如果你并没有看到错误讯息,那麽你使用的 ls 便可以接受这个选项。但很不幸的,有一些在 Slackware (其它的发行版本也有可能) □附的早期版本是有臭□的。在 Redhat 4.1 □面附的 3.13 版的 ls 就没有问题。 


% ls ‐‐version
ls - GNU fileutils-3.13

如果你在 Linux 的文字模式终端机□执行 ``ls ‐‐ color'',那麽它的输出应该依照系统的预设值而有适当的彩色,而且你现在可以开始决定是不是需要改变任何的设定。 

如果你在 xterm □执行上面的过程,也许你还是没办法看到输出变成彩色。就跟 ls 一样,原来的 xterm 并不支援应用程式的彩色输出,而较新的版本有支援。如果你的 xterm 不支援彩色,那麽请参考这个文件的结尾拿到较新版本的 xterm,同时你也只好切换到文字模式并且继续下面的步骤。 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

4. 有那些颜色可以选择呢?
下面的 shell 命令稿(感谢许多把 bash 的版本寄给我的人)显示出现在使用的主控台能够支援的各种颜色组合。如果没有颜色出现,那麽你的主控台就不支援 ANSI 的颜色选择。 


#!/bin/bash
# 显示 ANSI 的彩色
#
esc="33["
echo -n " _ _ _ _ _40 _ _ _ 41_ _ _ _42 _ _ _ 43" 
echo "_ _ _ 44_ _ _ _45 _ _ _ 46_ _ _ _47 _"
for fore in 30 31 32 33 34 35 36 37; do
  line1="$fore  " 
  line2="    "
  for back in 40 41 42 43 44 45 46 47; do
    line1="${line1}${esc}${back};${fore}m Normal  ${esc}0m"
    line2="${line2}${esc}${back};${fore};1m Bold    ${esc}0m"
  done
  echo -e "$line1n$line2"
done

前景的颜色号码是在左边那一排,背景的则是在上方。如果你要粗体的字元和高亮度就在参数□加一个 "1",所以前景是白色而背景是蓝色就成了 "37;44;1"。整个的 ANSI 颜色选择序列就是 

ESC [ 3 7 ; 4 4 ; 1 m

。 
注: 背景不可以是高亮度,所以黄色(高亮度的棕色)只能用来作前景。这是硬体上的限制。 


颜色代码:
        0 - 黑色     4 - 蓝色           3# 是背景颜色
        1 - 红色     5 - 粉红色         4# 是前景颜色
        2 - 绿色     6 - 青色
        3 - 黄色     7 - 白色           ;1 是粗体和高亮度



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

5. 如何设定 ls 的彩色输出

如果你想要修改 ls 内定的标准颜色,你需要用下面的指令在你的 HOME 目录下制造这一个档案 

 cd ; dircolors -p > .coloursrc 

在你编辑完这个注解的很详细的档案以後,你必需要把它读进你的环境变数 LS_COLORS □,通常都是这样作的 

eval `dircolors .colourrc`

然後你要把前面这一行放进你的 .bashrc 或 .cshrc 或 .tcshrc (依照你使用的 shell 而定)□。更详细的用法请看 dircolors(1) 的使用说明。 



--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

6. 如何改变系统的预设值: 前景白色而背景是黑色


你需要告诉你的终端机驱动程式你想要的另一个预设值。要如何作并没有一个标准的方法,不过如果你是用 Linux 的话,你有 setterm 这个程式可以用。 


"setterm" 使用终端机资料库□的资料来设定属性。要选择属性的话要这样作 

setterm -foreground black -background white -store


"-store" 参数把现在所作的改变设定成预设值。这需要你现在使用的的终端机种类(在 TERM 环境变数□)在 termcap 资料库□有足够详细的纪录。如果 setterm 因为某种因素不能正常的工作,你还有其它的选择。 



6.1 Xterm 

你要有至少一种下列的 xterm,而且要支援彩色。 


xterm -fg white -bg blue4
color_xterm -fg white -bg blue4
color-xterm -fg white -bg blue4
nxterm -fg white -bg blue4

这□的 'color_xterm' 支援彩色版的 'ls'。这□的颜色选择是模彷 SGI 上面使用的颜色。 


6.2 虚拟主控台 

你也可以修改核心,这样就可以一劳永逸的用控制码来改变虚拟主控台的预设值。如果你自己编译核心的话,我建议利用 kernel 的缀补档。 


核心的原始码是在 /usr/src/linux/drivers/char/console.c ,大概在 1940 行,这是你应该修改的地方 


        def_color       = 0x07;   /* white */
        ulcolor         = 0x0f;   /* bold white */
        halfcolor       = 0x08;   /* grey */

        def_color       = 0x17;   /* white */
        ulcolor         = 0x1f;   /* bold white */
        halfcolor       = 0x18;   /* grey */

这边的十六进位数字是给显示卡用的: 最左边的位元(上面□例的 "1")是背景 ; 最右边的位元是前景。0 = 黑色,1 = 蓝色,2 = 绿色,3 = 青色, 4 = 红色, 5 = 紫色,6 = 棕色/黄色,7 = 白色。把数字加 8 可以得到高亮度的颜色。在大部份的情况下,高亮度的背景色 == 闪烁的字加上普通的背景。由 sjlam1@mda023.cc.monash.edu.au 所提供 


你也可以使用下面的 ANSI 控制码提供一个执行时期的主控台预设值。(在核心原始码□找到的) 

        ESC [ 8 ]

这个控制码把预设值设成目前的前景及背景颜色。然後重设属性的控制码(ESC [ m)让这预设值马上就取代黑白色成为使用中的颜色。 

每次你重开机的时侯你都需要再把这些字串送给主控台。依照你的 Linux 主机用途不同,有好几个档案可以达成这个目的。 


/etc/issue


在 Slackware □这就是 "Welcome to Linux xx.yy" 讯息所在的档案,如果你的主机是个人使用的话,从这个档案下手是不错的选择(但对於用 telnet 远端登入使用系统的人就可能有点讨厌)。这个档案在每次开机的时侯都会被制造出来,原来的内容则被覆盖,所以你必需要修改开机档案(在 Slackware □是 /etc/rc.d/rc.S,Redhat□是 /etc/rc.d/rc.local)□面的下列几行: 


  echo ""> /etc/issue
  echo Welcome to Linux `/bin/uname -a | /bin/cut -d  -f3`. >> /etc/issue

改成 
  ESCAPE="在这□放入 ESC 码"
  echo "${ESCAPE}[H${ESCAPE}[37;44m${ESCAPE}[8]${ESCAPE}[2J"> /etc/issue
  echo Welcome to Linux `/bin/uname -a | /bin/cut -d  -f3`. >> /etc/issue

这□的控制码会把游标归位、设定颜色(在这□的前景是白色而背景是蓝色)、把这个设定存起来并且把萤幕上其它部份清除掉。这□的改变会在下次重开机时生效。别忘了在 emacs 要打入 ESC 字元要按 C-q 键而在 vi □要按 control-v,因为很显然的执行以上程式的 sh 并不了解 /033 这种用法。 


/etc/profile 或 .profile

  if [ "$TERM" = "console" ]; then
      echo "33[37;44m33[8]" #
# 或使用 setterm。
      setterm -foreground white -background blue -store
  fi


/etc/login 或 .login


  if ( "$TERM" == "console" ) then
    echo "33[37;44m33[8]"  
# 或使用 setterm。
      setterm -foreground white -background blue -store
  endif

[ 译者注: Linux 的主控台下的 $TERM 环境变数已经是 "linux" 而不是 "console" 了 ] 


6.3 远端登入 

你应该可以用上面示□过的 setterm 程式。当然,远端的机器必需要能够得到足够的资讯来操作你的终端机,而且你的终端机模拟程式要能够支援彩色。在我的经验□其它平台上最好的 vt100 终端机模拟程式有下列几种: 

MS-DOS: MS-Kermit (免费, 不是 Microsoft 的产品) 
Windows 95/NT: Kermit/95 (共享软体) 
OS/2: Kermit/95 (共享软体)。 请注意标准的 telnet 支援彩色而且可以在本地端设定。 
关於 kermit 的细节请看 http://www.columbia.edu/kermit/ 




--------------------------------------------------------------------------------
--------------------------------------------------------------------------------

7. 软体

以上所有的用法都假设你使用的是 GNU/Linux。如果你是使用其它的作业环境(比如说是执行 X 的 Sun 工作站等等)你还是可以拿到并且自己编译这些软体。 

彩色版的 xterm 是从标准的 xterm 原始码而发展来的,而用来修改标准 xterm 的缀补档可以从任何一个 X11R6 的站台获得。听说 R6.3 内附的 xterm 有支援彩色,不过我没有测试过。 


ftp://ftp.denet.dk/pub/X11/contrib/u...R6pl5-patch.gz

如果你是用旧版的 X 的话请看内附的文件。注意: 我自己并没有测试过! 

'ls' 是内附在 GNU 的 fileutils 软体□而你可以从 prep.mit.edu 或其它的映射站台拿到。请拿最新的 3.13 版本。 

ftp://ftp.denet.dk/pub/gnu/fileutils-3.XX.tar.gz


我自己曾经在 Solaris,SunOS,Irix 上成功编译过 color-ls。 


我很欢迎对於这篇文章的回应。我的电子邮件地址是 ravn@dit.ou.dk

‐‐ 

Thorbjørn Ravn Andersen 

Posted in 未分类 | Leave a comment

I solved the problems of Chinese Datas at Oracle 10g on CentOS

Author: Milo (snowball)
From:    orafaq.com
This is the whole process:
http://www.orafaq.com/forum/m/273292/84605/#msg_273292

This is what I did:

First,I read the whole link:
http://download.oracle.com/docs/cd/B12037_01/server.101/b12170/ch12.htm#i1025728

Second,change NLS_LANGUAGE,NLS_TERRITORY TO WHAT THE LANGUAGE AND COUNTRY YOU WANT.
For me is:

SQL> alter session set NLS_LANGUAGE='SIMPLIFIED CHINESE';


??????


SQL> ALTER SESSION SET NLS_TERRITORY='CHINA';


??????

don't worry about the "???' marks.

Third,I used this command to see all the parameters of nls:
select * from v$nls_parameters;

SQL> select * from v$nls_parameters;


PARAMETER VALUE---------------------------------------------------------------- ---------------NLS_LANGUAGE AMERICANNLS_TERRITORY AMERICANLS_CURRENCY $NLS_ISO_CURRENCY AMERICANLS_NUMERIC_CHARACTERS .,NLS_CALENDAR GREGORIANNLS_DATE_FORMAT DD-MON-RRNLS_DATE_LANGUAGE AMERICANNLS_CHARACTERSET ZHS16CGB231280NLS_SORT BINARYNLS_TIME_FORMAT HH.MI.SSXFF AM


PARAMETER VALUE---------------------------------------------------------------- ---------------NLS_TIMESTAMP_FORMAT DD-MON-RR HH.MINLS_TIME_TZ_FORMAT HH.MI.SSXFF AMNLS_TIMESTAMP_TZ_FORMAT DD-MON-RR HH.MINLS_DUAL_CURRENCY $NLS_NCHAR_CHARACTERSET AL16UTF16NLS_COMP BINARYNLS_LENGTH_SEMANTICS BYTENLS_NCHAR_CONV_EXCP FALSE


19 rows selected.

The datas are what we wanted:
NLS_LANGUAGE
NLS_TERRITORY
NLS_CHARACTERSET


Four,set the NLS_LANG.

NLS_LANG has the syntax:

NLS_LANG = language_territory.charset

use the terminal then typied the command(if you are using bash):
export NLS_LANG=($NLS_LANGUAGE)_($NLS_TERRITORY).($NLS_CHARACTERSET)

For me is:

[oracle@localhost ~]$ export NLS_LANG="SIMPLIFIED CHINESE_CHINA.ZHS16CGB231280"

The last thing,you gonna do is to have a cup of coffie and type "sqlplus",
enter the sqlplus and login to the database.

[oracle@localhost ~]$ sqlplus


SQL*Plus: Release 10.2.0.1.0 - Production on 星期六 10月 13 00:53:24 2007


Copyright (c) 1982, 2005, Oracle. All rights reserved.


请输入用户名: system输入口令:


连接到:Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - ProductionWith the Partitioning, OLAP and Data Mining options


SQL> select * from test;


未选定行


SQL> insert into test 2 values (1,'你好');


已创建 1 行。


SQL> SQL> select * from test;


ID NAME---------- ------------------------------ 1 你好


Posted in 未分类 | Leave a comment

在linux下使用sqlplus历史回调功能

当在Linux
Shell中运行SQL*Plus的时候,并不提供浏览历史命令行的功能。相反的,在Windows操作系统上,当在DOS命令窗口中运行
SQL*Plus的时候,可以使用向上,向下键来跳回之前已经执行过的SQL语句。你可以 根据需要修改他们,然后按[Enter]重新提交执行。

为了在Linux中达到同样的目的,你可以安装rlwrap,这个程式本身是个Shell,可以运行任何你提供给它的命令包括参数,并添加命令历史浏览功能。 The rlwrap program is under the GPL license。

1:安装
rlwrap-0.28.tar.gz下载地址:http://utopia.knoware.nl/~hlub/uck/rlwrap/
1):解压缩安装文件
[oracle@Channel-MQ3 ~]$gunzip rlwrap-0.28.tar.gz
[oracle@Channel-MQ3 ~]$tar xvf rlwrap-0.28.tar
2):切换到root用户,执行下面的命令
[root@Channel-MQ3 ~]# cd /home/oracle/rlwrap-0.28
[root@Channel-MQ3 rlwrap-0.28]# ls
aclocal.m4 completions configure INSTALL README TODO
AUTHORS config.h configure.ac Makefile src tools
bash30-005.patch config.h.in COPYING Makefile.am stamp-h1
BUGS config.log distribution Makefile.in test
ChangeLog config.status doc NEWS test.log
[root@Channel-MQ3 rlwrap-0.28]#./configure
[root@Channel-MQ3 rlwrap-0.28]#make
[root@Channel-MQ3 rlwrap-0.28]#make install

2:使用
$ rlwrap [-options] <command> <args>
[oracle@Channel-MQ3 ~]$ which rlwrap
/usr/local/bin/rlwrap
[oracle@Channel-MQ3 ~]$ rlwrap sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jul 18 10:31:11 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from v$sga;

NAME VALUE
-------------------- ----------
Fixed Size 1219856
Variable Size 121635568
Database Buffers 310378496
Redo Buffers 7168000

-- 使用向上键调回最后执行的命令,按[Enter]重新执行或修改后按[Enter]执行
SQL> select * from v$sga;

NAME VALUE
-------------------- ----------
Fixed Size 1219856
Variable Size 121635568
Database Buffers 310378496
Redo Buffers 7168000

另外rlwrap还有很多选项可以设置
eg:
−l, −−logfile file
Append command’s output (including echo’ed user input) to file (creating file when it doesn’t exist).

测试如下
[oracle@Channel-MQ3 ~]$ rlwrap -l benbotest.log sqlplus / as sysdba

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jul 18 10:34:50 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@Channel-MQ3 ~]$ cat benbotest.log

[rlwrap] Wed Jul 18 10:34:50 2007

SQL*Plus: Release 10.2.0.1.0 - Production on Wed Jul 18 10:34:50 2007

Copyright (c) 1982, 2005, Oracle. All rights reserved.

Connected to:
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options

SQL> select * from v$version;

BANNER
----------------------------------------------------------------
Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Prod
PL/SQL Release 10.2.0.1.0 - Production
CORE 10.2.0.1.0 Production
TNS for Linux: Version 10.2.0.1.0 - Production
NLSRTL Version 10.2.0.1.0 - Production

SQL> exit
Disconnected from Oracle Database 10g Enterprise Edition Release 10.2.0.1.0 - Production
With the Partitioning, OLAP and Data Mining options
[oracle@Channel-MQ3 ~]$

当然,如果嫌每次敲rlwrap不爽,可以在/etc/profile或者自己的~/.bashrc里面添加alias sqlplus='rlwrap sqlplus'。其他发行版的朋友可以选择rpm包或者干脆从源码自己编译。

Posted in 我的新得 | Leave a comment

降低 Linux 内存开销







降低 Linux 内存开销


几项可以显著提高性能的调整

developerWorks














文档选项



















<!--
document.write('

');
//-->





PDF 格式 - A4

PDF - A4
1 KB

PDF 格式 - letter

PDF - letter
1 KB


Get Adobe® Reader®

将此页作为电子邮件发送

将此页作为电子邮件发送

将此页作为电子邮件发送

将此页作为电子邮件发送

未显示需要 JavaScript 的文档选项




级别: 中级


Martyn Honeyford (martynh@uk.ibm.com), 软件工程师, IBM UK Labs


2007 年 2 月 26 日


物理内存不足可能会严重影响 Linux® 的性能。在本文中,我们将学习如何精确地度量 Linux 系统所使用的内存量。还将以 Ubuntu 系统为例学习有关降低内存需求的实践建议。

Linux 广受追捧的一个优点是它比 Microsoft® Windows® 的效率更高,因此在不太前沿的硬件上也能很好地执行。对于依然使用 Windows 98 时代的机器的人来说,最新最卓越的软件(特别是安全补丁)已经不再支持这些机器,因此这种性能优势使 Linux 成为颇具吸引力的升级产品。


然而,问题的真莫道不消魂相在于虽然 Linux 内核仍然可以配置成合理的大小和效率,但由于新计算机的处理能力大大加强,很多 Linux 桌面环境(例如 KDE 和 GNOME)都增加了许多特性。因此,在较老的硬件上默认安装大多数发行版时,提供的性能都不是一流的。很多现代应用程序也是如此,例如,Firefox 之类的 Web 浏览器和 OpenOffice 之类的办公套件均功能完备,但是尝试在只有 128MB RAM 的机器上运行这些程序,可能会成为非常痛苦的体验!


该怎么办?丢掉所有旧的硬件然后升级?还是安装 1995 年左右的 Linux 发行版?(如果您决定走这条路,我记得使用 Linux-FT 是一种很好的体验。)


不要担心:多年以前,Linux 社区中的人就已经认识到这个问题,Linux 内核和发行版的一大特性(有人喜欢说 这个 伟大特性)在于其能够定制。本文将介绍如何对 Linux 系统进行裁减,以便在小容量的硬件上获得更好的性能。


内存的作用


在大多数情况下,桌面操作系统性能的一个最重要因素就是系统可用的内存量。虽然拥有快速的处理器效果不错,但是如果没有足够的物理内存保证一直很好地利用处理器,系统可能会花费大量时间用于在物理内存和交换空间之间的交换数据(这种情况称为 磁盘抖动),而 CPU 的大部分时间都是空闲的。因此对于老式的系统来说,额外添加内存通常是提高性能的最简单方法。然而,有很多原因决定了这种方法不太可能,例如缺少空闲插槽,对于一些系统(尤其是笔记本或基于 RAMBUS 的系统)来说,则是缺少买得起的 RAM,以及不希望在一台过期的系统上花更多钱这个容易理解的心理。


如果无法或不愿意升级 RAM,接下来最好减少系统上的 RAM 需求。本文将展示为 Linux 机器打造内存天堂 5 个简单步骤。


步骤 1:选择正确的桌面环境


惟一需要做的重要选择就是要安装的 Linux 发行版和桌面环境(DE)。尽管这是截然不同的选择,但是发行版的选择可能影响 DE 的选择。虽然没有任何东西能够阻挡您在系统上安装软件,例如在 Ubuntu 上安装 Fluxbox;但是您会发现如果简单地使用发行版所附带的默认 DE,一切就会轻松很多。


在本文方案中,目标是寻找面向桌面的简单发行版,以便于新用户使用。我从 Ubuntu 6.10 开始入手,它和 GNOME 2.16 一起推出。


对于基本系统来说,我选择了一台配有 800MHz 处理器和 256MB RAM 的老机器。我将执行了两次测试,一次使用全部 256MB RAM 正常引导,一次在内核行上附加了 mem=128M,这会强制内核只识别 128MB 物理内存。这样就可以有效地试验 256MB 和 128MB 的机器,而不必实际使用另一台物理机器(也不必反复从机器中插拔内存)。这个内核行选项能够足够近似地模拟 128 MB 的机器的行为;注意,如果真的只有 128MB 内存,可能会遇到其他问题,举例来说,要使用 Ubuntu,必须使用一个不同于普通机器磁盘的安装盘,它是专门为少于 192MB RAM 的机器准备的。


为了了解基本水平的内存使用情况,引导该系统,登录到桌面系统,并启动一个终端(在本文后面的内容中,我将这种设置称为 基本使用水平(base level));然后使用 free 命令来检查系统中的空闲内存量,结果如清单 1 所示。


清单 1. Ubuntu 在 256MB 机器上的基本使用水平




ubuntu # free
total used free shared buffers cached
Mem: 255988 231704 24284 0 6432 139292
-/+ buffers/cache: 85980 170008
Swap: 746980 0 746980


第一行说明 256MB RAM 中有 231MB “正在使用”。下一行告诉我们尽管有 231MB 内存正在使用,但是应用程序只使用了其中的 86MB;缓冲区和高速缓存使用了其余的内存。


要评价性能,该清单中最重要的部分是 Swap 一行;它告诉我们当前没有使用任何交换空间,这说明目前没有真正遇到内存问题。系统现在可以全部装入物理内存,而不必借助慢速的基于磁盘的交换空间。


然后,为了了解系统的日常使用情况,启动一个 Web 浏览器(Firefox 2.0),然后用其打开 developerWorks,将即时消息客户机(Gaim)连接到 MSN,并使用文件管理器来浏览文件夹,又在 OpenOffice 中打开一个相当大的 Microsoft Word 格式的文档。(在本文剩余的部分中,将这种设置称为 轻量级使用水平(light usage level)。)


一旦成功加载这些之后, free 命令将如清单 2 所示。


清单 2. Ubuntu 在 256MB 机器上的轻量级使用水平




ubuntu # free
total used free shared buffers cached
Mem: 255988 252196 3792 0 21276 87500
-/+ buffers/cache: 143420 112568
Swap: 746980 18676 728304


可以看到内存部分稍有变化。现在应用程序使用了 143MB 的物理内存,其余的内存均被缓冲区占用;另外,系统现在使用了 18MB 的交换空间。在这种轻量级的办公任务情况下,系统的可用性通常看起来很不错,但是已经没有太多发展空间了,可能无法进行需要资源更多的操作,例如编辑巨大的数字照片或视频文件,因为系统很快就会在处理时发生停歇。


为了了解系统在只有 128MB 时的执行情况,我重新引导了系统,并在内核行后面附加了 mem=128M 选项,就像前面介绍的一样。在与清单 1 同样的基本使用水平上,使用 128MB RAM 得到的结果如清单 3 所示。


清单 3. Ubuntu 在 128MB 机器上的基本使用水平




ubuntu # free
total used free shared buffers cached
Mem: 126100 121464 4636 0 1636 37000
-/+ buffers/cache: 82828 43272
Swap: 746980 17924 729056


可以看到现在只使用了 128MB 内存,已经开始使用交换空间了,并且现在实际上还没有开始执行任何操作。


启动同一组应用程序产生的结果如清单 4 所示。


清单 4. Ubuntu 在 128MB 机器上的轻量级使用水平




ubuntu # free
total used free shared buffers cached
Mem: 126100 123608 2492 0 392 51208
-/+ buffers/cache: 72008 54092
Swap: 746980 98452 648528


从这些数字中可以预测出,现在该机器在正常使用时的响应能力非常低,对于这些简单任务来说基本上还可以使用,但是会非常频繁地访问磁盘,我肯定不喜欢使用它作为自己的主要机器。可以看到应用程序需要的内存总量大约是 170MB,但内存中只装入了 72MB,因此 98MB 被转移到交换空间。这有助于解释系统响应能力降低的原因!


下一组测试,我决定使用 Xubuntu,这是与 Ubuntu 有关项目的发行套件。这个发行版与 Ubuntu 非常类似,但使用了 Xfce 4.4 Beta 2 DE,而不是 GNOME。与更为流行的 GNOME 和 KDE 项目不同(它们强调的是实现最佳功能),Xfce 被设计成轻量级的,因此有望更好地满足过期硬件的要求。我们将使用这个发行版执行与 Ubuntu 相同的测试。


在清单 5 中可以看出基本 DE 大约少使用了 25MB 的应用程序内存,并且缓冲区和缓存所使用的内存显著少于 Ubuntu(这可能意味着文件操作较少)。


清单 5. Xubuntu 在 256MB 机器上的基本使用水平




xubuntu # free
total used free shared buffers cached
Mem: 255988 170964 85024 0 6004 104700
-/+ buffers/cache: 60260 195728
Swap: 746980 0 746980


在清单 6 中,再次启动那套测试应用程序(Web 浏览器、IM 客户机和文字处理器)。可以看到对于相同的应用程序组合,所需的内存比 Ubuntu 大约减少了 20MB(其中 126MB 位于物理内存,17MB 位于交换空间,总共是 143 MB;在 Ubuntu 上是 143MB 加 18MB,总共是 161MB)。


清单 6. Xubuntu 在 256MB 机器上的轻量级使用水平




xubuntu # free
total used free shared buffers cached
Mem: 255988 252180 3808 0 1972 124008
-/+ buffers/cache: 126200 129788
Swap: 746980 16956 730024


清单 7 给出了只有 128MB RAM 时的基本使用水平。这次这个内存有限的系统表现良好,没有使用交换空间。


清单 7. Xubuntu 在 128MB 机器上的基本使用水平




xubuntu # free
total used free shared buffers cached
Mem: 126100 123228 2872 0 4252 60484
-/+ buffers/cache: 58492 67608
Swap: 746980 0 746980


在清单 8 中,再次启动测试应用程序。虽然与 Ubuntu 相比,这个系统的表现更好,但是它依然使用了大量的交换空间,这个机器依然有些缓慢(只稍微比 Ubuntu 好一些)。


清单 8. Xubuntu 在 128MB 机器上的轻量级使用水平




xubuntu # free
total used free shared buffers cached
Mem: 126100 123980 2120 0 468 56276
-/+ buffers/cache: 67236 58864
Swap: 746980 64516 682464


从这些数字可以看出,Xubuntu 在整个过程中使用的内存通常更少;因此如果您的系统只有 128MB(或更少内存),这可能是较好的选择。


Linux 发行版的一个重要特征是它们通常不需要花费任何费用,因此很容易下载多个发行版,然后逐一试用一段时间,从而确定喜欢使用的发行版,及其在硬件上的执行情况。如果硬件非常有限,可能希望考察一下 Damn Small Linux 之类的发行版,它宣称可以在只有 16MB RAM 的 486DX 处理器的系统上运行。


由于我的 256MB 系统上还有一点可用空间,所以通常喜欢使用 KDE,因此我尝试了 Ubuntu 的另一个派生版本 Kubuntu,它是基于 KDE 的,在内存使用方面大致介于 Xubuntu 和 Ubuntu 之间。作为参考,清单 9 展示了 Kubuntu 的基本使用水平。


清单 9. Kubuntu 在 256MB 机器上的基本使用水平




kubuntu # free
total used free shared buffers cached
Mem: 255988 244736 11252 0 7612 160008
-/+ buffers/cache: 77116 178872
Swap: 746980 0 746980


















回页首



步骤 2:选择适当的应用程序


选定了发行版之后,接下来的事情是选择要使用的应用程序组合。不同应用程序的内存需求可能差异很大;有时需要在规模和功能之间进行权衡,但是在另外一些情况下,即使功能相同的应用程序对内存的需求也可能存在巨大差异。


为了度量本文的内存使用情况,我们将使用 exmap 工具。该工具比 pstop 更精确,因为它考虑了多个应用程序使用的共享库。例如,如果两个应用程序使用了相同的共享库,各占 1MB 内存,ps 会显示这两个应用程序均额外使用了 1MB 内存,exmap 则能更准确地显示每个应用程序都只使用了 500 KB 内存。这种精确性对于评价 KDE 和 GNOME 之类的桌面环境非常重要,因为在这些情况下应用程序之间会大量使用共享库。


对于在下面几部分讨论的每个应用程序,我测量了 exmap 所生成的 residenteffective resident 值。resident 值表示进程使用的物理内存总量,包括其他进程使用的共享库;该值通常与 pstop 输出的值相同。effective resident 值是将共享库占用的内存平均分配给各个共享进程得到的;从指定进程所消耗的系统内存角度来看,该值更加精确。


还需要注意,在确定进程的全部内存开销时,还应该考虑 mappedeffective mapped 的值,它是进程中位于交换空间中的那些部分。mapped 值与 resident 值类似,但是它针对交换空间中的页面,而不是物理内存中的页面。因此要查看不考虑共享库时的数据,可以将 resident 和 mapped 值加在一起;要查看考虑对共享库时的数据,就需要将 effective resident 和 effective mapped 值加在一起。在制作该表时,并没有 记录这些值,这是因为对于我们的测试来说,交换空间中并没有什么进程,因此,对于这些列,exmap 命令输出结果的值均为 0。


Web 浏览器


对于表 1 中的各个浏览器,均启动了这个程序,并打开了 developerWorks 主页,然后等待它们全部显示出来。结果如表 1 所示。


表 1. Web 浏览器的内存使用情况比较


























应用程序 Effective resident 内存(KB) Resident 内存(KB)
Firefox 27708 35068
Opera 20477 27816
Konqueror 13479 29748
Dillo 2776 6888
Lynx 1101 1540


从该表可以看出,这些浏览器的内存使用情况存在很大差异,内存需求最高的浏览器(Firefox)使用的内存比需求最低的浏览器(Lynx)多了大约 27 倍。这并不是非常公平的比较,因为 Lynx 并不能实现同样的功能(举例来说,它甚至不能显示图形),但这说明,可以根据需求极大地降低内存的使用情况。尽管表 1 中列出的前 3 个浏览器的功能与第一个浏览器的功能多少有些相同,但 Opera 使用的内存大约只有 Firefox 的 2/3,Konqueror 使用的内存比 Firefox 少一半。


对于要求不太高的使用需求来说,Dillo 是介于功能完善的浏览器和只有少量开销的 Lynx 之间的折中方案。Dillo 提供了一个 GUI;但在默认状态下其功能相当有限,没有其他插件时甚至不支持 SSL!


还需要注意我们对共享内存的使用也进行了比较,Konqueror 的执行情况比 Firefox 更好,它使用的内存大约少 14MB;然而,如果查看一下总体使用情况,Konqueror 也仍然高于 Firefox,但差距不大,大约只有 5MB。这是因为 Konqueror 大量地使用了 KDE 共享库,使用 KDE 桌面时,这些库被加载到各种应用程序。然而,如果没有使用任何其他 KDE 应用程序,Opera 将是比 KDE 更佳的选择。稍后我们将更加详细地讨论这个问题。


文字处理器


为了测试文字处理器,我加载了首次对表 2 中列出的文字处理器进行测试时使用的同一个 Microsoft Word 格式的文档。


表 2. 文字处理器的内存使用情况比较


















应用程序 Effective resident 内存(KB) Resident 内存(KB)
OpenOffice Writer 70114 81960
AbiWord 58029 65224
KWord(来自 KOffice) 46512 60096


从这些数字可以明显看出,OpenOffice Writer 使用的内存比 KWord 或 AbiWord 都要多。KWord 使用的内存仅次于 OpenOffice,它在正确地显示 Microsoft Word 格式的文档方面做得最好。尽管 AbiWord 也可以成功地打开该文档,但在正确显示文档时会遇到一些问题,因此如果对您来说与 Microsoft Office 的协作非常重要,最好选择 OpenOffice。


即时消息客户机


为了测试即时消息,我使用表 3 给出的 IM 客户机分别登录到 MSN Messenger 帐号中。


表 3. IM 客户机的内存使用情况比较






















应用程序 Effective resident 内存(KB) Resident 内存(KB)
aMSN 18455 20344
Gaim 13456 21464
Kopete 10988 24176
KMess 7154 19660


此处,Kmess 最适合我,并且它是合理的选择,因为我只对连接到 MSN 感兴趣。如果需要使用其他服务,那么 Kopete 似乎是最好的选择。不过要注意,如果使用不同的 IM 协议,应用程序使用的内存可能会增加;另外,Kmess 是集成的 KDE 应用程序,如果没有使用 KDE,Gaim 可能更适合您。


分析、选择并不断重复


现在您已经了解如何分析应用程序的内存使用情况;可以对自己感兴趣的所有应用程序类型简单地重复这个过程,体验各种可用选择,直到找到内存需求最低又能满足功能需求的选择为止。


在上面的 Web 浏览器一节中,您可能会注意到:在使用应用程序时,最节省内存的通常是与桌面环境紧密集成的应用程序。这是因为这些应用程序通常大量使用嵌入到 DE 中的共享库,并且这些共享库可能早已加载到系统中。举例来说,Konqueror 是 KDE 的文件管理器和 Web 浏览器;因此,它在 KDE 系统上运行时使用的内存明显少于 Firefox,这是因为它的大部分功能已经通过其他应用程序加载到该系统。类似地,如果希望使用 RSS 聚合器,Akregator 可能是很好的选择,因为它同样非常可能使用相同的库。


因此,如果您注重内存使用情况,则在自己的 系统上执行这些测试非常重要,这是因为很难通过查看他人的基准测试结果来了解哪个应用程序在您的系统上使用的内存较少。


这个事实对于选择 DE 也有影响。举例来说,如果真正希望使用 Konqueror,则使用 KDE 作为 DE 可能最为有效。类似地,如果您是 GNOME 用户,在使用您感兴趣的简短 KDE 应用程序之前需要三思,因为它可能会使用整个主机来加载库,但只有自己会使用这些库。


















回页首



步骤 3:删除不希望使用的服务和设置


选定发行版、桌面环境和应用程序组合之后,哪些工作还可以降低使用的内存呢?要回答这个问题,需要对系统进行深入挖掘和配置。借助 exmap,可以分析出系统上正在运行的内容,然后尝试删除不需要的内容,并按照自己的需要对系统进行配置。


较好的着手点是系统引导时自动启动的服务,但这样做需要非常小心,才不至于删除系统运行时需要的任何内容。需要研究具体的发布版需要哪些内容,以及服务的配置方式,因为各个发行版的这些内容可能有所不同。有些发行版比其他发行版差,因为它默认启动很多不需要的服务,例如 Web 服务器等,这会占用大量内存。


除了系统服务之外,您可能还希望了解 DE 的配置情况,因为它也可能启动不需要的服务。


我的 Kubuntu 系统看起来并没有启动太多不必要的服务,但是快速查看一下进程列表,就会发现一些明显能够删除的内容:



  • HPLIP(4.4MB):HP 打印机和扫描器所使用的服务。由于这台机器上并没有连接此类设备,所以并不需要该服务。
  • cupsd(1.1MB):打印机后台处理进程。由于这台机器并没有连接打印机,所以并不需要该服务。
  • kbluetoothd(3.2MB):KDE Bluetooth 后台处理进程。由于这台机器上并没有 Bluetooth 连接,所以并不需要该服务。
  • klipper(1.7MB):KDE 剪切板工具。我没有考虑使用这个工具,因此将其禁用。
  • KMix(4.1MB):KDE 音频合成器。并不是所有时间都需要运行它,因为我通过外部喇叭来调节音量。

只需花 5 分钟进行配置,就能节省 14MB 左右的内存,与最初大约节省 77MB 相比,这是不错的着手点。


深入了解您的 DE 和其他大型应用程序的设置非常值得,因为有些设置可能会影响所使用的内存量。举例来说,通过减少虚拟桌面的个数,也许可以节省一些内存,使用较大的位图作为背景时尤其如此。关闭一些奇异的显示特效也可能有所帮助。


















回页首



步骤 4:期望要适当


在使用旧硬件时,应该考虑到该机器的局限,并正确地进行操作。举例来说,如果希望编辑一组照片,请不要同时打开所有照片。这样只会不必要地消耗内存。如果依次打开,并且编辑之后立即将其关闭,就会简单很多。类似地,如果您正在尝试捕获并编辑一些视频,请考虑单独捕获每一个屏幕,而不要一次捕获所有屏幕;如果正在创建包含图形展示的大型文档,则在编辑完文本之前不要添加图片。


















回页首



步骤 5:优化系统


最后一个步骤是查看系统中的内存大户,并找出是否可以从某处节省一些内存。有很多节省内存的机会,但性能就会有所下降,对于大多数人来说,对性能产生的负面影响和所需的工作量,使得这样做非常不值得。不过,可以考虑下面一些操作:




  • 只使用硬件特有的驱动程序重新编译内核。大部分主流发行版都适合于大量硬件,因此它们通常支持您没有使用的很多硬件。这可以产生一定的优势,尽管以模块形式存在的硬件支持在不需要时不会加载到系统中。



  • 重新编译特定的应用程序或库,这样就可以对大小进行优化,使其专门用于正在使用的特定 CPU,从而也可以节省一些内存。Gentoo 发行版在这个方面做得非常好,您可以使用自己选择的确切编译标记轻松地重新编译某些或所有系统组件。遗憾的是,这个过程在老机器上执行时可能非常漫长。



  • 删除应用程序或库的某些特性,然后对其重新编译也可以降低一些内存需求。借助 Gentoo 又是很好的主意,因为它包含 USE 标记的概念,允许在禁用应用程序的特性之后,轻松构建系统。这样可以极大地减少应用程序的大小,应用程序发布时通常都支持大量的文件格式、编码等,这通常需要加载一些库来提供实际支持。如果您知道自己永远都不会阅读(比如说)JPEG 文件,就可以在 Gentoo 中说明这一点(通过 USE="-jpeg"),这样任何处理图形的应用程序编译后都不支持 JPEG,从而可以降低内存负载。



  • 最近推出的 2.6 内核有一个 swappiness 参数,它可以在运行时进行调优。这个参数决定了,将应用程序移动到交换空间而不是移动到正在减少的高速缓存和缓冲区中的可能性,在前面的测试中可以看到,将应用程序交换出去,而保留大块物理内存以进行缓存的情况很常见。通过降低交换出去的可能性,缓存可能减少,这样就可以在内存中保留更多应用程序。但是,这种移动是否真正会使机器运行得更快,取决于正在运行的应用程序。如果在应用程序之间频繁地换入换出,那么机器的响应能力可能会提高,因为它们位于内存中的概率增加了;然而,如果有一个任务会执行大量磁盘读写操作,这样做可能速度很慢。通常,降低 swappiness 可以提高交互式应用程序的响应能力,但是会降低系统的总体吞吐量。


















回页首



结束语










分享本文...




















digg 将这篇文章提交到 Digg 网站
del.icio.us 发布到 del.icio.us 网站上
Slashdot 发布到 Slashdot!

本文的思想可以使您的老机器重新焕发青春(以及其他一些安全性),并在老式硬件上更好地使用 Linux。测量结果显示,一台 800-MHz/256-MB 的机器可以很好地运行一个相当好用的 Linux 桌面,以满足轻量级的日常办公和家用需求,如发送 e-mail、浏览 Web、文字处理等工作。稍作调整并进行实验,即使 128MB 的机器也可以成为令人满意的桌面计算机。


尽管本文重点讲述在相当有限的硬件上实现功能良好的桌面,也可以对其他 Linux 应用采用相同的原理。不管最新的超大机器上有多少内存,很快就会发现新应用程序已占满了这些内存。通过应用这些技术,可以稍微提高过载服务器的性能,并深入了解应用程序的内存使用情况。


参考资料


学习




获得产品和技术



  • 了解有关 Exmap 内存分析工具的更多内容。


  • 了解有关本文中所讨论的发行版的更多内容:


  • 订购 SEK for Linux,共包含两张 DVD,其中包含为 DB2®、Lotus®、Rational®、Tivoli® 和 WebSphere® 提供的最新 IBM 试用软件。


  • 利用可直接从 developerWorks 下载的 IBM 试用版软件 在 Linux 上构建您的下一个开发项目。



讨论






关于作者












Martyn Honeyford 1996 年毕业于诺丁汉大学,获计算机科学学士学位。从那时起,他就成为位于英格兰 Hursley 的 IBM 英国实验室的一名软件工程师。他目前的职务是 WebSphere MQ Everyplace 开发团队中的一名开发人员。在不工作的时候,他经常弹电吉他(弹得很差)或者疯狂地玩电子游戏。可以通过 martynh@uk.ibm.com 与 Martyn 联系。

Posted in 我的新得 | Leave a comment

Java在Windows中的错误一例

这几天装了J2EE,发现了个极为令人超级恶心的问题:


C :D ocuments and SettingsAdministrator>j2ee
'D :P rogram' 不是内部或外部命令,也不是可运行的程序
或批处理文件。

我的
JAVA_HOME=D :P rogram FilesJavajdk1.5.0_11
J2EE_HOME=D:j2sdkee1.3.1
Path=D :P HP;%java_home%bin;%java_home%jrebinlibtools.jarbin;G :o racleora92bin;C :P rogram FilesOraclejre1.3.1bin;C :P rogram FilesOraclejre1.1.8bin;%SystemRoot%system32;%SystemRoot%;%SystemRoot%System32Wbem;C :P rogram FilesATI TechnologiesATI Control Panel;D :P rogram FilesRationalcommon;C :P rogram FilesCommon FilesAdobeAGL;C :P rogram FilesMicrosoft SQL Server80ToolsBINN;D:MySQLMySQL Server 5.0bin;D:j2sdkee1.3.1bin;%JAVA_HOME%

反复,检查没发现有什么问题,但是,路径都对,都是我进入了目录,然后在地址栏中复制和粘贴的。网上找多数说是路径带空格,但是我发现我上学期用javac也没事啊,现在javac都用不了,并且系统中有个变量HOME路径也有空格。最后发现了这个帖子:
http://www.cjsdn.net/post/view?bid=1&id=188254
感谢这个兵哥哥。。。(虽然一直都崇敬军人,但这次军人让我在技术上又有所崇拜)

结果发现:
C :D ocuments and SettingsAdministrator>set JAVA_HOME=D :P rogra~1Javajdk1.5.0_11


C :D ocuments and SettingsAdministrator>j2ee
J2EE server listen port: 1050
Redirecting the output and error streams to the following files:
D:j2sdkee1.3.1logsMiloj2eej2eesystem.out
D:j2sdkee1.3.1logsMiloj2eej2eesystem.err
C :D ocuments and SettingsAdministrator>j2ee
J2EE server listen port: 1050
Redirecting the output and error streams to the following files:
D:j2sdkee1.3.1logsMiloj2eej2eesystem.out
D:j2sdkee1.3.1logsMiloj2eej2eesystem.err

C :D ocuments and SettingsAdministrator>set JAVA_HOME=D :P rogram FilesJavajdk1.5.0_11


C :D ocuments and SettingsAdministrator>j2ee
'D :P rogram' 不是内部或外部命令,也不是可运行的程序
或批处理文件。
C :D ocuments and SettingsAdministrator>set JAVA_HOME=D :P ro~1Javajdk1.5.0_11


C :D ocuments and SettingsAdministrator>j2ee
ERROR: Set JAVA_HOME to the path of a valid jdk.


C :D ocuments and SettingsAdministrator>set JAVA_HOME=D :P rog~1Javajdk1.5.0_11


C :D ocuments and SettingsAdministrator>j2ee
ERROR: Set JAVA_HOME to the path of a valid jdk.


C :D ocuments and SettingsAdministrator>set JAVA_HOME=D :P rogr~1Javajdk1.5.0_11


C :D ocuments and SettingsAdministrator>j2ee
ERROR: Set JAVA_HOME to the path of a valid jdk.


C :D ocuments and SettingsAdministrator>set JAVA_HOME=D :P rogra~1Javajdk1.5.0_11


C :D ocuments and SettingsAdministrator>j2ee
J2EE server listen port: 1050
Redirecting the output and error streams to the following files:
D:j2sdkee1.3.1logsMiloj2eej2eesystem.out
D:j2sdkee1.3.1logsMiloj2eej2eesystem.err

C :D ocuments and SettingsAdministrator>set JAVA_HOME=D :P rogram~1Javajdk1.5.0_11


C :D ocuments and SettingsAdministrator>j2ee
ERROR: Set JAVA_HOME to the path of a valid jdk.


Progarm Files的缩写为:Progra~1多一个字母不行,少一个也不行。
恶心,Windows!
linux上还可以转义。

Posted in 未分类 | 2 Comments

Some basic knowledges of PHP

看了些PHP的基础知识,自己在这里总结下:

1,在HTML嵌入PHP脚本有三种办法:

<script language="php">
//嵌入方式一
echo("test");
</script>

<?
//嵌入方式二
echo "<br>test2";
?>

<?php
//嵌入方式三
echo "<br>test3";
?>

还有一种嵌入方式,即使用和Asp相同的标记<%%>,但要修改PHP.ini 相关配置,不推荐使用。

2,PHP注释分单行和多行注释,和java注释方式相同。

<?
//这里是单行注释
echo "test";
/*
这里是多行注释!可以写很多行注释内容
*/
?>

注意不要有嵌套注释,如/*aaaa/*asdfa*/asdfasdfas*/,这样的注释会出现问题。

3,PHP主要的数据类型有5种,integer,double,string,array,object。

4,函数内调用函数外部变量,需要先用global进行声明,否则无法访问,这是PHP与其他程序语言的一个区别。事例代码:

<?
$a=1;
function test(){
echo $a;
}
test();    
//这里将不能输出结果“1”。

function test2(){
    
global $a;
    
echo $a;
}
test2();    
//这样可以输出结果“1”。
?>

注意:PHP可以在函数内部声明静态变量。用途同C语言中。

5,变量的变量,变量的函数

<?
//变量的变量
$a="hello";
$
$a="world";
echo "$a $hello";    //将输出"hello world"
echo "$a ${$a}";    //同样将输出"hello world"
?>

<?
//变量的函数

function func_1(){
  
print("test");
}

function fun($callback){
  
$callback();
}

fun(
"func_1");    //这样将输出"test"
?>

6,PHP同时支持标量数组和关联数组,可以使用list()和array()来创建数组,数组下标从0开始。如:

<?
$a[0]="abc";
$a[1]="def";

$b["foo"]=13;

$a[]="hello";    //$a[2]="hello"
$a[]="world";    //$a[3]="world"

$name[]="jill";    //$name[0]="jill"
$name[]="jack";    //$name[1]="jack"
?>

7,关联参数传递(&的使用),两种方法。例:

<?
//方法一:
function foo(&$bar){
  
$bar.=" and something extra";
}
$str="This is a String,";
foo(
$str);
echo $str;    //output:This is a String, and something extra

echo "<br>";
//方法二:
function foo1($bar){
  
$bar.=" and something extra";
}
$str="This is a String,";

foo1(
$str);
echo $str;    //output:This is a String,

echo "<br>";

foo1(
&$str);
echo $str;    //output:This is a String, and something extra
?>

8,函数默认值。PHP中函数支持设定默认值,与C++风格相同。

<?
function makecoffee($type="coffee"){
  
echo "making a cup of $type.n";
}
echo makecoffee();    //"making a cup of coffee"
echo makecoffee("espresso");    //"making a cup of espresso"
/*

注意:当使用参数默认值时所有有默认值的参数应该在无默认值的参数的后边定义。否则,程序将不会按照所想的工作。
*/

function test($type="test",$ff){    //错误示例
  return $type.$ff;
}

9,PHP的几个特殊符号意义。
   $      变量
  &      变量的地址(加在变量前)
 @      不显示错误信息(加在变量前)
 ->      类的方法或者属性
=>      数组的元素值
?:         三元运算子

10,include()语句与require()语句
    如果要根据条件或循环包含文件,需要使用include().
    require()语句只是被简单的包含一次,任何的条件语句或循环等对其无效。
   由于include()是一个特殊的语句结构,因此若语句在一个语句块中,则必须把他包含在一个语句块中。
   

<?
//下面为错误语句
if($condition)
    
include($file);
else
    
include($other);

//下面为正确语句    
if($condition){
  
include($file);
}
else
{
  
include($other);
}
?>

//

Feedback

# re: PHP基础知识总结  回复  更多评论
  

2006-12-04 15:38 by 芯儿

PHP同时支持标量数组和关联数组,可以使用list()和array()来创建数组,数组下标从0开始。

这个,我看不懂.麻烦楼主讲解一下,行吗>谢谢??

# re: PHP基础知识总结  回复  更多评论
  

2006-12-13 20:51 by 幸福的子佳节又重阳

最近我也在学PHP,谢谢你的教程,另外我也转载了:

http://mysheji.com/Article/pro/PHP/phpjc/10659.html

# re: PHP基础知识总结  回复  更多评论
  

2006-12-18 17:39 by Yemoo'S PHP Home

回复:幸福的子佳节又重阳

------------------------------------------------

你的网站做的很好,我很喜欢,站点已经收藏。

# re: PHP基础知识总结  回复  更多评论
  

2006-12-18 17:40 by Yemoo'S PHP Home

回复:求职信的解释

---------------------------

晕倒!晕倒!!

# re: PHP基础知识总结  回复  更多评论
  

2006-12-18 17:56 by Yemoo'S PHP Home

回复:芯儿

------------------------------------------------

1,PHP同时支持标量数组和关联数组。

解释: 标量数组,即以数字为下标的数组,如$a[1],$a[2],$a[3]等。

关联数组,即用某个关键字来关联数组值,如$a["first"]="ccc",$a["second"]="dddd",访问时下标不用1,2 等数组索引,而应该用关联索引,如访问数组first的值时用$a["first"].

2,可以使用list()和array()来创建数组

解释,这只是php创建数组的两种方式。

A,使用array()创建数组方法:$arr=array("aaa","bbb","ccc");或$arr=array("first"=>"aaa","second"=>"bbb","third"=>"ccc").

B,使用list创建数组是一种不严格的说法(偶的错误),准确说,使用list()可以把数组中的值赋给一些变量。

如:$info=array("coffee","brown","caffeine");

list($drink,$color,$power)=$info;

echo "$drink的颜色为$color";

返回:coffee 的颜色为brown

(注意:list()仅能用于数字索引的数组并假定数字索引从0开始)

3,数组下标从0开始。

解释:这句话应该不用解释了,在js,java,c等语言都是这样规定的。@芯儿

Posted in 我的新得 | Leave a comment

The mysql problem on Slackware.

These days,I met a problem of mysql.I use the original packages of slackware 11,but it can't work.So I doubt that maybe I installed it wrong.After several trying,I failed.It's a problem.

root@locahost:~/Desktop/chmlib-0.39# mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql/mql.sock' (2)

root@locahost:~/Desktop/chmlib-0.39# /etc/rc.d/rc.mysqld start
root@locahost:~/Desktop/chmlib-0.39# Starting mysqld daemon with databases from /var/lib/
mysql
STOPPING server from pid file /var/run/mysql/mysql.pid
070806 17:01:18  mysqld ended

so i looked at this file /var/lib/mysql/locahost.err and found:
 
070806 17:01:17 [ERROR] /usr/libexec/mysqld: Can't find file: './mysql/host.frm' (errno:
13)
070806 17:01:17 [ERROR] /usr/libexec/mysqld: Can't find file: './mysql/host.frm' (errno:
13)
070806 17:01:17 [ERROR] Fatal error: Can't open and lock privilege tables: Can't find fil
e: './mysql/host.frm' (errno: 13)
070806 17:01:18  mysqld ended

And I found this word: privilege.
Must be a privilege problem ,associated with the command chown or chmod.

root@locahost:/var/lib/mysql# ls -al
总计 20552
drwxr-x---  4 mysql mysql     4096 2007-08-06 17:08 ./
drwxr-xr-x 15 root  root      4096 2006-09-02 10:15 ../
-rw-------  1 mysql mysql      149 2007-08-05 18:12 .bash_history
-rw-rw----  1 mysql mysql  5242880 2007-08-06 17:08 ib_logfile0
-rw-rw----  1 mysql mysql  5242880 2007-08-05 17:23 ib_logfile1
-rw-rw----  1 mysql mysql 10485760 2007-08-05 17:23 ibdata1
-rw-rw----  1 mysql root      8975 2007-08-06 17:08 locahost.err
drwx------  2 mysql root      4096 2007-08-05 17:20 mysql/
drwx------  2 mysql root      4096 2007-08-05 17:20 test/

so the problem found out:
root@locahost:/var/lib/mysql# cd ..
root@locahost:/var/lib# chown -R mysql:mysql mysql
root@locahost:/var/lib# su - mysql

"He did decide, though, that with more time and a great deal of mental
effort, he could probably turn the activity into an acceptable
perversion."
                -- Mick Farren, "When Gravity Fails"

mysql@locahost:~$ mysql
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/var/run/mysql/my
sql.sock' (2)
mysql@locahost:~$ mysqld_safe &
[1] 13477
mysql@locahost:~$ Starting mysqld daemon with databases from /var/lib/mysql

mysql@locahost:~$ mysql
Welcome to the MySQL monitor.  Commands end with ; or g.
Your MySQL connection id is 1 to server version: 5.0.24a

Type 'help;' or 'h' for help. Type 'c' to clear the buffer.

mysql> hello
    -> /
    -> ;
ERROR 1064 (42000): You have an error in your SQL syntax; check the manual that correspon
ds to your MySQL server version for the right syntax to use near 'hello
/' at line 1
mysql> show databases
    -> ;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| test               |
+--------------------+
2 rows in set (0.07 sec)

mysql> quit
Bye

OH,HELLO MYSQL!!!

Pretty good.I sloved the problem,and i am reducing the amount of  the problems that human will meet!

Posted in 未分类 | Leave a comment

Slackware...

As some one  says,"Slackware is the simplest Linux that human are using."While using this distribution,I thought this man was wrong.But now I am changing my mind,indeed.I like using linux and most exactly,I like using Slackware.

plus:
WenQuanYi is the most beautiful Chinese Characters in the World.
Eva QQ is most popular IM on linux in China.
In slackware ,we can use the aumix command to set the volume.

Posted in 未分类 | Leave a comment