一种SqlServer数据迁移到Oracle的方法总结

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

你可能感兴趣的:(SQLSERVER,oracle10g)