您的位置:手机购彩平台 > 手机购彩软件-数据库 > 以下使用第2种方法来进行数据迁移的

以下使用第2种方法来进行数据迁移的

2019-10-17 06:17

从SQLServer导数据到Oracle大约有以下两种格局:

  1. 利用SSMS的导出数据向导,使用Microsoft ODBC for Oracle或Oracle Provider for OLE DB连接受Oracle
  2. 导出到平面文件
  3. 导出满含数据的SQL脚本。
  4. 使用ETL工具。
  5. 友善开垦软件。

以下使用第2种办法来扩充数据迁移的。

使用BCP合适导出大容积数据。这里导出千万品级的数量,也是神速就能够学有所成。

固然导出时还亟需做一些数码的拍卖,比方多表关联,字符管理等,相比较复杂的逻辑,最棒是做成存款和储蓄进程,BCP直接调用存储进度就能够。

BCP "exec TestDB.dbo.export_t1 " queryout d:exportt1.txt -c -t"||" -S"192.168.1.100" -Urpt -Prpt123
pause

USE TestDB
GO

CREATE PROC [dbo].[export_usercar]
AS
    SELECT  [carId]
           ,CONVERT(NVARCHAR(30), [addTime], 120)
           ,CONVERT(NVARCHAR(30), [lastSearchTime], 120)
           ,CONVERT(NVARCHAR(30), [updateTime], 120)
           ,[carType]
           ,[userTelephone]
           ,[isCorrect]
           ,[userId]
           ,[validFlag]
           ,[Channel]
           ,[carCode]
           ,[engineNumber]
           ,[carNumber]
    FROM    [TestDB].[dbo].[t1] WITH ( NOLOCK )
    WHERE   validFlag = 1
            AND isCorrect = 1;

把导出文件上传到Oracle所在的主机上,如CentOS下。

使用Oracle的SQL*LOADEKuga导入平面文件。假设Oracle中有一度创建好的表,与导入文本对应。

把以下的内容用vi,写到import-t1.ctl

load data
CHARACTERSET 'ZHS16GBK'
infile '/data/import/t1.txt' "str 'rn'"
into table SCOTT.T1
fields terminated by '||' TRAILING NULLCOLS
(
carId, 
addTime DATE "YYYY-MM-DD HH24:MI:SS",
lastSearchTime DATE "YYYY-MM-DD HH24:MI:SS",
updateTime DATE "YYYY-MM-DD HH24:MI:SS",
carType ,
userTelephone  ,
isCorrect  ,
userId  ,
validFlag ,
Channel ,
carCode  ,
engineNumber ,
carNumber  
)

使用SQL*LOADEPAJERO注意多少个难题:

  • 字符编码
  • 字段分隔符
  • 行终止符
  • 日子或时刻格式
  • 特殊字符
  • 导入字段的各种
  • 导文件文件的表字段类型和尺寸是或不是切合

利用sqlldr命令把多少导入到Oracle中。

sqlldr user/"user_password" control=import-t1.ctl

私下认可下,生成的日记文件在当前目录下。无论成功与否,绝对要查阅日志。看看是还是不是导入成功或停业,或是部分成功。导入的标题日常从日记文件就能够找到。

只要有荒唐,还也许会生成与导入文本同名的t1.bad文件。

以下是日记文件,展现数据导入的有的新闻。成功导入了18495032行记录,未有导入失败的笔录。

[oracle@ttoracle /data/import]$ cat import-t1.log 

SQL*Loader: Release 11.2.0.1.0 - Production on Fri Jun 15 12:46:09 2018

Copyright (c) 1982, 2009, Oracle and/or its affiliates.  All rights reserved.

Control File:   import-t1.ctl
Character Set ZHS16GBK specified for all input.

Data File:      /data/import/t1.txt
  File processing option string: "str '
'"
  Bad File:     t1.bad
  Discard File:  none specified

 (Allow all discards)

Number to load: ALL
Number to skip: 0
Errors allowed: 50
Bind array:     64 rows, maximum of 256000 bytes
Continuation:    none specified
Path used:      Conventional

Table SCOTT.T1, loaded from every logical record.
Insert option in effect for this table: INSERT
TRAILING NULLCOLS option in effect

   Column Name                  Position   Len  Term Encl Datatype
------------------------------ ---------- ----- ---- ---- ---------------------
CARID                               FIRST     *           CHARACTER            
    Terminator string : '||'
ADDTIME                              NEXT     *           DATE YYYY-MM-DD HH24:MI:SS
    Terminator string : '||'
LASTSEARCHTIME                       NEXT     *           DATE YYYY-MM-DD HH24:MI:SS
    Terminator string : '||'
UPDATETIME                           NEXT     *           DATE YYYY-MM-DD HH24:MI:SS
    Terminator string : '||'
CARTYPE                              NEXT     *           CHARACTER            
    Terminator string : '||'
USERTELEPHONE                        NEXT     *           CHARACTER            
    Terminator string : '||'
ISCORRECT                            NEXT     *           CHARACTER            
    Terminator string : '||'
USERID                               NEXT     *           CHARACTER            
    Terminator string : '||'
VALIDFLAG                            NEXT     *           CHARACTER            
    Terminator string : '||'
CHANNEL                              NEXT     *           CHARACTER            
    Terminator string : '||'
CARCODE                              NEXT     *           CHARACTER            
    Terminator string : '||'
ENGINENUMBER                         NEXT     *           CHARACTER            
    Terminator string : '||'
CARNUMBER                            NEXT     *           CHARACTER            
    Terminator string : '||'


Table SCOTT.T1:
  18495032 Rows successfully loaded.
  0 Rows not loaded due to data errors.
  0 Rows not loaded because all WHEN clauses were failed.
  0 Rows not loaded because all fields were null.


Space allocated for bind array:                 214656 bytes(64 rows)
Read   buffer bytes: 1048576

Total logical records skipped:          0
Total logical records read:      18495032
Total logical records rejected:         0
Total logical records discarded:        0

Run began on Fri Jun 15 12:46:09 2018
Run ended on Fri Jun 15 12:55:58 2018

Elapsed time was:     00:09:48.90
CPU time was:         00:03:37.62

使用平面文件迁移数据,最大麻烦是就是特殊字符,或是有垃圾堆数据。如若原数据富含与字符分隔符同样的字符,如那中间的“||”,或是有局地不可以知道的字符,如回车,换行符,等。这一个字符会造成导入时,分割字段错位,导致导入错误,数据导不全,以至导入失利。

但从导出导入的进程来讲,是最快的,平面文件能够跨不一样的数据库实行搬迁。如若数据不容忍错过,只可以通过工具来导了,但速度会相对比较慢。

本文由手机购彩平台发布于手机购彩软件-数据库,转载请注明出处:以下使用第2种方法来进行数据迁移的

关键词: