Junit Fans

欢迎来到Junit Fans>>   | 首页 资源中心 | AppFuse | 商业智能 | 一般分类 | ITPUB论坛

千万当心!不启用代理功能,网站也有可能被恶意用作垃圾邮件发送服务器

发表人:joson | 发表时间: 2009年八月04日, 10:51

摘要: 最近巡检网站时,发现有大量的异常链接,如“tcp 0 912 hhrz.org:80 125.224.196.186:1087 LAST_ACK ”以及异常访问记录-" 205.209.140.102 - - [03/Aug/2009:04:21:59 +0800] "CONNECT 59.124.98.13:25 HTTP/1.0" 404 723 "-" "-"
“,经查,为非法主机恶意通过网站发送垃圾邮件,经调整后,恢复正常。报告有这种异常现象的较多,但解决的较少,发布本文,希望引起站长们的注意。
关键字:linux,apache,CONNECT,:25,linux下apache日志的CONNECT,垃圾邮件,VirtualHost,proxy,虚拟主机,代理服务器 查看全文

关于Windows与Office盗版将黑屏的传闻,我不得不说

发表人:joson | 发表时间: 2008年十月16日, 23:22

作者: 陈海青(josonchen,"船长")

(http://www.chq.name)
(http://www.hhrz.org) (航海日志)
(http://junit.vicp.net)

日期:2008.10.16(yyyy.mm.dd)

今天,在360.cn上看到一个关于“20日将验证Windows与Office 盗版将黑屏的提醒”的帖子,我--"船长",作为一个80年代末开始接触电脑的普通中国人,不得不说:微软,不要目中无人,不要欺人太甚!

假如传言被证实,那这一切,决不是我们的错,决不是中国人的错,是微软的问题,是微软的圈套!

前事不忘,后事之师!

且不说微软的sqlserver如何借助sybase获得数据库领航者席位,也不表.net为什么跟j2ee长的如此神似,今天就说说想当年(大约80年末-90年初),office4.2以及windows3.2,何等的微弱,何等的弱不禁风,时至今日却又如何如此了得!

如果不是纵容盗版,没有铺天盖地的盗版windows,盗版office(也许真的没人知道它们是从哪里来的),过来人都会得出结论:绝不会有微软的今天!

我就是见证人之一,见证人又何止千千万万!

当时,无论是wordStar,还是WPS,即使是巨人汉卡这类非专门的文字处理类产品,微软也难以望其项背!

如果不是微软借助盗版轻松介入,又哪有今天微软如此猖狂的情形!

只是没想到到了今天,中国人巍然屹立于世界民族之林,却会被如此欺凌,如此诚惶诚恐,因为我们太善良了!

竟然在中华大地肆虐,真是欺人太甚!

欺中国人非你的产品不能用?就让我们拭目以待,不日自见分晓!

政府倡导,国人自强,引以为戒!即使远离微软这样的"巨无霸",我们照样井然有序,依旧生机勃勃!

谁若不信,尽管放胆过来,打你个有去无回!

---------------------------------------
附:
http://bbs.360safe.com/viewthread.php?tid=572226&pid=3448725&page=1&extra=page%3D1#pid3448725(关于20日将验证Windows与Office 盗版将黑屏的提醒)


使用svnserve.exe作为Subversion服务器的简单设置

发表人:joson | 发表时间: 2008年十月14日, 10:17


作者: 陈海青(josonchen,"船长")
(http://www.chq.name)
(http://www.hhrz.org) (航海日志)
(http://junit.vicp.net)
日期:2008.09.29(yyyy.mm.dd)


使用版本管理服务器,不仅仅是一个文件服务器,还能记录并随时恢复每一次改变,对于团队开发自然是必不可少的,对个人使用也能提供很多方便。针对个人或小团队开发的情况,不需要复杂的配置,几步简单的安装和设置,svn就可以就位了,本文记录的就是了利用 svnserve.exe 来作为版本库服务器端,配合使用客户端软件TortoiseSVN的简单设置。


1:下载安装(也可到本站hhrz.org 或 chq.name下载中心--Subversion下载:

http://www.chq.name/option,com_remository/Itemid,72/func,select/id_20.html
http://nchc.dl.sourceforge.net/sourceforge/tortoisesvn/TortoiseSVN-1.4.8.12137-win32-svn-1.4.6.msi
http://subversion.tigris.org/files/documents/15/41687/svn-1.4.6-setup.exe

2:配置svn版本库
1)建立版本库:设定版本库的根目标目录:d:svn_root版本库,建立项目子目录 movie,使用客户端软件TortoiseSVN在其中建立仓库结构。

2)建立工作拷贝:将初始版本拷贝过来。然后在命令行启动svn:

SVNserve -d -r d:svn_root版本库

3) 配置权限:编辑d:svn_root版本库movieconf 目录中的三个文件

``代码库基础配置文件svnserve.conf`` ,如下::(实际上就是去掉几个注释符#)
[general]
anon-access = none
auth-access = write
password-db = passwd
authz-db = authz.conf

``用户帐号文件 passwd`` ,如下::(增加几条记录 用户名=口令)

[users]
admin = adminpwd

目录访问权限控制文件authz.conf`` 文件,内容如下::(设置用户组和项目各目录的访问权限)

[groups]
g_admin = admin

[movie:/]
@g_admin = rw
* = r


4)import工作拷贝到版本库(访问地址:svn://localhost/movie),使用客户端软件TortoiseSVN,在工作拷贝目录上操作,使用上述设定的用户名和口令:admin/adminpwd
5)测试:重新下载工作拷贝
6)建立自动运行的服务
下载SVNService(参考附录中的SVNService(将svn作为windows服务运行的工具),chq.name的下载中心也有下载),拷贝到:subversion的安装目录的bin子目录中,如D:Program FilesSubversionbin
在该目录中运行以下命令,安装服务:
SVNservice -install -d -r d:svn_root版本库

附录:
1:参考文章:
1):Subversion之路--实现精细的目录访问权限控制(v1.0 更新于2006.12.05):

http://bbs.iusesvn.com/thread-6-1-1.html

2):[录像视频]windows安装基于svnserve的subversion服务器演示动画
http://bbs.iusesvn.com/thread-236-1-1.html

2:有关资料
1) 本站hhrz.org/chq.name下载中心--Subversion :

http://www.chq.name/option,com_remository/Itemid,72/func,select/id_20.html
2):SVNService(将svn作为windows服务运行的工具)
http://bbs.iusesvn.com/viewthread.php?tid=137&extra=page%3D1%26amp%3Bfilter%3Ddigest
3):Subversion简单常用问题解决方案列表(http://bbs.iusesvn.com/viewthread.php?tid=1981&extra=page%

3D1%26amp%3Bfilter%3Ddigest):
经常有新手配置基于svnserve的subversion服务器后,
在客户端访问subversion版本库时出现这个错误:
svnserve.conf:12: Option expected
为什么会出现这个错误呢,就是因为subversion读取配置文件svnserve.conf时,无法识别有前置空格的

4):eclipse使用subclipse导致jvm崩溃(http://doc.iusesvn.com/show-35-1.html
http://subclipse.tigris.org/serv ... ers&msgNo=10234
里面说是由于安装svn1.4.4和apache2.2时,一个环境变量所导致的,原文如下:
Subclipse can crash on Windows if you have the environment variable
APR_ICONV_PATH set and it is pointing at a set of libraries that were
built against Apache 2.2. If that is the case, change the environment
variable name to APR_ICONV1_PATH and that will fix the problem. The
libraries from 2.2 will look for the variable with the "1" in it first
anyway. So this is a proper change to make.

If you want to be thorough, you could download the zip file for
Subversion 1.4.3, and point the APR_ICONV_PATH variable at the iconv
folder that came with it.

解决方法:
将环境变量 APR_ICONV_PATH改为APR_ICONV1_PATH
或者下载Subversion 1.4.3的zip包,将环境变量 APR_ICONV_PATH 指向解压后的 iconv文件夹。


[原创][从mambo到joomla的迁移实战之五]选择UTF-8 还是GB2312/GBK

发表人:joson | 发表时间: 2008年十月09日, 20:58

作者:陈海青(josonchen)
(http://www.chq.name)
(http://www.hhrz.org)
(http://junit.vicp.net)


日期:2008.10.07

摘要:
本文记录了网站由mambo迁移到joomla后,对网站页面显示的字符集(字符编码)的设置

关键字:
Joomla! 1.0, 迁移,Joomla,mambo,UTF-8,GBK,GB2312,字符集,字符编码

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

网站页面显示的字符集(字符编码)主要取决于三个部分:

1:数据库的字符集和相关的转换设置

涉及的文件:includesdatabase.php

影响的范围:前后台页面中涉及从数据库中读取的数据


查找的内容:mysql_query
如:mysql_query("SET NAMES 'utf8'", $this->_resource);

使用UTF-8的设置:
mysql_query("SET NAMES 'utf8'", $this->_resource);
mysql_query("SET CHARACTER SET utf8", $this->_resource);
mysql_query("SET COLLATION_CONNECTION='utf8_general_ci'", $this->_resource);

使用数据库字符集的(如:数据库字符集为:GB2312/GBK)的设置:
删除上述字符集设置

2:语言文件的设置

涉及的文件(以简体中文为例):languagesimplified_chinese.php

影响的范围:前后台页面中涉及从语言文件中读取的数据

查找的内容:_ISO
如:DEFINE('_ISO','charset=GBK');

使用UTF-8的设置:
DEFINE('_ISO','charset=UTF-8');

使用GBK/GB2312的设置:
DEFINE('_ISO','charset=GBK');

3:后台组件显示字符的设置

涉及的文件(以简体中文为例):components*

影响的范围:后台管理页面中涉及的各组件显示的数据

使用UTF-8的设置:
将相关文件逐一转换为UTF-8格式的编码文件

使用GBK/GB2312的设置:
将相关文件逐一转换为dos/unix格式的编码文件


【原创翻译】AppFuse 2.0 开发环境【AppFuse2 文档-5】

发表人:joson | 发表时间: 2007年十月26日, 06:55

AppFuse开发环境
【原创翻译】AppFuse 2.0 开发环境【AppFuse2 文档-5】
本文讨论了如何设置AppFuse的开发环境
翻译: 陈海青(josonchen)
(http://www.chq.name)
(http://www.hhrz.org)
2007.10.23
英文版:http://appfuse.org/display/APF/Development+Environment
Added by Matt Raible, last edited by Matt Raible on Mar 15, 2007 18:44
About this Tutorial关于本教程
本教程描述了如何设置开发环境,任你能够使用自己喜欢的IDE (Eclipse, IDEA 或者 NetBeans)来用Maven编译、测试、部署AppFuse 应用. Eclipse 在开发单模块(single-module)项目时有优势,而IDEA NetBeans 擅长于多模块(multi-module)项目.学习本文使用AppFuse时,不必事先了解关于Maven的知识,因为本文将会解释如何来使用它.如果你对深入学习 Maven 感兴趣,请下载Better Builds with Maven这本书。(免费的!).。。。。。。
 查看全文

【原创翻译】AppFuse2.0 快速起步【AppFuse文档-4】

发表人:joson | 发表时间: 2007年十月25日, 15:49

AppFuse 2.0 快速起步

【原创翻译】AppFuse 2.0 快速起步【AppFuse文档-4

本文简述如何快速上手,开始使用AppFuse 2.0

翻译: 陈海青(josonchen

(http://www.chq.name)

(http://www.hhrz.org)

2007.10.22

英文版网址:http://appfuse.org/display/APF/AppFuse+QuickStart

 查看全文

在ORACLE数据库上创建VPD(Virtual Private Databases)安全策略的实战记录

发表人:joson | 发表时间: 2007年五月24日, 12:46

在ORACLE数据库上创建VPD(Virtual Private Databases)安全策略的实战记录

作者:陈海青(joson chen)
网站:www.chq.name
日期:2007.05.24

版权声明:转载或引用本网版权所有之内容须注明“转自(或引自)chq.name (Junit fans)”字样,并标明本网站网址http://www.chq.name

一、关于VPD
VPD,即:Virtual Private Database,提供了对数据库的精密访问控制(graind access control (FGAC)).
使用VPD,可以在数据记录集定义用户的访问权限.

二、使用VPD的示例:

1)未进行权限控制时,执行的查询语句,可以看到所有商品在2002年的销售额:
SELECT year, prod_category, sum(sales)
FROM sales_mv
WHERE year = '2002';

2)如果加上了VPD策略,限制访问指定范围内的产品(例如仅能访问'VIDEOS','RADIOS'),
再执行上述的查询语句,会自动加上限制条件--AND prod_category in ('VIDEOS','RADIOS'),最后实际执行的语句为:

SELECT year, prod_category, sum(sales)
FROM sales_fact
WHERE year = '2002'
AND prod_category in ('VIDEOS','RADIOS'); --自动加上的限制条件

三、操作的过程

以下为作者总结在ORACLE数据库上创建vpd(Virtual Private Databases),完成安全策略管理,并应用于www.chq.name上的实战记录,于070524更新完毕。
数据库运行环境:oracle 9i

1:确定数据库对象及互相之间的关系
1)相关表和视图
数据库中有两类表,代码表和数据表,数据表均有一个“机构代码”字段(DM_JG),
其“前七位”等于用户代码表的“机构代码”
建立脚本:
CREATE TABLE dm_users
( user_dm VARCHAR2(11) NOT NULL,
jg_dm VARCHAR2(11) NOT NULL
);

CREATE TABLE DIM_JBXX
(pk VARCHAR2(50) NOT NULL,
data VARCHAR2(11)
jg_dm VARCHAR2(11) NOT NULL); --www.chq.name

CREATE VIEW VIEW_JBXX as select * from DIM_JBXX
;

2)相关用户,并为其授权
相关用户有三个:
VPD:数据表和VPD对象的属主,允许访问全部数据;
1234502 :数据访问用户,其用户名为其单位代码的前7位,访问受限用户
建立脚本:
CONNECT sys/password@www.chq.name AS SYSDBA;
CREATE USER VPD IDENTIFIED BY VPD
DEFAULT TABLESPACE VPD TEMPORARY TABLESPACE temp;
GRANT connect, resource TO VPD;

CREATE USER 1234502 IDENTIFIED BY 1234502
DEFAULT TABLESPACE users TEMPORARY TABLESPACE temp;
GRANT connect, resource TO 1234502;


GRANT EXECUTE ON DBMS_RLS TO PUBLIC;

CONN VPD/VPD@www.chq.name

GRANT SELECT, INSERT ON V_JBXX TO 1234502, 1234512;

2:定义安全策略(Security Policies)的目标

在数据库里,每个用户分配一个机构代码,在这里直接使用该代码的前7位作为用户名,相关的数据表均有一个“机构代码”字段
安全策略目标:每个用户仅能浏览和操作“机构代码”与自己的机构代码相同的数据记录。
例外情况:vpd用户可以不受限制访问数据

3:创建应用环境(Application Context)
应用环境是一个包含系列环境变量名称和值的值对的集合,是存储用户的环境变量的空间;
系统提供了默认的环境USERENV,含有当前会话相关的默认的变量,如用户名、主机和应用程序名等

1)为创建VPD的context和context package的用户授权,
CONNECT sys/password@www.chq.name AS SYSDBA;
GRANT create any context, create public synonym TO VPD;
CONNECT VPD/VPD@www.chq.name;

2)创建应用环境 CTX_VPD_SEC
CREATE CONTEXT CTX_VPD_SEC USING VPD.PKG_VPD_SEC;

4:创建VPD应用程序包,在包里增加设置环境变量的函数、存储过程
这个包的作用是提供设置环境变量的工具(函数或存储过程),供on login触发器或应用程序等调用。

1) 创建VPD应用程序包PKG_VPD_SEC的包头
CONNECT VPD/VPD@www.chq.name;
CREATE OR REPLACE PACKAGE VPD.PKG_VPD_SEC AS
PROCEDURE Set_Context;
END PKG_VPD_SEC;

2)创建VPD应用程序包的包体
CREATE OR REPLACE PACKAGE BODY VPD.PKG_VPD_SEC IS
PROCEDURE Set_Context IS
lv_user VARCHAR2(11);
lv_jg_dm VARCHAR2(11);
BEGIN
DBMS_Session.Set_Context('CTX_VPD_SEC','SETUP','TRUE');
v_ouser := SYS_CONTEXT('USERENV','SESSION_USER');
DBMS_Session.Set_Context('CTX_VPD_SEC','DM_USER', lv_user);
BEGIN
SELECT substr(JG_DM,1,7)
INTO lv_jg_dm
FROM dm_users
WHERE user_dm = lv_user;
DBMS_Session.Set_Context('CTX_VPD_SEC','JG_DM', lv_jg_dm);
EXCEPTION
WHEN NO_DATA_FOUND THEN
DBMS_Session.Set_Context('CTX_VPD_SEC','JG_DM', substr(lv_user,1,7));
END;
DBMS_Session.Set_Context('CTX_VPD_SEC','SETUP','FALSE');
END Set_Context;
END PKG_VPD_SEC;
/
SHOW ERRORS

3)授权其他用户可以访问并运行 PKG_VPD_SEC 包:
GRANT EXECUTE ON VPD.PKG_VPD_SEC TO PUBLIC;
CREATE PUBLIC SYNONYM PKG_VPD_SEC FOR VPD.PKG_VPD_SEC;

4)建立用户登陆触发器,每次登录后首先设置自己的应用环境变量
CONNECT sys/password@www.chq.name AS SYSDBA;
CREATE OR REPLACE TRIGGER VPD.Set_Security_Context
AFTER LOGON ON DATABASE
BEGIN
VPD.PKG_VPD_SEC.Set_Context;
END;
/
SHOW ERRORS

5:创建VPD应用程序-安全策略包,创建策略函数,为简便起见仍使用PKG_VPD_SEC
这是实现策略的函数,该函数从应用环境取得变量值,形成查询语句的一部分

1)建立安全策略( Security Policies)包的包头,简便起见修改PKG_VPD_SEC
--In order for the context package to have any effect on the users interaction with the database,
--we need to define a Security_Package for use with the security policy.
--This package will tell the database how to treat any interactions with the specified table:

CONNECT vpd/vpd@www.chq.name;

CREATE OR REPLACE PACKAGE VPD.PKG_VPD_SEC AS
PROCEDURE Set_Context;

FUNCTION User_Data_Insert_Security(Owner VARCHAR2, Objname VARCHAR2)
RETURN VARCHAR2;

FUNCTION User_Data_Select_Security(Owner VARCHAR2, Objname VARCHAR2)
RETURN VARCHAR2;
END Security_Package;
/
2)修改包体,增加安全策略函数:

CREATE OR REPLACE PACKAGE BODY Security_Package IS

PROCEDURE Set_Context IS
......
END Set_Context;

FUNCTION User_Data_Select_Security(Owner VARCHAR2, Objname VARCHAR2)RETURN VARCHAR2 IS
Predicate VARCHAR2(2000);
BEGIN
Predicate := '1=2';
IF (SYS_CONTEXT('USERENV','SESSION_USER') = 'VPD') THEN
Predicate := NULL;
ELSE
Predicate := 'JG_DM = SYS_CONTEXT(''CTX_VPD_SEC'',''JG_DM'')';
END IF;
RETURN Predicate;
END User_Data_Select_Security;

FUNCTION User_Data_Insert_Security(Owner VARCHAR2, Objname VARCHAR2) RETURN VARCHAR2 IS
Predicate VARCHAR2(2000);
BEGIN
Predicate := '1=2';
IF (SYS_CONTEXT('USERENV','SESSION_USER') = 'VPD') THEN
Predicate := NULL;
ELSE
Predicate := 'JG_DM = SYS_CONTEXT(''CTX_VPD_SEC'',''JG_DM'')';
END IF;
RETURN Predicate;
END User_Data_Insert_Security;
END Security_Package;
/
SHOW ERRORS
3)授权所有用户可以访问并运行安全策略包 PKG_VPD_SEC:

GRANT EXECUTE ON VPD.PKG_VPD_SEC TO PUBLIC;
--CREATE PUBLIC SYNONYM PKG_VPD_SEC FOR VPD.PKG_VPD_SEC;

6:将策略函数应用到一个表或视图上
使用oracle 提供的DBMS_RLS包来实现安全策略的应用管理。
例如:
CONNECT VPD/VPD@www.chq.name;

BEGIN
DBMS_Rls.Add_Policy('VPD', 'VIEW_JBXX', 'USER_DATA_INSERT_POLICY',
'VPD', 'PKG_VPD_SEC.USER_DATA_INSERT_SECURITY',
'INSERT', TRUE);
DBMS_Rls.Add_Policy('VPD', 'VIEW_JBXX', 'USER_DATA_INSERT_POLICY',
'VPD', 'PKG_VPD_SEC.USER_DATA_INSERT_SECURITY',
'SELECT');
END;
或者:
execute DBMS_RLS.ADD_POLICY(object_schema=>'VPD',object_name=>'V_FACT_data',policy_name=>'USER_DATA_INSERT_POLICY',
function_schema=>'VPD',policy_function=>'PKG_VPD_SEC.USER_DATA_INSERT_SECURITY',
statement_type=>'select',update_check=>FALSE,enable=>true)
)

注意事项:
1)DBMS_RLS包最初的运行权限须由sys用户授予VPD用户。
2)插入失败的报错信息:
ORA-28115: policy with check option violation


参考资料:
1:<<Oracle9i DBA Handbook>>,Kevin Loney and Marlene Theriault ,etc, The McGraw-Hill co.Inc.
中文版:蒋蕊等译 机械工业出版社
2: http://www.oracle-base.com/articles/8i/VirtualPrivateDatabases.php
3:http://www.adp-gmbh.ch/ora/security/VPD/index.html
4:http://www.chq.name
5: http://xsb.itpub.net/post/419/59520
6: http://junit.vicp.net
7:http://zhouwf0726.itpub.net/post/9689/158056


Labels: oracle,Virtual Private Databases,VPD,安全策略,实战记录,数据库,陈海青,chq.name,junit fans


oracle数据库在linux上的克隆(clone)和迁移

发表人:joson | 发表时间: 2006年十月07日, 10:50

oracle数据库在linux上的克隆(clone)和迁移

作者:陈海青 (joson) http://www.chq.name
日期:2006。09。23

一、起因:

为搭建一个开发、测试环境,需要克隆一个现有的oracle数据库系统,于是记录了操作过程,供参照。

二、系统环境:
1)被克隆的主机(简称主机www.chq.name_22):操作系统:redhat 企业版 REHL4.0,数据库:oracle9i
2)克隆目标主机(简称客机www.chq.name_35):操作系统:redhat 企业版 REHL4.0

三、克隆策略的确定:
有几种方法:

一)、硬盘克隆。
限制:1)主、客机硬件配置要一致;2)硬盘容量要一致
优点:不必进行操作系统和数据库安装
二)远程拷贝数据库程序和数据文件。
优点:不必安装数据库软件,不必恢复数据。
缺点:需要为运行数据库管理程序进行额外配置。
限制:要选择好合适的拷贝方式(rcp/rsync/cp等),才能高效易用
三)使用exp/imp或者其他数据库备份和恢复手段
优点:经典方法,安全可靠
缺点:1)速度慢;2)需要中间性数据存储空间

最后,考虑到效率和空间的因素,最后选择远程拷贝,使用rsync,配置简便、高效、易于管理。

四、操作步骤:

一)下载并在主客机上安装rsync软件,略。


二)编辑主客机的hosts文件,加上对方主机

三)在主机上进行配置.

(因blog限制,无法写完,详见:oracle数据库在linux上的克隆(clone)和迁移 )


FreeBSD 硬盘系统和数据的复制迁移实战

发表人:joson | 发表时间: 2006年九月10日, 23:29

FreeBSD 硬盘系统和数据的复制迁移实战
陈海青(joson chen) http://www.chq.name
2006.09.09
最近,为更换硬盘,参照有关资料,进行了一次FreeBSD下的硬盘数据迁移,具体情况如下:
1:起因:原有的硬盘容量小、有坏区、swap设置不合理、/var太小,所以需要进行更换
2:计划:1)使用sysinstall--fdisk划分好新硬盘的slice(片段,一块硬盘分成最多四个),本次划分为2slice,用其中的19GB用于Freebsd); 2) 使用sysinstall--label划分新硬盘的partition(分区,每一个slice上又可以分成最多8partition):/ (512MB),swap (512MB),/tmp (1GB),/var (2G,数据库等)/usr (10GB),(/home (rest of the hdd));
3:操作步骤:
1将新硬盘装上并让系统正确识别。原硬盘为IDE0口上的Master,FreeBSD识别为ad0。为了不用设硬盘跳线,这里将新硬盘到IDE1接口的Master,系统识别为ad2;如果你想和旧硬盘接在同一数据线线上,即IDE0接口,则必须将跳线设为slave,系统识别为ad1 1、关机,将新硬盘装上,重新开机。 2、开机后查看是否系统是否已经识别到新硬盘了:
http://www.chq.name# dmesg | grep ad2
2记下旧硬盘文件系统所对应的mount:查看/etc/fstab,并且运行命令df,记录结果。新硬盘分区次序基本按照旧的一样,避免混淆。

3
4创建临时的目录用来作临时mount,用于以下步骤挂载文件系统。
http://www.chq.name# mkdir /backup http://www.chq.name# mkdir /backup/root http://www.chq.name# mkdir /backup/usr http://www.chq.name# mkdir /backup/var
http://www.chq.name# mkdir /backup/tmp
5停止原系统的主要服务,如APACHEMYSQL等,或者重启后进入单用户状态,准备复制。进入单用户模式的方法:1.重启,在启动菜单开始倒计时的时候按下空格(space)键,输入boot -s ,然后在#后输入
fsck -p
mount -u /
mount -a
swapon -a
adjkerntz -i
6运行以下脚本,执行硬盘数据和系统的复制。要注意根据前面记录的/etc/fstabdf结果查看文件系统的对应关系,修改mount等脚本。
#1 - create new filesystems (newfs the drive)
#2 - mount the partitions
#3 - dump the data from my old drive, and restore it to my new one
#4 - unmount the new drives partitions
#5 - enable softupdates on the new drive (optional)

#!/bin/sh
newfs /dev/ad1s1a
newfs /dev/ad1s1e
newfs /dev/ad1s1f
newfs /dev/ad1s1g
mount /dev/ad1s1a /backup/root
mount /dev/ad1s1e /backup/var
mount /dev/ad1s1f /backup/tmp
mount /dev/ad1s1g /backup/usr
( dump -0f - / ) | ( cd /backup/root ; restore -rf - )
( dump -0f - /var ) | ( cd /backup/var ; restore -rf - )
( dump -0f - /usr ) | ( cd /backup/usr ; restore -rf - )
( dump -0f - /tmp ) | ( cd /backup/tmp ; restore -rf - )
# umount /backup/root
# umount /backup/var
# umount /backup/usr
# umount /backup/tmp
# tunefs -n enable /dev/ad2s1a
# tunefs -n enable /dev/ad2s1e
# tunefs -n enable /dev/ad2s1f
# tunefs -n enable /dev/ad2s1g
#end
其中:(1):( dump -0f - / ) | ( cd /backup/root ; restore -rf - )这是把老的根目录下所有内容复制输出到管道 , restore 从管道里读数据 , 写入当前目录所在目录.
(2):进行dump/restore的操作可能会花点时间,需耐心等待,我迁移了3GB数据,运行脚本用了大约40分钟。
7调整新硬盘中的/etc/fstab,Device等修正,我原来使用的是第二块slice,现在使用第一个slice,于是修改了Device列:
http://www.chq.name#mount /dev/ad1s1a /backup/roothttp://www.chq.name# vi /backup/root/etc/fstab
8)关机,摘掉原来的硬盘,把新硬盘挂到旧硬盘原来的位置,这步不要省略了,如果你不换位置,系统还是认为新硬盘是ad2,由于你的/etc/fstab里面是对应ad0的,所以启动会找不到/usr/var等文件系统。
9)注意事项:重新启动,如果没有什么异常,那恭喜你,数据迁移已经成功,否则,请再看看有什么操作错误或者忘记做哪一步了。建议,让新的系统运行几天,正常后再处置旧硬盘。切记,数据迁移的是一件比较危险的事情,操作过程中不能有差错,否则可能导致你原来的数据丢失,所以必须非常谨慎。
10我的部分操作输出结果http://www.chq.name:
# cd /
# mkdir backup
# cd backup
# mkdir root
。。。
www# newfs /dev/ad2s1a
/dev/ad2s1a: 1024.0MB (2097152 sectors) block size 16384, fragment size 2048
using 6 cylinder groups of 183.77MB, 11761 blks, 23552 inodes.
super-block backups (for fsck -b #) at:
160, 376512, 752864, 1129216, 1505568, 1881920
。。。
# sh restore.sh
DUMP: WARNING: should use -L when dumping live read-write filesystems!
DUMP: Date of this level 0 dump: Thu Sep 7 22:22:40 2006
DUMP: Date of last level 0 dump: the epoch
DUMP: Dumping /dev/ad0s2a (/) to standard output
DUMP: mapping (Pass I) [regular files]
DUMP: mapping (Pass II) [directories]
DUMP: estimated 37230 tape blocks.
DUMP: dumping (Pass III) [directories]
DUMP: dumping (Pass IV) [regular files]
warning: ./.snap: File exists
DUMP: DUMP: 37868 tape blocks
DUMP: finished in 7 seconds, throughput 5409 KBytes/sec
DUMP: DUMP IS DONE
DUMP: WARNING: should use -L when dumping live read-write filesystems!
DUMP: Date of this level 0 dump: Thu Sep 7 22:22:49 2006
DUMP: Date of last level 0 dump: the epoch
……
DUMP: finished in 1 seconds, throughput 7128 KBytes/sec
DUMP: DUMP IS DONE
tunefs: soft updates set
使用sysinstallFDISK命令把新硬盘分片,设置MBR然后用LABEL命令分区。可以先自动分区,再对照原来的次序修改,假设原来的文件系统/dev/ad0s1g 对应/usr,那你新硬盘/dev/ad2s1g就用来做/usr,划分好后,按M分别清空所有文件系统的mount点,因为我们还没有建立临时的mount的目录,不清空会和系统原来的mount冲突的。

Appfuse,Running On Oracle时出现NoSuchTableException错误的解决

发表人:joson | 发表时间: 2006年八月05日, 21:31

AppfuseRunning On Oracle时出现NoSuchTableException错误的解决

作者:陈海青(joson chen)(http://www.chq.name)

2006.08.01

引言:

最近,根据Appfuse的文档,学习配置在appfuse上使用oracle数据库。在设置过程中出现了错误,几经周折,终于解决,记录下来,供参考。

Appfuse版本:1.9.3

Oracle版本:9.2

一、问题的出现:

在按照文档要求,需要完成以下几步:1) Create Database Schema chq;2) Setup JDBC Driver ;3) Edit build.properties in the main AppFuse Directory ;4) Generate Application;5)Deploy Application ;6) Test Database Access 在执行时第5步发布程序ant setup时,程序报错:org.dbunit.dataset.NoSuchTableException,屏幕输出如下:

$ ant db-load

Buildfile: build.xml

init:

prepare:

[echo] Preparing target directory 'D:developmytest/build/mytest'db-load:

[dbunit] Executing operation: CLEAN_INSERT

[dbunit] on file: D:developmytestmetadatasqlsample-data.xml

[dbunit] with format: xml

BUILD FAILED

D:developmytestbuild.xml:714: org.dbunit.dataset.NoSuchTableException: user_role

Total time: 3 seconds

二、问题的解决

1:首先根据错误信息检查相关配置文件D:developmytestbuild.propertiesD:developmytestbuild.xml和导入数据文件:D:developmytestmetadatasqlsample-data.xml,发现与文档要求是一致的。

2:在网上搜索,根据一些人的建议,进行修改,均没有效果

3:对数据库启用全局sql语句跟踪,查找执行的语句,并进行分析,终于解决,看到了盼望已久的success:,屏幕输出:

$ ant db-load

Buildfile: build.xml

init:

prepare:

[echo] Preparing target directory 'D:developmytest/build/mytest'db-load:

[dbunit] Executing operation: CLEAN_INSERT

[dbunit] on file: D:developmytestmetadatasqlsample-data.xml

[dbunit] with format: xml

BUILD SUCCESSFUL

Total time: 3 seconds

三、小结

1:这次问题解决的核心是配置好build.properties文件,特别是以下语句:

database.username=username
database.schema=schemaname (case sensitive using 10g)

要注意,在使用oracle9时,由于默认情况下,所有的标识符(包括数据库各种对象名、用户名等)均以大写形式保存在数据库字典里,除非以引号包裹的形式强行指定为小写。所以

这里的database.usernamedatabase.schema要与数据库中的一致,一般情况下为大写。

2appfuse 1.9.3build.xmlmetadatasqlsample-data.xml两个文件已经没问题了,除了参照appfuse文档设置为使用oracle外,不必额外修改。

网上不少文章谈到要修改这两个文件中的内容,如sample-data.xml里表名前加上schema名、表名大写、直接设置build.xml的“operation”属性值等可能是针对以前版本的。我的测试结果是:sample-data.xml里表名前加上schema名汇报错;表名大小写不敏感.

3:其他设置按照appfuse文档要求进行设置。

4:注意在设置build.properties时,井号符号”#”只有在行首时才是注释符号,

如以下语句

database.schema=schemaname #(case sensitive using 10g)

会被解析为:schema名为“schemaname #(case sensitive using 10g)”,这是错误的,应该为

database.schema=schemaname 
#(case sensitive using 10g)

四、相关资料:

1、 http://appfuse.org/wiki/

2、 使用oracle的系统跟踪功能调试java程序(http://www.chq.name/content/view/126/59/

3、 我的配置文件:

1metadatasqlsample-data.xml

id

username

password

first_name

。。。。。。


2
D:developmytestbuild.properties

……

# modi by chq,for use oracle-->

database.jar=${lib.dir}/oracle/ojdbc14.jar

database.type=oracle

database.host=192.168.1.1

#use the database schema owner and password created in step #1 above here

database.username=chq

database.password=chq

database.schema=CHQ

hibernate.dialect=org.hibernate.dialect.Oracle9Dialect

database.driver_class=oracle.jdbc.driver.OracleDriver

database.url=jdbc:oracle:thin:@192.168.1.1:1521:chq

3D:developmytestbuild.xml,要改两个target,

。。。。。。


KETTLE JAVA API 实战记录

发表人:joson | 发表时间: 2006年七月20日, 21:44

KETTLE JAVA API 实战记录

陈海青(www.chq.name

2006.07.20

版权所有:陈海青(joson chen) www.chq.name
Copyright (C) 陈海青(joson chen) www.chq.name All Rights Reserved
转载或引用本网版权所有之内容须注明“转自(或引自)chq.name (Junit fans)”字样,

并标明本网站网址http://www.chq.name

引言:最近有个项目需要使用Kettle,但是,经过多方查找,却发现相关的资料和介绍极少,于是根据kettle的文档,费尽周折,终于完成了这篇《KETTLE JAVA API 实战记录》,为避免更多的人走弯路,现在发布出来,供大家参考。

前言:

为什么要用KettleKETTLE JAVA API

Kettle是什么?kettle是一个开源ETL工具。kettle提供了基于java的图形化界面使用很方便,kettleETL工具集合也比较多,常用的ETL工具都包含了。

为什么使用KETTLE JAVA API:就像kettle文档所说:KETTLE JAVA API : Program your own Kettle transformationkettle提供了基于JAVA的脚步编写功能可以灵活地自定义ETL过程,使自行定制、批量处理等成为可能,这才是一个程序员需要做的工作,而不仅是象使用word一样操作kettle用户界面。

KETTLE JAVA API 实战操作记录:

一、 搭建环境 :http://www.kettle.be网站下载kettle的源码包,加压缩,例如解压缩到d:kettle目录

二、 打开eclipse,新建一个项目,要使用jdk1.5.0,因为kettle的要使用System.getenv(),只有在jdk1.5.0才被支持。提起getenv(),好像有一段几起几落的记录,曾一度被抛弃,现在又被jdk1.5支持了.

三、 建一个class : TransBuilder.java,可以把d:kettle extraTransBuilder.java的内容原样拷贝到你的TransBuilder.java里。

四、 根据需要编辑源码。并需要对原程序进行如下修改,在头部增加:

import org.eclipse.swt.dnd.Transfer;

//这个包被遗漏了,原始位置kettle根目录libswtwin32swt.jar

//add by chq(www.chq.name) on 2006.07.20

(后来发现,不必加这个引用,因为编译时不需要)

五、 编译准备,在eclipse中增加jar包,主要包括(主要依据extraTransBuilder.bat):

libkettle.jar
libextCacheDB.jar
libextSQLBaseJDBC.jar
libextactivation.jar
libextdb2jcc.jar
libextdb2jcc_license_c.jar
libextedtftpj-1.4.5.jar
libextfirebirdsql-full.jar
libextfirebirdsql.jar
libextgis-shape.jar
libexthsqldb.jar
libextifxjdbc.jar
libextjavadbf.jar
libextjconn2.jar
libextjs.jar
libextjt400.jar
libextjtds-1.1.jar
libextjxl.jar
libextktable.jar
libextlog4j-1.2.8.jar
libextmail.jar
libextmysql-connector-java-3.1.7-bin.jar
libextojdbc14.jar
libextorai18n.jar
libextpg74.215.jdbc3.jar
libextedbc.jar

(
注意 :下面这个包被遗漏了,要加上。原始位置kettle根目录libswtwin32swt.jar)
libswtwin32swt.jar

六、 编译成功后,准备运行

为使程序不必登陆就可以运行,需要设置环境署文件:kettle.properties,位置在用户目录里,一般在 Documents and Settings用户.kettle,主要内容如下:

KETTLE_REPOSITORY=kettle@m80

KETTLE_USER=admin

KETTLE_PASSWORD=admin

七、 好了,现在可以运行一下了,看看数据是不是已经拷贝到目标表了。


运行时的控制台信息输出、自动生成的Transformation、修改后的程序源码:因论坛长度限制,略,详见www.chq.name--商业智能--kettle


发表了译文-“使用FitNesse进行测试先行开发”

发表人:joson | 发表时间: 2006年七月04日, 06:24

发表了译文-“使用FitNesse进行测试先行开发”

  • chq.name: http://www.chq.name/content/view/86/46/
  • Matrix:http://www.matrix.org.cn/resource/article/44/44507_FitNesse.html
  • 原文:http://www.javaworld.com/javaworld/jw-02-2006/jw-0220-fitnesse.html
 查看全文

我的网站列表my website

发表人:joson | 发表时间: 2006年五月31日, 10:35

我的网站列表my website

chq.name,junit Fans: 关注Junit,软件开发,软件测试,项目管理,网站建设,手机等,还有美食和旅游等内容.about Junit,software development,project manage,software testing,website building,BI,mobile phone,tour,food,etc.

 查看全文

oracle9i表空间传输实战

发表人:joson | 发表时间: 2006年五月31日, 10:04

oracle9i表空间传输实战


作者:陈海青(joson

日期:2006.05.30

(版权所有 陈海青, josonhttp://junit.vicp.net,转载或引用本网版权所有之内容须注明“转自(或引自)Junit fans”字样,并标明本网 网址http://junit.vicp.net。)

本文记录了作者joson利用表空间传输移动数据的过程,欢迎访问作者的网站http://junti.vicp.net)进行交流。

一、背景:

源 :操作系统:RedHAt linux 数据库:oracle9i

数据库字符集:NLS_CHARACTERSET: US7ASCII NLS_NCHAR_CHARACTERSET UTF8


目标:操作系统:红旗linux 数据库:oracle9i

数据库字符集:NLS_CHARACTERSET: US7ASCII NLS_NCHAR_CHARACTERSET AL16UTF16

二、操作过程

--1:检查要传输的表空间组是否是“自包含”的,不是的话要进行调整

exec sys.dbms_tts.transport_set_check('EGS,EGS_idx',true);
select * from sys.transport_set_violations;

--2:设置源表空间状态为“只读“
alter tablespace EGS read only;
alter tablespace EGS_idx read only;

--3:在数据库所在的主机上,导出表空间的元数据,要使用sys用户,以sysdba的角色操作
-- 导出的文件名默认为:expdat.dmp
-- exp transport_tablespace=y tablespaces=(EGS,EGS_idx)


--input :sys as sysdba
--input :password

--4:将原系统表空间的数据文件传送到目标主机:ftp_tbs.sh

ftp -inv 2>&1 <<!
open 192.168.1.2
user username userpwdbin
cd /opt/oracle/oradata/EGS/exp
lcd /opt/oracle/oradata/EGS/exp
get expdat.dmp
cd /opt/oracle/oradata/EGS
lcd /opt/oracle/oradata/EGS
mget EGS_data*
mget EGS_idx*
bye
!

--5:更改目标数据库的国家字符集(原来为AL16UTF16,应改为与EGS一致:UTF8)
SELECT name,value$ from props$ where name like '%NLS%' order by name;

---更改前
NAME VALUE$
NLS_CHARACTERSET US7ASCII
NLS_LANGUAGE AMERICAN
NLS_NCHAR_CHARACTERSET AL16UTF16
NLS_RDBMS_VERSION 9.2.0.7.0

---更改后
NAME VALUE$
NLS_CHARACTERSET US7ASCII
NLS_LANGUAGE AMERICAN
NLS_NCHAR_CHARACTERSET UTF8
NLS_RDBMS_VERSION 9.2.0.7.0

-- 更改步骤:
1)sqlplus "/as sysdba"
2)sql> shutdown immdediate
3)sql> startup mount;
4)sql> alter session set sql_trace=true;
5)sql> alter system enable restricted session;
6)sql> alter system set job_queue_processes=0;
7)sql> alter system set AQ_TM_PROCESSES=0;
8)sql> alter database open;
--以下根据需要修改
9)sql> alter database character set US7ASCII;
9)sql> alter database national character set UTF8;
10)sql>alter session set sql_trace=false;
11)sql>alter system set job_queue_processes=10; --根据需要

--6:创建相关用户(可以通过察看expdat.dmp文件了解)

CREATE USER EGS IDENTIFIED BY VALUES 'password..' DEFAULT TABLESPACE EGS
TEMPORARY TABLESPACE EGS_TMP
PROFILE DEFAULT
ACCOUNT UNLOCK

--7:在目标系统导入表空间,在目标主机执行imp.sh

imp file=expdat.dmp transport_tablespace=y
datafiles=(/opt/oracle/oradata/EGS/EGS_data02.dbf,/opt/oracle/oradata/EGS/EGS_data02.dbf,
/opt/oracle/oradata/EGS/EGS_data03.dbf,/opt/oracle/oradata/EGS/EGS_data04.dbf,
/opt/oracle/oradata/EGS/EGS_data05.dbf,/opt/oracle/oradata/EGS/EGS_data06.dbf,
/opt/oracle/oradata/EGS/EGS_idx01.dbf,/opt/oracle/oradata/EGS/EGS_idx02.dbf,
/opt/oracle/oradata/EGS/EGS_idx03.dbf)

--8:在源和目标数据库将表空间状态恢复为读写

alter tablespace EGS read write;
alter tablespace EGS_idx read write;

--------表空间传输任务完成.------

----

本文记录了作者joson利用表空间传输移动数据的过程,欢迎访问作者的网站http://junti.vicp.net)进行交流。

参考资料:itpub.net的《oracle 数据库DBA专题技术精萃》

(版权所有 陈海青, josonhttp://junit.vicp.net,转载或引用本网版权所有之内容须注明“转自(或引自)Junit fans”字样,并标明本网 网址http://junit.vicp.net。)

成功申请ITPUB BLOG

发表人:joson | 发表时间: 2006年五月31日, 09:56

BLOG的域名
http://joson.itpub.net/
BLOG的控制面板在
http://joson.itpub.net/admin.php
登陆口令就是论坛口令,BLOG的口令和论坛是捆绑的。可以在控制面板里完成发表文章,修改名称,模版以及观察统计数据等功能
全体ITPUB BLOG的内容首页在
http://weblog.itpub.net/
可以在这里了解整个ITPUB BLOG的状况,包括最新文章,BLOG列表,排名,统计数据等
怎样才可以使自己的BLOG变得知名?
只有宣传才可以使网站的访问增多,可以把您的BLOG连接写在签名档里,或者在帖子里介绍给别的会员,也可以在别的网站和现实场合进行广泛的宣传。如果您的BLOG能被搜索引擎收录,那也对增加流量有所帮助。这也许需要您到一些常用搜索引擎那里登录一下。百度的登录入口:
http://www.baidu.com/search/url_submit.html
google的登录入口
http://www.google.com/intl/zh-CN/add_url.html
登录可以帮助您的BLOG尽快被收录(否则可能要等待比较长的时间)
法律责任
ITPUB是中华人民共和国境内网站,请大家在发表言论时注意遵守中华人民共和国法律,尊重知识产权,ITPUB只提供寄存平台,任何网友的个人言论都不代表ITPUB的观点,ITPUB也不会为网友的个人行为承担法律义务和责任。

Valid XHTML 1.0 Strict and CSS. Powered by pLog
Design by Blog.lvwo.com