Friday, October 06, 2006

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

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

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

版权声明:转载或引用本网版权所有之内容须注明“转自(或引自)chq.name (Junit fans)”字样,并标明本网站网址http://www.chq.name
一、起因:
为搭建一个开发、测试环境,需要克隆一个现有的oracle数据库系统,于是记录了操作过程,供参照。
二、系统环境:
1)被克隆的主机(简称主机http://www.chq.name/):操作系统:redhat 企业版 REHL4.0,数据库:oracle9i
2)克隆目标主机(简称客机http://www.chq.name/):操作系统:redhat 企业版 REHL4.0
三、克隆策略的确定:有几种方法:
一)、硬盘克隆。 限制:
1)主、客机硬件配置要一致;
2)硬盘容量要一致
优点:不必进行操作系统和数据库安装
二)远程拷贝数据库程序和数据文件。
优点:不必安装数据库软件,不必恢复数据。
缺点:需要为运行数据库管理程序进行额外配置。
限制:要选择好合适的拷贝方式(rcp/rsync/cp等),才能高效易用
三)使用exp/imp或者其他数据库备份和恢复手段 优点:经典方法,安全可靠 缺点:
1)速度慢;
2)需要中间性数据存储空间
最后,考虑到效率和空间的因素,最后选择远程拷贝,使用rsync,配置简便、高效、易于管理。

四、操作步骤:
一)下载并在主客机上安装rsync软件,略。
二)编辑主客机的hosts文件,加上对方主机
# vi /etc/hosts
# Do not remove the following line, or various programs
# that require network functionality will fail.
127.0.0.1 http://www.chq.name/ localhost.localdomain localhost
192.168.17.35 http://www.chq.name/ localhost.localdomain localhost
192.168.17.22 http://www.chq.name/
三)在主机上进行配置:
1:建立并编辑编辑rsyncd配置文件[
root@www.chq.name_22 ~]# vi /etc/rsyncd.conf
uid=oracle
gid=dbause
chroot=nomax
connections=4
use chroot=no
logfile=/var/log/rsyncd.log
pid file=/var/run/rsyncd.pid
lock file=/var/run/rsyncd.lock
auth users=root
secrets file=/etc/rsyncd.pwd
[opt_oracle]
path=/opt/oracle
comment=backup oracle
ignore errors
read only=yes
list=no
auth users=root
。。。。。。
2:建立并编辑编辑rsyncd配置文件
[http://www.chq.name/_22 ~]# vi /etc/rsyncd.pwd
oracle:www.chq.name
3:启动rsync服务器,检查是否运行
[http://www.chq.name_22/ ~]# rsync --daemon[
[http://www.chq.name/_22 ~]# ps -ef grep rsyncroot
四)客户机上的操作
1:安装oracleserver的主版本
(我用的是9.2.0),不必打补丁,主要目的是通过安装来,避免进行其他设置。(由于没时间测试要如何配置,暂时使用这个简便办法)
2:列主机目录下文件
[http://www.chq.name/_35]# rsync rsync://oracle@www.chq.name_22/oradata/ Password:
3:传送文件:
[http://www.chq.name/_35]# rsync -azv rsync:oracle@www.chq.name_22/oradata /oradata
Password:
receiving file list ... donedb/db2_cx_tmp01.dbf。。。db/db2_tmp01.dbf。。。
4:设置oracle数据库
4.1)更改数据库监听器配置[http://www.chq.name/_35]# su - oracle
$ pwd/home/oracle
$ cd /opt/oracle/product/9.2.0/net*/admin[
$ vi listener.ora
4.2)更改数据库tns配置文件
# TNSNAMES.ORA Network Configuration File: /opt/oracle/product/9.2.0/network/admin/tnsnames.ora# Generated by Oracle configuration tools.
http://www.chq.name/ = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = http://www.chq.name)(port/ = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = http://www.chq.name/) ) )
http://www.chq.name/ = (DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP)(HOST = http://www.chq.name)(port/ = 1521)) ) (CONNECT_DATA = (SERVER = DEDICATED) (SERVICE_NAME = http://www.chq.name/) ) )
~ "tnsnames.ora" 101L, 1938C written
4.3)复制来创建数据库spfile配置文件[http://www.chq.name/_35]cd /opt/oracle/product/9.2.0/dbs/
$ cp spfilewww.chq.name_22.ora spfilewww.chq.name_35.ora
4.4)复制来创建数据库管理口令文件
[http://www.chq.name/_35]$ mv orapwwww.chq.name_22 orapwwww.chq.name_35
4.5)启动数据库,
[http://www.chq.name/_35]$ sqlplus "/as sysdba"SQL> startupORACLE instance started.
。。。Database mounted.Database opened.
4.6)启动监听器服务
[http://www.chq.name/_35]$ lsnrctl start

五、几点说明:
1:rsync在rehl中默认已经安装。2:要拷贝数据库管理程序目录和数据文件目录,主机与客机路径要完全一致

==================================
参考资料:
用rsync对网站进行镜像备份(文章来源:http://xfocus.org/)

Sunday, September 10, 2006

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


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


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

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


最近,为更换硬盘,参照有关资料,进行了一次FreeBSD下的硬盘数据迁移,具体情况如下:
1:起因:原有的硬盘容量小、有坏区、swap设置不合理、/var太小,所以要进行更换

2:计划:1)使用sysinstall--fdisk划分好新硬盘的slice(片段,一块硬盘分成最多四个),本次划分为2个slice,用其中的19GB用于Freebsd); 2) 使用sysinstall--label划分新硬盘的partition(分区,每一个slice上又可以分成最多8个partition):/ (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)使用sysinstall的FDISK命令把新硬盘分片,设置MBR;然后用LABEL命令分区。可以先自动分区,再对照原来的次序修改,假设原来的文件系统/dev/ad0s1g 对应/usr,那你新硬盘/dev/ad2s1g就用来做/usr,划分好后,按M分别清空所有文件系统的mount点,因为我们还没有建立临时的mount的目录,不清空会和系统原来的mount冲突的。

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)停止原系统的主要服务,如APACHE,MYSQL等,或者重启后进入单用户状态,准备复制。进入单用户模式的方法:1.重启,在启动菜单开始倒计时的时候按下空格(space)键,输入boot -s ,然后在#后输入 fsck -p mount -u / mount -a swapon -a adjkerntz -i

6)运行以下脚本,执行硬盘数据和系统的复制。要注意根据前面记录的/etc/fstab和df结果查看文件系统的对应关系,修改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)

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/root
http://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

参考资料:FreeBSD硬盘分区和数据迁移相关资料

Sunday, July 23, 2006

KETTLE JAVA API 实战记录

KETTLE JAVA API 实战记录
陈海青(www.chq.name)
2006.07.20
版权所有:陈海青(joson chen) www.chq.nameCopyright (C) 陈海青(joson chen) www.chq.name All Rights Reserved 转载或引用本网版权所有之内容须注明“转自(或引自)chq.name (Junit fans)”字样,
并标明本网站网址http://www.chq.name
引言:最近有个项目需要使用Kettle,但是,经过多方查找,却发现相关的资料和介绍极少,于是根据kettle的文档,费尽周折,终于完成了这篇《KETTLE JAVA API 实战记录》,为避免更多的人走弯路,现在发布出来,供大家参考。
引言:最近有个项目需要使用Kettle,但是,经过多方查找,却发现相关的资料和介绍极少,于是根据kettle的文档,费尽周折,终于完成了这篇《KETTLE JAVA API 实战记录》,为避免更多的人走弯路,现在发布出来,供大家参考。
前言:
为什么要用Kettle和KETTLE JAVA API?
Kettle是什么?kettle:是一个开源ETL工具。kettle提供了基于java的图形化界面,使用很方便,kettle的ETL工具集合也比较多,常用的ETL工具都包含了。
为什么使用KETTLE JAVA API:就像kettle文档所说:KETTLE JAVA API : Program your own Kettle transformation,kettle提供了基于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\ extra\TransBuilder.java的内容原样拷贝到你的TransBuilder.java里。
四、 根据需要编辑源码。并需要对原程序进行如下修改,在头部增加:
import org.eclipse.swt.dnd.Transfer;
//这个包被遗漏了,原始位置kettle根目录\libswt\win32\swt.jar
//add by chq(www.chq.name) on 2006.07.20
(后来发现,不必加这个引用,因为编译时不需要)
五、 编译准备,在eclipse中增加jar包,主要包括(主要依据extra\TransBuilder.bat):
\lib\kettle.jar\libext\CacheDB.jar\libext\SQLBaseJDBC.jar\libext\activation.jar\libext\db2jcc.jar\libext\db2jcc_license_c.jar\libext\edtftpj-1.4.5.jar\libext\firebirdsql-full.jar\libext\firebirdsql.jar\libext\gis-shape.jar\libext\hsqldb.jar\libext\ifxjdbc.jar\libext\javadbf.jar\libext\jconn2.jar\libext\js.jar\libext\jt400.jar\libext\jtds-1.1.jar\libext\jxl.jar\libext\ktable.jar\libext\log4j-1.2.8.jar\libext\mail.jar\libext\mysql-connector-java-3.1.7-bin.jar\libext\ojdbc14.jar\libext\orai18n.jar\libext\pg74.215.jdbc3.jar\libext\edbc.jar(注意 :下面这个包被遗漏了,要加上。原始位置kettle根目录\libswt\win32\swt.jar)\libswt\win32\swt.jar
六、 编译成功后,准备运行
为使程序不必登陆就可以运行,需要设置环境署文件:kettle.properties,位置在用户目录里,一般在 \Documents and Settings\用户\.kettle\,主要内容如下:
KETTLE_REPOSITORY=kettle@m80
KETTLE_USER=admin
KETTLE_PASSWORD=admin
七、 好了,现在可以运行一下了,看看数据是不是已经拷贝到目标表了。
运行时的控制台信息输出、自动生成的Transformation、修改后的程序源码:因论坛长度限制,略,详见www.chq.name--商业智能--kettle

我的网站列表欢迎各位光临

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


google上我的BLOG google上我的BLOG


百度上我的空间 我在百度上的空间


joson的博客(泡泡) joson在泡泡上的的博客。


Junit Fans 主站点


我的搜狐博客--@blog.sohu.com 我的搜狐博客--@blog.sohu.com


我的 MSN 共享空间 我的 MSN 共享空间


junit fans main website


blog on matrix.org.cn 在Matrix的Blog


junit.roxr.com mirror website


joson.itpub.net JOSON ON ITPUB BLOG