SQLServer导数据到Oracle,BCP导出导入大容量数据实践永利皇宫登录网址:

从SQLServer导数据到Oracle大致有以下两种艺术:

前言

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

SQL
SECRUISERVE奥迪Q3提供多样分裂的数额导出导入的工具,也能够编写制定SQL脚本,使用存款和储蓄进程,生成所需的数据文件,甚至能够变更包蕴SQL语句和数量的台本文件。各有利弊,以适用区别的供给。上边介绍大容积数据导出导入的利器——BCP实用工具。同时在后头也介绍BULK
INSELANDT导入大体量数据,以及BCP结合BULK
INSE昂科雷T做多少接口的执行(在SQL200玖QX562上推行)。

以下使用第二种艺术来拓展数量迁移的。

 

行使BCP合适导出大体积数据。这里导出千万级其他多寡,也是高效就能学有所成。

1. BCP的用法

只要导出时还亟需做1些数额的处理,比如多表关联,字符处理等,比较复杂的逻辑,最棒是做成存款和储蓄进度,BCP直接调用存款和储蓄进度即可。

BCP 实用工具能够在 Microsoft SQL Server
实例和用户钦命格式的数据文件间大体量复制数据。使用
BCP实用工具能够将大批量新行导入 SQL Server
表,或将表数据导入数据文件。除非与 queryout
选项壹起行使,否则使用该实用工具不必要理解 Transact-SQL
知识。BCP既能够在CMD提醒符下运转,也得以在SSMS下执行。

BCP "exec TestDB.dbo.export_t1 " queryout d:\export\t1.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;

永利皇宫登录网址 1

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

figure-1

使用Oracle的SQL*LOADE索罗德导入平面文件。假如Oracle中有曾经创制好的表,与导入文本对应。

 

把以下的剧情用vi,写到import-t壹.ctl

语法:

load data
CHARACTERSET 'ZHS16GBK'
infile '/data/import/t1.txt' "str '\r\n'"
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  
)
bcp {[[database_name.][schema].]{table_name | view_name} | "query"}
    {in | out | queryout | format} data_file
    [-mmax_errors] [-fformat_file] [-x] [-eerr_file]
    [-Ffirst_row] [-Llast_row] [-bbatch_size]
    [-ddatabase_name] [-n] [-c] [-N] [-w] [-V (70 | 80 | 90 )] 
    [-q] [-C { ACP | OEM | RAW | code_page } ] [-tfield_term] 
    [-rrow_term] [-iinput_file] [-ooutput_file] [-apacket_size]
    [-S [server_name[\instance_name]]] [-Ulogin_id] [-Ppassword]
    [-T] [-v] [-R] [-k] [-E] [-h"hint [,...n]"]

 

使用SQL*LOADE汉兰达注意多少个难题:

 

  • 字符编码
  • 字段分隔符
  • 行终止符
  • 日子或时刻格式
  • 特殊字符
  • 导入字段的依次
  • 导文件文件的表字段类型和长度是不是得当

总结的导出例子壹:

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

永利皇宫登录网址 2

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

figure-2

暗中同意下,生成的日志文件在当前目录下。无论成功与否,一定要查阅日志。看看是否导入成功或破产,或是部分成功。导入的题材一般从日记文件即可找到。

 

设若有错误,还会转移与导入文本同名的t1.bad文件。

不难的导出例子二:

以下是日记文件,突显数据导入的部分音讯。成功导入了1849503二行记录,未有导入退步的笔录。

永利皇宫登录网址 3

[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

figure-3

动用平面文件迁移数据,最大麻烦是正是特殊字符,或是有垃圾堆数据。假使原数据包括与字符分隔符相同的字符,如那中间的“||”,或是有壹对不可知的字符,如回车,换行符,等。那么些字符会造成导入时,分割字段错位,导致导入错误,数据导不全,甚至导入战败。

 

但从导出导入的速度来说,是最快的,平面文件能够跨差别的数据库实行搬迁。假设数额不容忍丢失,只可以通过工具来导了,但速度会相对较慢。

在SSMS上还要也可以实施:

EXEC [master]..xp_cmdshell
'BCP TestDB_2005.dbo.T1 out E:\T1_02.txt -c -T'
GO

code-1

 

永利皇宫登录网址 4

figure-4

 

 

EXEC [master]..xp_cmdshell
'BCP "SELECT * FROM TestDB_2005.dbo.T1" queryout E:\T1_03.txt -c -T'
GO

code-2

 

 

永利皇宫登录网址 5

figure-5

 

从个体来讲,小编更爱好使用第二种跟queryout分选壹起使用的写法,因为那样能够进一步灵活决定要导出的多少。固然进行BCP命令蒙受这么的荒谬提醒:

Msg 15281, Level 16, State 1, Procedure xp_cmdshell, Line 1
SQL Server blocked access to procedure ‘sys.xp_cmdshell’ of component ‘xp_cmdshell’ because this component is turned off as part of the security configuration for this server. A system administrator can enable the use of ‘xp_cmdshell’ by using sp_configure. For more information about enabling ‘xp_cmdshell’, see "Surface Area Configuration" in SQL Server Books Online.

基于安全的设想,系统暗中同意未有打开xp_cmdshell选项。使用上面语句开启此选项。

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

EXEC sp_configure 'xp_cmdshell', 1
RECONFIGURE
GO

code-3

 

选拔完事后,能够把sp_cmdshell关闭。

EXEC sp_configure 'show advanced options', 1
RECONFIGURE
GO

EXEC sp_configure 'xp_cmdshell', 0
RECONFIGURE
GO

code-4

 

BCP导入数据

修改figure-第22中学的out为in即可,把数量导入。

永利皇宫登录网址 6

figure-6

 

永利皇宫登录网址 7

figure-7

 

动用BULK INSE汉兰达T导入数据

BULK INSERT dbo.T1 FROM 'E:\T1.txt'
WITH (
    FIELDTERMINATOR = '\t',
    ROWTERMINATOR = '\n'    
)

code-5

 

永利皇宫登录网址 8

figure-8

 

有关BULK
INSEEscortT更详尽的声明,参考:

比较BCP的导入,BULK INSE福特ExplorerT提供更加灵敏的选项。

 

BCP多少个常用的参数表达:

database_name 指定的表或视图所在数据库的名称。如果未指定,则使用用户的默认数据库。
in | out| queryout | format
  • in 从文件复制到数据库表或视图。

  • out 从数据库表或视图复制到文件。如果指定了现有文件,则该文件将被覆盖。提取数据时,请注意 bcp 实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。

  • queryout 从查询中复制,仅当从查询大容量复制数据时才必须指定此选项。

  • format 根据指定的选项(-n-c-w-N)以及表或视图的分隔符创建格式化文件。大容量复制数据时,bcp 命令可以引用一个格式化文件,从而避免以交互方式重复输入格式信息。format 选项要求指定 -f 选项;创建 XML 格式化文件时还需要指定 -x 选项。

    in 从文件复制到数据库表或视图。
    out 从数据库表或视图复制到文件。如果指定了现有文件,则该文件将被覆盖。提取数据时,请注意 bcp 实用工具将空字符串表示为 null,而将 null 字符串表示为空字符串。
    queryout 从查询中复制,仅当从查询大容量复制数据时才必须指定此选项。

-c 使用字符数据类型执行该操作。此选项不提示输入每个字段;它使用 char 作为存储类型,不带前缀;使用 \t(制表符)作为字段分隔符,使用 \r\n(换行符)作为行终止符。
-w 使用 Unicode 字符执行大容量复制操作。此选项不提示输入每个字段;它使用 nchar 作为存储类型,不带前缀;使用 \t(制表符)作为字段分隔符,使用 \n(换行符)作为行终止符。
-tfield_term 指定字段终止符。默认值为 \t(制表符)。使用此参数可以替代默认字段终止符。
-rrow_term 指定行终止符。默认值为 \n(换行符)。使用此参数可替代默认行终止符。
-Sserver_name[ \instance_name] 指定要连接的 SQL Server 实例。如果未指定服务器,则 bcp 实用工具将连接到本地计算机上的默认 SQL Server 实例。如果从网络或本地命名实例上的远程计算机中运行 bcp 命令,则必须使用此选项。若要连接到服务器上的 SQL Server 默认实例,请仅指定 server_name。若要连接到 SQL Server 的命名实例,请指定 server_name\instance_name。
-Ulogin_id 指定用于连接到 SQL Server 的登录 ID。
-Ppassword 指定登录 ID 的密码。如果未使用此选项,bcp 命令将提示输入密码。如果在命令提示符的末尾使用此选项,但不提供密码,则 bcp 将使用默认密码 (NULL)。
-T 指定 bcp 实用工具通过使用集成安全性的可信连接连接到 SQL Server。不需要网络用户的安全凭据、login_id 和 password。如果未指定 –T,则需要指定 –U–P 才能成功登录。

更详细的参数,请参考:

 

 

 

2. 实践

网站地图xml地图