数据迁移:从MySQL到Oracle
要将bbs从sohu迁移回家,第一关便是在sohu服务器上积累了一年半的成果:16782篇帖子(截至2004-12-16 02:30),虽然有保存价值的并不多,但是因为要尊重大家的支持,早就决定,必全部迁回。
问题是:在sohu服务器上的bbs数据存放在Mysql 3.23.41中,而校内数据库服务器使用的是Oracle 8.1.7(Oracle 8i)。在sohu跑的是Apache+php,而目标服务器是JBoss+Oracle。
第一步:将sohu上的数据库打包,sohu提供了phpMyAdmin 2.2,利用它,选中所有数据表,选择结构+数据,以及所有Insert,便导成一个大文件了:bbs.sql。这个文件有22Mb, 好在凌晨2:30速度快,100kb/s以上。
第二步,内网有一台机器几年前装了Mysql 3.23.43,和sohu的版本正好相配。
先建立数据库。
Mysql> create database bbs;
再,导入本地的Mysql。
mysqldump bbs < bbs.sql
好,非常勇猛,22Mb的数据库,不到2分钟就搞定了,测试正常。
第三步:将最重要的数据表Message从192.168.0.7 的Mysql 3.23.43 导入到192.168.0.6的Oracle 8i,这是最关键的一步。记录有16782条,数据量12Mb.
在192.168.0.5机器上,跑jboss,运行dumpMsg.jsp。
这个程序先用数据库连接池从192.168.0.7的Mysql读出Message的记录,在while循环中,通过Hibernate同192.168.0.6的Oracle建立连接,将文章标题与内容用zdu包进行过滤,将记录插入到oracle中。
4月份,第一次导库失败,主要原因就是数据没有过滤,因为2003.5用php写bbs的时候,非常奇怪的采用了插入数据不过滤,显示时才过滤的方式。但是,也未能搞定Oracle的Clob字段的读写问题,也未考虑到过滤问题,因为单是单引号的存在,就会使得数据插入失败。
第一次执行了1000条,成功,第二次执行了5000条也成功,第三、四次6000条,化了20分钟左右的时间,因为开发服务器采用了trace级别的log模式,导了12Mb记录,日志文件居然到达400Mb之巨。如果降低log级别,肯定要快不少。
第四步, 对以Integer内容为主的数据表,如forum,thread之类,
用 sed 's/thread /thread (threadid, .... ) /gw t2.sql ' t.sql > t2.sql,简单地补全 insert语句,
再, SqlPlus > @ /sql/t2.sql, 就搞定了。

第五步,还有一个Message的附表,记录有2.4万条,但大小只有2Mb不到,
简单地修改dumpMsg.jsp为 dumMsg2.jsp,这次让它一次执行完毕。
结果成功了,但化了整整20分钟,这应该是目前为止,我写执行时间最长的的b/s脚本。

hofman   2004-12-18 02:22:48 评论:1   阅读:3145   引用:0
袛芯斜褉芯械 写械薪褜! @2008-11-19 22:35:04  Igroktectonick
袩褉懈胁械褌 胁褋械屑!, 褝褌芯 谢褍褔褕懈泄 褎芯褉褍屑, <a href=http://online-histology.ru/>:)</a> 斜褍写褍 锌芯褋械褖邪褌褜 械谐芯 泻邪卸写褘泄 写械薪褜!

发表评论>>

署名发表(评论可管理,不必输入下面的姓名)

姓名:

主题:

内容: 最少15个,最长1000个字符

验证码: (如不清楚,请刷新)

2003-2007@copyright