SQLServer2005部署在远程的服务器上,Oracle10g安装在本地电脑,因为数据量千万级,为了避免因网络传输带来的时间损耗,偶选择了先将数据导入到本地!
这部利用SQLServer2005中的DTS就可以了。

恩。下一步怎么做呢。。。大数据量。。还是SqlServer导入到Oracle。中。。SqlServer本身也支持直接导入到oracle中,但是因为语法的问题经常不会很顺利,哪么有没有更稳妥的方法呢? 当然有,我们用文件的方式导入导出嘛。简单的说,就是说从SqlServer导出一个文本,然后把这个文本导入到oracle中。。

恩,现在原理明白了,那我应该怎么做呢。。别急忙。。先看下这条命令。

bcp [gatecn].[dbo].[LOG] in “[gatecn].[dbo].[LOG].dat”  -t “<EOFD>” -r “<EORD>” -c -Usa -P123 -SMICROSOF-A2639E\SQLEXPRESS

我们新建一个叫DataMove的目录,然后创建一个Exp.bat的批处理文本,然后把上面那段代码写进去。其中

  • “[gatecn].[dbo].[LOG].dat” 是导出的数据文件的名称
  • -Usa -P123 -SMICROSOF-A2639E\SQLEXPRESS :-U后跟SQlSERVER的登录名,-P后是密码,-S是你的  数据库服务引擎的名称

额,文件生成了,下一步我们要导入到oracle中了。。这步麻烦点,需要几个文件,参考代码打包下载

先下载下来,然后把oracle_ctl.bat和Oracle目录中的dbo_gatecn.LOG.ctl修改一下

set NLS_DATE_FORMAT=Mon dd YYYY HH:mi:ssAM
REM set NLS_TIMESTAMP_FORMAT=Mon dd YYYY HH:mi:ffAM
REM set NLS_LANGUAGE=<insert the language of your database here e.g., US7ASCII>
sqlplus System/123 < pre_load.sql
sqlldr System/123 control=Oracle\dbo_gatecn.LOG.ctl log=dbo_gatecn.LOG.log
sqlplus System/123 < post_load.sql

红色字体标注的,System是Oracle登陆的帐户,123是密码

下面是dbo_gatecn.LOG.ctl的内容

load data
infile ‘[gatecn].[dbo].[LOG].dat’ “str ‘<EORD>’”
into table “LOG
fields terminated by ‘<EOFD>’
trailing nullcols
(
IDX ,
TS “TO_TIMESTAMP(:TS, ‘yyyy-mm-dd HH24:mi:ss.ff3′)”,
THREAD  “DECODE(:THREAD, CHR(00), ‘ ‘, :THREAD)”,
“LVL”  ,
MSG CHAR(2000) “DECODE(:MSG, CHR(00), ‘ ‘, :MSG)”,
“EXCEPTION” CHAR(2000000)

)

红色字体标注的是我们第一步生成的数据文件的名称

黄色字体标注的是Oracle的被插入数据的表

蓝色字体是这个表的字段和字段数据类型,一一对应好就可

最后一步,修改好文件之好,我们执行oracle_ctl.bat即可,你就可以看到这个界面了

Most Commented Posts