1.使用BCP命令,导出Sqlserver的数据到csv文件。我们可以把这些命令写成一个cmd命令,语句如下所示:
CLS @echo off for %%F in (.\*.sql) do ( for /f "delims=~" %%a in (%%~dfF) do ( rem echo "%%a" BCP "%%a" queryout "%%~nF.csv" -c -t, -S"ip_address" -d"database_name" -U"user_name" -P"password" @rem makecab /d compressiontype=lzx /d compressionmemory=21 "%%~nF.csv" "%%~nF.7z" @rem del "%%~nF.csv" ) rem pause ) pause
ip_address :数据库的IP地址
database_name : 数据库名称
user_name : 数据库用户名
password:数据库密码
sql语句示例如下,注意sql语句的格式,必须在同一行:
select username,userno from t_user
以上的cmd命令与上述sql文件在同一目录下,点击cmd命令,会导出SQL语句查询出的数据,格式为csv。注意必须安装sqlserver环境,上述cmd命令执行才有效,因为里面用到了bcp命令。
2.使用sqlldr命令,对应一定的ctl格式,将数据导入到oracle中。
我们同样可以将sqlldr命令写成cmd文件,如下所示:
CLS @echo off sqlldr username/password@ip:port/instancename control=t_user.ctl errors=1000 rows=1000 log=log.txt bad=err.txt pause
对应的ctl文件,如下所示:
load data infile 't_user.csv' replace into table tmp_user fields terminated by ',' OPTIONALLY ENCLOSED BY '"' TRAILING NULLCOLS (username,userno)
上述语句表示,将t_user.csv中的数据,导入到tmp_user表中,csv中的列分别对应tmp_user表中的username与userno。
注意,必须安装oracle环境,上述cmd命令才有效。
总结:以上只是提供一种思路,现实中进行跨数据库迁移,也有很多现成的工具可以使用,例如navicat或者其他etl工具等等。