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工具等等。