2009年1月26日星期一

Association

1. Association(关联), 最质朴的关系,A类有一个B类成员变量,就是Assocication

2. Aggregation(聚合),Association的一种,无环的Association就是Aggregation

3. Composition(合成),Aggregation的一种,比聚合强,不能共享的Aggregation就是Composition

4. Dependency(依赖),一般而言,局部变量,方法的参变量,静态方法调用所产生的对其他类的引用成为依赖

2009年1月22日星期四

Eclipse之alt+/失灵

在 Window - Preferences - General - Keys 内
1、把word completion的快捷键设置alt+C
2、把Content Assist的快捷键由ctrl+space改成alt+/

DB2之FETCH FIRST

注意是FETCH FIRST不是FETCH
相当于SQL Server的top语句,
SELECT * FROM TABLE1 FETCH FIRST 100 ROWS ONLY

DB2之Table Volatile

当一个表在执行期变化很大时,就是说一会儿空一会儿满,可以考虑设置volatile来优化它,这样优化器会通过索引来扫描它从而优化性能
ALTER TABLE  VOLATILE CARDINALITY 

2009年1月21日星期三

Eclipse之Console中的乱码

在Run...的“common” 选项卡(Tab)中设置
里面有一项叫做Console Encoding,默认是设置成项目的Encoding,如果我们的控制台输出的字符是UTF-8编码的话,就需要在这里UTF-8;同理,可以根据实际情况改成其他的编码方式。

我设成UTF-8就能显示正确了

2009年1月20日星期二

Linux之SVN

今天只是勉强装上了SVN,但是并没有连通,哎,下次再来
原帖:http://www.cnblogs.com/lansh/archive/2008/02/14/1068999.html

按原帖安装会遇到点麻烦,下面是我修正过的

1. svn服务器安装

操作系统: Redhat Linux AS4

安装包获取:
下载http://subversion.tigris.org/downloads/subversion-1.4.0.tar.gz和http: //subversion.tigris.org/downloads/subversion-deps-1.4.0.tar.gz。

编译:
以root用户登录。
将subversion-1.4.0.tar.gz和subversion-deps-1.4.0.tar.gz传到服务器。

tar xfvz subversion-1.4.0.tar.gz
tar xfvz subversion-deps-1.4.0.tar.gz
cd subversion-1.4.0
./configure --prefix=/opt/svn --without-berkeley-db –with-zlib
(注:以svnserve方式运行,不加apache编译参数。以fsfs格式存储版本库,不编译berkeley-db)
make clean
make
make install

make时候可能会出错,需要到更改 neon/src/Makefile中的
CFLAGS = -fPIC -g -02

vi /etc/profile,在/etc/profile最后加入:
PATH=$PATH:/opt/svn/bin
export PATH

测试:
svnserve –version

如果显示如下,安装成功:
svnserve, version 1.4.0 (r21228)
compiled Oct 12 2006, 10:18:56

Copyright (C) 2000-2006 CollabNet.
Subversion is open source software, see http://subversion.tigris.org/
This product includes software developed by CollabNet (http://www.Collab.Net/).

The following repository back-end (FS) modules are available:

* fs_fs : Module for working with a plain file (FSFS) repository.

2. svn配置
建立版本库目录,可建多个:
mkdir -p /opt/svndata/repos1
mkdir -p /opt/svndata/repos2

建立版本库:
svnadmin create /opt/svndata/repos1
svnadmin create /opt/svndata/repos2

修改版本库配置文件:
版本库1:
vi /opt/svndata/repos1/conf/svnserve.conf

内容修改为:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos1

版本库2:
vi /opt/svndata/repos2/conf/svnserve.conf

内容修改为:
[general]
anon-access = none
auth-access = write
password-db = /opt/svn/conf/pwd.conf
authz-db = /opt/svn/conf/authz.conf
realm = repos2

即除realm = repos2外,其他与版本库1配置文件完全相同。如果有更多的版本库,依此类推。

配置允许访问的用户:
vi /opt/svn/conf/pwd.conf

为了简化配置,2个版本库共用1个用户配置文件。如有必要,也可以分开。

注意:对用户配置文件的修改立即生效,不必重启svn。

文件格式如下:
[users]
<用户1> = <密码1>
<用户2> = <密码2>

其中,[users]是必须的。下面列出要访问svn的用户,每个用户一行。示例:
[users]
alan = password
king = hello

配置用户访问权限:
vi /opt/svn/conf/authz.conf

为了简化配置,3个版本库共用1个权限配置文件/opt/svn/conf/pwd.conf。如有必要,也可以分开。文件中定义用户组和版本库目录权限。

注意:
* 权限配置文件中出现的用户名必须已在用户配置文件中定义。
* 对权限配置文件的修改立即生效,不必重启svn。

用户组格式:
[groups]
<用户组名> = <用户1>,<用户2>
其中,1个用户组可以包含1个或多个用户,用户间以逗号分隔。

版本库目录格式:
[<版本库>:/项目/目录]
@<用户组名> = <权限>
<用户名> = <权限>

其中,方框号内部分可以有多种写法:
/,表示根目录及以下。根目录是svnserve启动时指定的,我们指定为/opt/svndata。这样,/就是表示对全部版本库设置权限。
repos1:/,表示对版本库1设置权限
repos2:/occi, ,表示对版本库2中的occi项目设置权限
repos2:/occi/aaa, ,表示对版本库2中的occi项目的aaa目录设置权限

权限主体可以是用户组、用户或*,用户组在前面加@,*表示全部用户。权限可以是w、r、wr和空,空表示没有任何权限。

示例:
[groups]
admin = alan

[/]
@admin = rw

[repos1:/occi/aaa]
king = rw

[repos2:/pass]
king =

删除无用文件:
rm /opt/svndata/repos1/conf/authz
rm /opt/svndata/repos1/conf/passwd
rm /opt/svndata/repos2/conf/authz
rm /opt/svndata/repos2/conf/passwd

3. 启动svn
建立启动svn的用户:
useradd svn
passwd svn
根据提示为用户svn设置密码

允许用户svn访问版本库:
chown –R svn:svn /opt/svndata
chown –R svn:svn /opt/data

启动svn
su - svn -c "svnserve -d --listen-port 9999 -r /opt/svndata"

其中:
su – svn表示以用户svn的身份启动svn
-d表示以daemon方式(后台运行)运行
--listen-port 9999表示使用9999端口,可以换成你需要的端口。但注意,使用1024以下的端口需要root权限
-r /opt/svndata指定根目录是/opt/svndata

检查:
ps –ef|grep svnserve

如果显示如下,即为启动成功:
svn    6941   1 0 15:07 ?    00:00:00 svnserve -d --listen-port 9999 -r /opt/svndata

4. 以服务方式启动svn

在文件/etc/services
添加一行:
svn 3690/tcp # SVN
在文件夹/etc/xinetd.d/创建文件svn,内容为
service vnc
{
disable = no
socket_type = stream
protocol = tcp
wait = no
user = root
server = /usr/local/bin/svnserve
server_args = -i -r /opt/svndata
}
运行/etc/rc.d/init.d/xinetd restart
使上面的配置生效。

Linux之CVS

今天装SVN失败,还是装了CVS
原帖:http://www.chinaitpower.com/A/2003-12-22/66055.html
下面只摘录出安装过程:

首先确保系统安装有cvs:
[root@mail xinetd.d]# rpm -qa|grep cvs
cvs-1.11.1p1-3
如果命令输出类似于上面的输出则说明系统已经安装有cvs,否则就需要从安装光盘中安装cvs的rpm包。

一 创建CVS属主用户:
# useradd -d /cvsroot cvs
# chmod 771 /cv sroot

二、建立CVS仓库(初始化cvs)

# su cvs
$ cvs -d /cvsroot init
$exit
#

四、启动cvs服务器

在/etc/xinetd.d/目录下创建文件cvspserver,内容如下:
# default: on
# description: The cvs server sessions;

service cvspserver
{
socket_type = stream
wait = no
user = root
server = /usr/bin/cvs
server_args = -f --allow-root=/cvsroot pserver
log_on_failure += USERID
only_from = 192.168.0.0/24
}
其中only_from是用来限制访问的,可以根据实际情况不要或者修改。
修改该文件权限:
# chmod 644 cvspserver
然后重新启动xinetd:
# /etc/rc.d/init.d/xined restart
然后察看cvs服务器是否已经运行:
[root@mail xinetd.d]# netstat -lnp|grep 2401
tcp 0 0 0.0.0.0:2401 0.0.0.0:* LISTEN 7866/xinetd
则说明cvs服务器已经运行。

五、创建用来访问cvs的用户

前面创建的cvs用户是cvs仓库管理用户,而为了让用户访问则还需要一个访问用户:
# useradd cvspub
# usemod -G cvs cvspub
这里添加了一个用户cvspub,并且将该用户添加到cvs组中。

2009年1月17日星期六

Linux之权限

参考:http://linux.chinaitlab.com/safe/38178.html

1. 每个文件属于一个用户和一个组, 这是 Linux 中权限模型的核心

2. ls -l 完整列出文件或者目录信息,可以看到下面的
drwxr-xr-x 6 root root 4096 2008-12-25 22:51 windows

2.1 首字符d表示目录, 其他可能的首字符:-常规文件, l符号链接, c字符专门设备文件, b块专门设备文件, p先进先出, s套接字
2.2 第一个3元组rwx表示文件所有者有读写执行的权限
第二个3元组r-x表示文件所有组有读和执行的权限
第二个3元组r-x表示文件其他用户有读和执行的权限
2.3 6代表链接数
2.4 root root表示所有者为root, 所有组为root

3. 改变文件属性和权限的3个命令
chown, 改所有者,只有root可以用
chgrp, 改所有组
chmod, 改权限

4. 数字模式
  rwx 7
  rw- 6
  r-x 5
  r-- 4
  -wx 3
  -w- 2
  --x 1
  --- 0

所以777 == rwxrwxrwx
0777这种4位权限的第一位数用来设置 suid sgid sticky位, 他的模式数字 on on on 7 on on off 6 on off on 5 on off off 4 off on on 3 off on off 2 off off on 1 off off off 0

5. umask
当一个进程创建一个文件时,会给他一个默认参考权限,他就是umask,
umask也是个命令来设置umask, umask 0077表示对此文件关闭0077权限,将确保组和其他用户对于新创建的文件绝对没有任何权限

6. suid/sgid
当设置了一个可执行程序的“suid”这一位时,它将代表可执行文件的所有者运行,而不是代表启动程序的人运行
看考suid/sgid的介绍

2009年1月16日星期五

DB2之Special registers

Special register类似系统方法,可以在sql直接用,最知名的莫过于CURRENT TIMESTAMP,CURRENT DATE了,所以到文档里去找查询系统时间的系统方法是找不到的。

所有Special registers的定义:http://publib.boulder.ibm.com/infocenter/db2luw/v9/index.jsp?topic=/com.ibm.db2.udb.admin.doc/doc/r0008404.htm

DB2之JDBC

1. 首先有两种driver, 旧的和新的
  • 旧的 CLI 驱动程序 (称CLI driver) 类名为COM.ibm.db2.jdbc.app.DB2Driver,物理表示是 db2java.zip 文件
  • 新的 JDBC 通用驱动程序 (称Universal driver, 也可称JCC driver)类名为com.ibm.db2.jcc.DB2Driver, 物理表示是 db2jcc.jar 文件, 对于不同的系统还需要个license的jar
2. DB2 dirver有4种类型Type1-Type4,真够乱其实有用的主要是Type2和Type4

Type2需要客户端装了DB2客户端并且把源数据库catalog过来,jdbc会调用本地库
URL Pattern:jdbc:db2:databasename
CLI和Universal driver都支持Type2

Type4是纯java, 不用装任何额外的东西
URL Pattern:jdbc:db2://ServerIP:50000/databasename
注意了只有Universal driver才支持Type4

除此之外Type1没啥用,Type3只有CLI支持,但类名不太一样

参考:
http://www.ibm.com/developerworks/db2/library/techarticle/dm-0512kokkat/
http://www.ibm.com/developerworks/cn/data/library/techarticles/dm-0512kokkat/index.html

2009年1月15日星期四

Linux之系统目录

列几个常用的

/etc 放配置文件,里面有很多子目录针对各方面的配置,如group, user之类
/dev 放设备文件
/bin 放命令,这个容易
/sbin 也放命令,但放的都是高级命令,普通用户都用不了
/root root的home
/home 其他用户的home, 每个用户在里面都有个目录
/lib 放系统需要的库,好懂
/usr 就是linux下的Program Files, 用户安的很多都放在/usr/local
/var 包括系统一般运行时要改变的数据

2009年1月14日星期三

DB2之runstats

注意是runstats,目的就是向DB2的优化器提供信息,这样DB2在执行SQL等命令时可以根据表的实际情况做出优化,选择最好的ACCESS PLAN。
表:
RUNSTATS ON TABLE <表名>
索引:
RUNSTATS ON TABLE <表名> FOR INDEXES ALL
表和索引:
RUNSTATS ON TABLE <表名> AND INDEXES ALL
一个用法:
发生大量修改(更新、插入、删除)后,先运行RUNSTAT,再REORGCHK一下,对有必要需要表REORG的运行REORG命令。然后在用RUNSTAT统计信息这样表的使用空间和使用效率都可以得到交好的提高

2009年1月13日星期二

vi之三种模式

1. 命令行模式(command mode)

  进入vi之后,是处于「命令行模式(command mode)」, 在「命令行模式(command mode)」下按一下字母「i」就可以进入「插入模式(Insert mode)」,

2. 插入模式(Insert mode)

  只有在Insert mode下,才可以做文字输入,按「ESC」键可回到命令行模式。

3). 底行模式(last line mode)

  一般我们在使用时把vi简化成两个模式,就是将底行模式(last line mode)也算入命令行模式command mode)。在「命令行模式(command mode)」下,按一下「:」冒号键进入「Last line mode」,然后可以做以下事情:
: w filename (输入 「w filename」将文章以指定的文件名filename保存)
: wq (输入「wq」,存盘并退出vi)
: q! (输入q!, 不存盘强制退出vi)

Linux之find

功能虽然很强大,但先记住下面这个就够了

$find /opt/ -name "db2*" //在opt目录下找出db2开头的文件

2009年1月11日星期日

DB2之db2set

db2set是用来设置db2实例的profile registries,总之profile registries要比实例的configuration parameters要大一点,比系统环境变量小一点

1. db2set -lr //列出所有profile registries

2. db2set registry_variable = value //设值

3. db2set registry_variable = //恢复成默认值

DB2之catalog

参考:http://hi.baidu.com/%BF%B5%BD%A1/blog/item/94e70708062ff433e9248887.html

1. 把远程机器catalog到一个node
db2 catalog tcpip node p570 remote 172.10.10.10 server 50000
节点其实就是把远程服务器映射到本地,类似指向远程服务器和实例的地址指针

2. 把远程数据库catalog到这个node上
db2 catalog db REMOTEDB at node p570
可以理解为把远程服务器实例下的数据库映射到本地为一个别名

备注:在catalog之前保证远程实例的profile  variables中DB2COMM=TCPIP,用下面的命令设置
db2set DB2COMM=TCPIP

2009年1月9日星期五

Linux之管道命令

其实就是一个 |
它表示左边的命令的输出是右边命令的输入
例如: ps -ef | grep db2*
当然一条命令还可能有更多|, 左边输入右边输出,这就是为啥叫管道

Linux之grep

grep其实就是一个查询工具,使用正则表达式
可以这么用
ls -al | grep sys* //列出sys开头的文件
也可以这么用
ps -ef | grep sys* //列出sys开头的进程

2009年1月8日星期四

DB2之查看错误代码

db2 ? SQL30081N

看trace
/home/db2inst1/sqllib/db2dump/db2diag.log

2009年1月7日星期三

Linux之查看当前用户

1. $who //就这么简单
2. $w //更简单
3. $whoami //yes, who am I
4. $who am i //真的可以啊
5. $logname
6. $last $last n //上次和上几次的用户
7. $tty //报告所有连接的设备

Linux之ps

#ps -ef //查看所有进程和详细信息

#ps -ef | grep db2 //查看db2的所有进程

//TODO 补充更多...

Linux之后台运行程序

1.在命令结尾放个&如
#/home/start.sh &

2.nohup
#
nohup /home/start &

前一种只对守护进程长期有效,即使关掉终端也不会停掉,后一种使所有进程都长期后台执行

Linux之cat

作用:把文件或屏幕内容输出到一个文档

1. cat file1 > file2 输出文件1到文件2
2. cat file1 file2 >> file3 把俩文件连起来输出到第三个
3. cat > file1, 然后在屏幕上输入,按ctrl+c结束
4. cat /dev/null > file1, 清空file1

参数:
-n 或 --number 由 1 开始对所有输出的行数编号
-b 或 --number-nonblank 和 -n 相似,只不过对于空白行不编号
-s 或 --squeeze-blank 当遇到有连续两行以上的空白行,就代换为一行的空白行
-v 或 --show-nonprinting

2009年1月5日星期一

Linux之清空文件

1. cat > 文件名
2. 然后ctrl-c

或者
cat /dev/null > 文件名

用于清空log很管用

2009年1月4日星期日

Sofware之Jarnal

打草稿软件,可以给PDF做批注
link: http://www.dklevine.com/general/software/tc1000/jarnal.htm

在linux下有类似的xournal
link: http://xournal.sourceforge.net/

DB2之Instance管理

1.创建
db2icrt instance_name //windows

db2icrt -u fanced_user instance_name //linux or unix
User-defined functions and stored procedures, by default, are created in fenced mode so that these processes run in a different address space than the DB2 engine

2.删除
db2idrop -f instance_name

3.查看
db2ilist //list

4.Migration
db2imigr instance_name //从32位migrate到64位

5.Update
db2iupdt instance_name //打了fix pack就需要update

Word之转大小写

Shift+F3

2009年1月3日星期六

Linux之删除文件和目录

rm myfile.txt 删除文件
rm -rf myfolder 强制删除整个目录,包括所有子目录和文件, -f的意思是强制没有提示, -r是第归