nohup ./command.sh > output 2>&1 &
SQL迁移到ORACLE实例php
平常运维中,咱们常常会有数据库不一样类型的迁移,比较多的就是从sql server迁移到oracle 的状况,前一阶段正好有一个相似的项目进行,我将其中的一些注意事项记录下来。html
1、迁移的方案linux
以前也进行过sql -> oracle的迁移,使用过sql server的dts也单独本身写过sqlloader脚本,可是两种方案都不是很满意,dts常常出错,sqlldr的手工编辑很费劲,稍不注意就会写错。sql
此次参考了http://www.cnblogs.com/hiizsk/archive/2011/07/10/2102452.htmlshell
使用ORACLE SQL DEVELOPER进行了操做,效果不错。数据库
如下有几个须要特别注意的事情,提早说,很重要的。windows
2、实际步骤服务器
此步骤不少参考绝殇 的内容啊,版权是他的啊。我在其中补充和修正了一些内容。架构
不建议去oracle官网下载,虽然支持到oracle 12C,反正我是没用它弄好个人sql server 2008 R2到oracle 11G 的转换,能使用的人若是成功告诉我下。oracle
直接到文档最后下载提供的内容便可,注意自行安装jre6
2. 下载SQL SERVER的驱动程序
绝殇说的”点击菜单帮助,选择检查更新,弹出检查更新向导窗口”我一直没成功,我只好本身自行下载了jtds-1.2.2-dist,这个我也提供了下载。关联方式以下
启动develop -----工具-----首选项-------数据库-----第三方jdbc驱动程序,添加条目选中jtds的文件,而后重启develop便可。
基本和文档同样(不清楚脚本见http://www.cnblogs.com/hiizsk/archive/2011/07/10/2102452.html),这里多说一句,默认新建立的用户的默认表空间是user,我不建议这样,新创建一个表空间,而后创建的MIGRATONS用户的表空间使用新建的,尽可能不要影响默认表空间。
另外后面脚本执行完毕后,建立的表的默认空间也是user,这个时候导入数据前建议在新建一个表空间,将这些表移动到新表空间如newtbs。
Select 'alter table '||table_name||' move tablespace newtbs;' from user_all_tables;
3. 数据库移植向导等
彻底可按照文档执行,最后一步也是脱机便可。
(1)SqlServer中的架构到Oracle中的模式,名称的处理
这部分不用这么处理,后面我有更好的办法,跳过
(2)转移数据
从这部分后,文档语焉不详,其实这才是执行导入容易出错的地方。首先导出数据执行unload_script [server] [username] [password]
这个执行能够在本机使用cmd执行,注意看下生成的目录结构以下
导出数据能够在2014-09-28_17-02-42下执行unload_script.bat
个人项目导出10G左右大概在十几分钟便可。
接下来就是转码工做了,在上图的data目录中,选中文件使用editplus或者ultraedit就能够把文件转码到utf8格式。
(3)导入数据
把所有的文件上传到linux服务器(你的oracle不会运行在windows下吧?)
(1) 修改shell文件
修改dbo文件下的oracle_ctl.sh文件
增长
export NLS_LANG=AMERICAN_AMERICA.AL32UTF8
注意这里的值是你目的oracle的nls值,能够自行查询
若是您的文件中有相似个人超过500M的大文件,修改默认的sqlldr语句
默认:
sqlldr $1/$2 control=control/dbo_jzprod.uf_bud_payoutdetthird.ctl log=log/dbo_jzprod.uf_bud_payoutdetthird.log
在后面增长下面的语句采用平行append方式,跳过索引
direct=true parallel=true skip_index_maintenance=true
(2) 修改control文件
若是你使用了上面的direct=true的数据,那对应的control文件也须要修改,如上面的dbo_jzprod.uf_bud_payoutdetthird,control文件在control目录下,如:
load data infile 'data/dbo_jzprod.CARDCOMBINATIONDETAIL.dat' "str '<EORD>'" into table dbo_jzprod.CARDCOMBINATIONDETAIL fields terminated by '<EOFD>' trailing nullcols
须要在into 以前增长APPEND
(3) 执行
执行shell,可能你们以为很是简单,可是也须要有些注意事项
./**.sh 没问题,可是咱们须要注意,咱们须要执行dbo目录下的shell
由于默认的developer给咱们生成了不少层的sh,咱们须要执行最内层的sh
3.1:^M的问题:
咱们编辑的sh,执行会报错,vi会发现内部的每行最后存在一个^M
使用以下代码便可。
:1,$ s/^M//g
^M 输入方法: ctrl+V ,ctrl+M
3.2:后台运行
直接运行shell须要时间比较长,咱们采用nohup后台进程运行的方式
nohup ./command.sh > output 2>&1 &
注意这里回车exit一直到退出此进程,而后从新启动一个新进程
Tail –f output观测实际的进展便可。
3.3 最后导出成功后,须要重建索引而且迁移到单独的表空间,对lob字段单独表空间存储等
oracle sql developer:http://pan.baidu.com/s/1hq7oIUg
jtds:http://pan.baidu.com/s/1sjO7vop