1010cc时时彩标准版 > 1010cc三分网站 > SQLServer导数据到Oracle,BCP导出导入大容量数据实

原标题:SQLServer导数据到Oracle,BCP导出导入大容量数据实

浏览次数:54 时间:2019-09-23

从SQLServer导数据到Oracle大约有以下两种办法:

前言

外界表概述

外表表只能在Oracle 9i之后来利用。轻松地说,外界表,是指官样文章于数据库中的表。通过向Oracle提供描述外界表的元数据,大家得以把三个操作系统文件正是三个只读的多少库表,就疑似这个数量存储在二个家常便饭数据库表中同样来扩充访谈。外界表是对数码库表的拉开。

工作中有段时间平日提到到分化版本的数据库间导出导入数据的难点,索性整理一下,并简短比较下质量,有所遗漏的方法也应接商讨、补充。

本文转自:

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

SQL SE安德拉VELacrosse提供二种不一样的多寡导出导入的工具,也足以编写SQL脚本,使用存储进程,生成所需的数据文件,以致足以扭转满含SQL语句和数据的剧本文件。各有利害,以适用分歧的须求。下边介绍大体量数据导出导入的利器——BCP实用工具。同临时间在前边也介绍BULK INSERT导入大体量数据,以及BCP结合BULK INSERT做多少接口的施行(在SQL二〇〇八冠道2上进行)。

表面表的性子 

座落文件系统之中,按一定格式分割,如文本文件或许其他品种的表能够当作外界表。
对外界表的探望能够经过SQL语句来落成,而无需先将表面表中的多寡装载进数据库中。
外表数据表都以只读的,因而在外界表不可见实行DML操作,也不能够创设索引。
ANALYZE语句不协助收罗外界表的总括数据,应该选拔DMBS_STATS包来收罗外界表的总括数据。

00.创设测验情况

bcp 实用工具能够在 Microsoft SQL Server 实例和客户钦赐格式的数据文件间大容积复制数据。  使用 bcp 实用工具可以将多量新行导入 SQL Server 表,或将表数据导出到数据文件。 除非与 queryout 选项联合行使,不然使用该实用工具不要求理解 Transact-SQL 知识。 若要将数据导入表中,必需采纳为该表创建的格式文件,可能必需了消肿的协会以及对于该表中的列有效的数据类型。

以下使用第2种艺术来扩充数量迁移的。

 

创立外部表的注目事项 

01.使用SQL Server Import and Export Tool

BCP的兼具参数:

行使BCP合适导出大体量数据。这里导出千万品级的数额,也是快捷就能够不负职分。

1. BCP的用法

1.内需先创建目录对象

在创造指标的时候,需求小心,Oracle数据库系统不会去确认那个目录是不是确实存在。要是在输入那个目录对象的时候,比十分的大心把渠道写错了,那恐怕那几个外界表依旧能够常常建构,不过却不能够查询到数码。由于建设构造目录对象时,缺乏这种本身反省的体制,为此在将路线赋予给这么些目录对象时,需求特地的专心。别的需求小心的是路线的轻重写。在Windows操作系统中,其路线是不区分轻重缓急写的。而在Linux操作系统,这些路子要求区分轻重缓急写。故在分裂的操作系统 中,创立目录对象时需求小心那个尺寸写的差距

02.使用Generate Scripts

1010cc时时彩标准版 1

一旦导出时还须求做一些多少的拍卖,例如多表关联,字符管理等,相比复杂的逻辑,最棒是做成存储进度,BCP直接调用存款和储蓄进程就可以。

BCP 实用工具能够在 Microsoft SQL Server 实例和客商钦赐格式的数据文件间大容积复制数据。使用 BCP实用工具能够将大气新行导入 SQL Server 表,或将表数据导入数据文件。除非与 queryout 选项一同使用,否则使用该实用工具不必要理解 Transact-SQL 知识。BCP不只能够在CMD提示符下运维,也足以在SSMS下实践。

2.对此操作系统文件的渴求

创造外界表时,必需钦赐操作系统文件所运用的相间符号。何况该分隔符有且独有两个。成立外部表时,不能够含有题目列。假若那些标题音讯与表面表的字段类型不雷同(如字段内容是number数据类型,而标题音讯则是字符型数据,则在查询时就能够出错)。假使数据类型恰巧一致的话,这个标题音讯Oracle数据库也会作为普通记录来看待。

当Oracle数据库系统访问这几个操作系统文件的时候,会在这一个文件所在的目录自动创造贰个日志文件。无论最终是不是访问成功,这几个日志文件都会准时创设。查看这一个日志文件,能够通晓数据库访谈外界表的功效、是还是不是中标访谈等等。私下认可情形下,该日志在与表面表的同等directory下发生。

03.使用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;

1010cc时时彩标准版 2

3.在确立有的时候表时的连带范围

对表中字段的称号存在特殊字符的气象下,必得运用印度语印尼语状态的下的双引号将该表列名称连接起来。如选择”SalseID#”。
对于列名字中特殊符号未接纳双引号括起来时,会招致敬谢不敏平常查询数据。
提议不用采取特别的列标题字符
在开立外界表的时候,并不曾经在数据库中创设表,也不会为外界表分配任何的仓库储存空间。
开创外界表只是在数量字典中创制了表面表的元数据,以便对应访谈外界表中的数额,而不在数据库中蕴藏外部表的数额。
简短地说,数据仓库储存款和储蓄的只是与外表文件的一种对应涉及,如字段与字段的附和关系。而尚未存款和储蓄实际的数额。
鉴于存储实际多少,故不能为外界表创设索引,同失常候在数据选取DML时也不辅助对外界表的插入、更新、删除等操作。

04.使用SqlBulkCopy

BCP可以实践的4种操作

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

figure-1

4.剔除却界表或然目录对象

相似情形下,先删除却部表,然后再删除目录对象,尽管目录对象中有三个表,应除去全体表之后再删除目录对象。
只要在未删减外部表的情形下,强制删除了目录,在询问到被删除的外界表时,将接收"对象不设有"的错误信息。
查询dba_external_locations来收获当前具备的目录对象以及相关的外界表,同期会付给这么些外部表所对应的操作系统文件的名字。 假使只是在数据库层面上删除此而外界表,并不会自行删除操作系统上的表面表文件。

05.使用Linked Server进行数量迁移

(1) 导入 这几个动作使用in命令完毕,前边跟须要导入的文书名。 (2) 导出 那一个动作使用out命令完结,前边跟须求导出的文件名。 (3) 使用SQL语句导出 那么些动作使用queryout命令完成,它跟out类似,只是数据源不是表或视图名,而是SQL语句。 (4) 导出格式文件 这一个动作使用format命令达成,后而跟格式文件名。

使用Oracle的SQL*LOADEPRADO导入平面文件。若是Oracle中有曾经成立好的表,与导入文本对应。

 

 5.对于操作系统平台的范围

分化的操作系统对于外界表有两样的演讲和显示形式
如在Linux操作系统中开创的文书是分号分隔且每行一条记下,但该文件在Windows操作系统上开荒则并不是那样。
提出制止分化操作系统以及不一致字符集所拉动的熏陶

06.使用RedGate的SQL Data Compare

常用操作:

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

语法:

创设外界表 

利用CREATE TABLE语句的O奥德赛GANIZATION EXTENERAL子句来创建外界表。外界表不分配任何盘区,因为唯有是在数量字典中开创元数据。

07.结出相比较

  1. BCP 可信赖任连接到本地表导出:
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  
)
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]"]

 

1.外界表的创设语法

createtabletable_name
           (col1 datatype1,col2 datatype2,col3 datatype3)
            organization exteneral
           (.....)
详见语法可参见小编的另两篇文章

Oracle外部表ORACLE_DATAPUMP类型的创设语法详解:

Oracle外部表ORACLE_LOADERAV4类型的始建语法详解:

能够先看下测量检验的结果

1010cc时时彩标准版 3

使用SQL*LOADE福睿斯注意多少个难题:

 

2.由询问结果集,使用Oracle_datapump来填充数据来扭转外界表

1010cc时时彩标准版 4 

用windows认证登入并把text.dbo.name的表导出到D盘的 t_001.txt

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

简言之的导出例子1:

a.创制系统目录以及Oracle数据目录名来创建对应涉及,同有时候给予权限

$ mkdir -p /home/oracle/external_tb/data

create or replace directory data_dir as '/home/oracle/external_tb/data/';
grant read,write on directory data_dir to scott;

 

  1. BCP 可信赖任连接到导出查询

选择sqlldr命令把多少导入到Oracle中。

1010cc时时彩标准版 5

b.创制外部表

create table ex_tb1
            (ename,job,sal,dname)
            organization external
            (type oracle_datapump default directory data_dir location('ex_tb1'))
            parallel 1
            as select ename,job,sal,dname from emp join dept on emp.deptno=dept.deptno;

 

1010cc时时彩标准版 6

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

figure-2

c.验证外界表

select * from ex_tb1;

ENAME                       JOB           SAL  DNAME
------------------------- -------------------- ---- -------------------------
CLARK                  MANAGER              2450 ACCOUNTING
KING                     PRESIDENT             5000 ACCOUNTING
MILLER                   CLERK                 1300 ACCOUNTING
JONES                    MANAGER               2975 RESEARCH
FORD                     ANALYST               3000 RESEARCH
ADAMS                    CLERK                 1100 RESEARCH
SMITH                    CLERK                  800 RESEARCH
SCOTT                    ANALYST               3000 RESEARCH
WARD                     SALESMAN              1250 SALES
TURNER                   SALESMAN              1500 SALES
ALLEN                    SALESMAN              1600 SALES
JAMES                    CLERK                  950 SALES
BLAKE                    MANAGER               2850 SALES
MARTIN                   SALESMAN              1250 SALES

14 rows selected.

对此使用上述措施开创的外界表能够将其复制到其余路径作为外界表的固有数据来生成新的外表表,用于转移数据。

00.赤手空拳测量试验意况

创建一个测量试验的景况,一个数据源数据库,版本为SQL Server 二零零六,八个指标数据库,版本为SQL Server 两千。

尝试情况如下图所示,源数据库使用语句生成了100万的测验数据。

1010cc时时彩标准版 7

 

1010cc时时彩标准版 81010cc时时彩标准版,创制测量检验表并扭转100万的测量试验数据1010cc时时彩标准版 9

  IF OBJECT_ID('DEMOTABLE') IS NOT NULL 
      DROP TABLE DEMOTABLE
  GO
  CREATE TABLE DEMOTABLE
      (
        COL1 VARCHAR(50) ,
        COL2 VARCHAR(50) ,
        COL3 VARCHAR(50)
      )
  INSERT  INTO DEMOTABLE
         SELECT TOP 1000000
                 NEWID() ,
                 NEWID() ,
                 NEWID()
         FROM    MASTER..SPT_VALUES T1
                 INNER JOIN MASTER..SPT_VALUES T2 ON 1 = 1
                 INNER JOIN MASTER..SPT_VALUES T3 ON 1 = 1

 

  1. BCP 可靠任连接连到远程服务器导出查询

暗许下,生成的日志文件在当前目录下。无论成功与否,必须要翻开日志。看看是否导入成功或失利,或是部分成功。导入的主题材料一般从日记文件就可以找到。

 

d.将表面表文件复制二个新的文件名,用以模拟到其余服务器上

$ cp /home/oracle/external_tb/data/ex_tb1 /home/oracle/external_tb/data/in_tb1

 01.使用SQL Server Import and Export Tool

选择SQL Server Import and Export Tool举办数量的导出,也能够在对象数据库端使用Import进行导入,那有个别套件也是SSIS的一部分。

在源数据库上右键,选取Task -> Export Data

1010cc时时彩标准版 10

分别填写源数据库和对象数据库的连天音信。

1010cc时时彩标准版 11

 

1010cc时时彩标准版 12

 

选择“copy data from one or more tables or views”

慎选须求导数据的表,况且能够编写制定列的Mapping关系。

1010cc时时彩标准版 13

能够选拔及时实施只怕存储为SSIS的包,用于实施安插等任何用途。

这边大家挑选立即实行。

1010cc时时彩标准版 14

注意导入的时候假若遇到如下的不当

Error 0xc02020f4: Data Flow Task: The column "Tel" cannot be processed because more than one code page (936 and 1252) are specified for it.
(SQL Server Import and Export Wizard)

是因为两侧的数据库的Collation设置分化等导致的,须要设置同一的Collation。

  • 用时约1分30秒

1010cc时时彩标准版 15

假定有不当,还或者会转移与导入文本同名的t1.bad文件。

简言之的导出例子2:

e. 新建表,将上述外界表的数目导入到新表中

create table in_tb1
            (ename varchar2(10),job varchar2(9),sal number(7,2),dname varchar(14))
            organization external
            (type oracle_datapump default directory data_dir location('in_tb1'));

02.使用Generate Scripts生成脚本

在源数据库上右键,选拔Task -> Geneate Scripts...

1010cc时时彩标准版 16

布置相关音讯,注意选取数据库的版本并将Script Data设置成True。

1010cc时时彩标准版 17

此间须求留心,因为有100万的数据,所以导出的SQL文件就有400多M,所以用SQL Server Management Studio是打不开的。

之所以不得不动用sqlcmd实行。

1010cc时时彩标准版 18sqlcmd语句 

C:>sqlcmd -i export.sql -d ExportDataDemo_Destination -s 192.168.21.165 -U sa -P 1234567890

用时约28分钟

 

也得以使用下面包车型客车T-SQL命令:

以下是日记文件,展现数据导入的片段消息。成功导入了18495032行记录,未有导入败北的笔录。

1010cc时时彩标准版 19

f.验证新外界表的数据

select * from in_tb1;

ENAME                       JOB           SAL  DNAME
------------------------- -------------------- ---- -------------------------
CLARK                  MANAGER              2450 ACCOUNTING
KING                     PRESIDENT             5000 ACCOUNTING
MILLER                   CLERK                 1300 ACCOUNTING
JONES                    MANAGER               2975 RESEARCH
FORD                     ANALYST               3000 RESEARCH
ADAMS                    CLERK                 1100 RESEARCH
SMITH                    CLERK                  800 RESEARCH
SCOTT                    ANALYST               3000 RESEARCH
WARD                     SALESMAN              1250 SALES
TURNER                   SALESMAN              1500 SALES
ALLEN                    SALESMAN              1600 SALES
JAMES                    CLERK                  950 SALES
BLAKE                    MANAGER               2850 SALES
MARTIN                   SALESMAN              1250 SALES

14 rows selected.

 03.使用BCP实行导出导入

在尝试了方今多少个功用低下的工具之后,大家终于开端尝试下SQL Server中等专门的学业高校门用来导数据的工具:BCP。

有关BCP的详实用法可以参见MSDN的鼎力相助文书档案。

小编们先选择BCP导出多少。

1010cc时时彩标准版 20

-U和-P前边分别为数据库的客商名和密码。

1010cc时时彩标准版 21

大家能够看看100万的多寡导出仅用了1.8秒。

当今大家再选择BCP实行导入。

1010cc时时彩标准版 22

进行后意识,导入数据运用了20.8秒,照旧非常的慢的。

1010cc时时彩标准版 23

  • 用时1.872秒 20.810秒=22.682秒
  •  
EXEC master..xp_cmdshell 'BCP  test.dbo.name out d:t_002.txt -c -t -T'

EXEC master..xp_cmdshell 'BCP  "select  name from test.dbo.name" queryout d:t_004.txt -c -t -T'

EXEC master..xp_cmdshell 'BCP tran_test.dbo.uptrans out d:t_006.txt -c -t -S HOUYAJUNJHIDCDBS005 -T'
[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

g.创制健康的表,将表面表数据导入,那正是利用ORACLE_DATAPUMP类型的额外部表完毕数量迁移

create table tb1 as select * from in_tb1;

 04.使用SqlBulkCopy

.NET Framework 2.0中加进的SqlBulkCopy类能够张开迅速的数码迁移动作,那也为代码实现数量迁移提供了接口。

相同的时间SqlBulkCopy类提供了修改字段Mapping关系的秘技ColumnMappings。

1010cc时时彩标准版 241010cc时时彩标准版 25 使用SqlBulkCopy类实行数量迁移

  using System;
  using System.Data;
  using System.Data.SqlClient;

  namespace BulkInsert
  {
      static class Program
      {
          static void Main()
         {
             DateTime dateTimeStart = DateTime.Now;
             Console.WriteLine("Start Insert:"   dateTimeStart.ToString("HH:mm:ss fff"));
             //导入导出的数据库连接
             SqlConnection connectionDestination = new SqlConnection("Server =.; User ID=datascan; Password=DTSbsd7188228; Initial CataLog=ExportDataDemo_Destination;");
             SqlConnection connectionSource = new SqlConnection("Server =.; User ID=datascan; Password=DTSbsd7188228; Initial CataLog=ExportDataDemo_Source;");

             //实例化一个SqlBulkCopy
             var bulker = new SqlBulkCopy(connectionDestination) { DestinationTableName = "DEMOTABLE", BulkCopyTimeout = 600 };

             //获取源数据库的数据
             SqlCommand sqlcmd = new SqlCommand("SELECT * FROM DEMOTABLE", connectionSource);
             SqlDataAdapter sqlDataAdapter = new SqlDataAdapter(sqlcmd);
             DataTable dataTableSource = new DataTable();
             sqlDataAdapter.Fill(dataTableSource);

             //可以重新定义字段的Mapping关系
             //SqlBulkCopyColumnMapping sqlBulkCopyColumnMapping = new SqlBulkCopyColumnMapping("COL1", "NEW_COL1");
             //bulker.ColumnMappings.Add(sqlBulkCopyColumnMapping);
             connectionDestination.Open();
             bulker.WriteToServer(dataTableSource);
             bulker.Close();
             DateTime dateTimeEnd = DateTime.Now;
             Console.WriteLine("Insert Ending:"   dateTimeEnd.ToString("HH:mm:ss fff"));
         }
     }
 }

执行后

1010cc时时彩标准版 26

  • 用时14.8秒

 

在实施上述命令的时候只怕会报错 : 错误提醒:音信 15281,等级 16,状态 1,进度 xp_cmdshell,第 1 行

选择平面文件迁移数据,最大麻烦是便是特殊字符,或是有垃圾堆数据。如若原数据包涵与字符分隔符一样的字符,如这里面包车型客车“||”,或是有局地不可知的字符,如回车,换行符,等。那个字符会形成导入时,分割字段错位,导致导入错误,数据导不全,以致导入战败。

 

3.选取外界文件数量,使用oracle_loader来填充数据来变化外界表

05.利用Linked Server进行数据迁移

先在源数据库上对目的数据库创设Linked Server,只怕反过来也行。 

1010cc时时彩标准版 271010cc时时彩标准版 28建立Linked Server

 EXEC sp_addlinkedserver @server = 'LinkedServerToDemo',
     @srvproduct = 'Export Data Testing', @provider = 'MSDASQL',
     @provstr = 'DRIVER={SQL Server};SERVER=192.168.21.165;UID=sa;PWD=password;'

1010cc时时彩标准版 291010cc时时彩标准版 30是用INSERT INTO...SELECT...进行导入

  DECLARE @begin_date DATETIME
  DECLARE @end_date DATETIME
  SELECT  @begin_date = GETDATE()

  INSERT  INTO LinkedServerToDemo.ExportDataDemo_Destination.dbo.DEMOTABLE
          SELECT  *
          FROM    ExportDataDemo_Source.dbo.DEMOTABLE

  SELECT  @end_date = GETDATE()
 SELECT  DATEDIFF(ms, @begin_date, @end_date) AS '用时/毫秒' 

实践用时

1010cc时时彩标准版 31

  • 用时7.97分钟

 

SQL Server 阻止了对组件 'xp_cmdshell' 的 过程 'sys.xp_cmdshell' 的拜会,因为此组件已作为此服务器安全配置的一部分而被关闭。系统助理馆员能够由此选取sp_configure 启用 'xp_cmdshell'。有关启用 'xp_cmdshell' 的详细消息,请参阅 SQL Server 联机丛书中的 "外围应用配置器"。

但从导出导入的进度来说,是最快的,平面文件能够跨分裂的数据库进行搬迁。假使数额不容忍错过,只好通过工具来导了,但速度会相对一点也不快。

在SSMS上同不经常候也足以实行:

 a.准备外界数据源文件

cat /home/oracle/external_tb/data/1.txt
"7369","SMITH","CLERK","7902","17-DEC-80","100","0","20"
"7499","ALLEN","SALESMAN","7698","20-FEB-81","250","0","30"
"7521","WARD","SALESMAN","7698","22-FEB-81","450","0","30"
"7566","JONES","MANAGER","7839","02-APR-81","1150","0","20"

$ cat /home/oracle/external_tb/data/2.txt
"7654","MARTIN","SALESMAN","7698","28-SEP-81","1250","0","30"
"7698","BLAKE","MANAGER","7839","01-MAY-81","1550","0","30"
"7934","MILLER","CLERK","7782","23-JAN-82","3500","0","10"

06.应用RedGate的SQL Data Compare实行多少迁移

其三方的工具,有数据库结构比较的工具SQL Compare和数量相比较工具SQL Data Compare。

1010cc时时彩标准版 32

执行

1010cc时时彩标准版 33

因为也是生成INSERT的SQL推行的,所以就不做过多比较了,下面已经测量检验过了。

 

 

本条时候须求我们来开启 :

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

b.创建外界表

create table emp_new(
                    emp_id number(4),
                    ename varchar2(15),
                    job varchar2(12),
                    mgr_id number(4),
                    hiredate date,
                    salary number(8),
                    comm number(8),
                    dept_id number(2)
                    )
            organization external
                    (
                    type oracle_loader
                    default directory data_dir
                    access parameters(
                                    records delimited by newline
                                    badfile 'emp_new%a_%p.bad'
                                    logfile 'emp_new%a_%p.log'
                                    fields terminated by ','
                                    optionally enclosed by '"'
                                    lrtrim missing field values are null
                                    reject rows with all null fields
                                    )
                    location ('1.txt','2.txt')
)
parallel 
reject limit unlimited;

07.结出相比较

因为此地质衡量试的意况有互连网和表结构的例外意况,无法申明具备意况下效果的异样,不过也可视作参照他事他说加以考察之用。

上面给出比较结实。

 1010cc时时彩标准版 34

1010cc时时彩标准版 35;)

code-1

c.验证外界表

select * from emp_new;

EMP_ID ENAME      JOB              MGR_ID    HIREDATE            SALARY     COMM       DEPT_ID
------ ---------- --------------- ---------- ------------------- ---------- ---------- ----------
  7654 MARTIN     SALESMAN        7698       1981-09-28 00:00:00 1250       0           30
  7698 BLAKE      MANAGER         7839       1981-05-01 00:00:00 1550       0           30
  7934 MILLER     CLERK           7782       1982-01-23 00:00:00 3500       0           10
  7369 SMITH      CLERK           7902       1980-12-17 00:00:00 100        0           20
  7499 ALLEN      SALESMAN        7698       1981-02-20 00:00:00 250        0           30
  7521 WARD       SALESMAN        7698       1981-02-22 00:00:00 450        0           30
  7566 JONES      MANAGER         7839       1981-04-02 00:00:00 1150       0           20

7 rows selected.
-- 允许配置高级选项  
EXEC master.sys.sp_configure 'show advanced options', 1  
-- 重新配置  
RECONFIGURE  
-- 启用xp_cmdshell  
EXEC master.sys.sp_configure 'xp_cmdshell', 1  
--重新配置  
RECONFIGURE  

 

 4.外界表相关视图

1010cc时时彩标准版 36;)

1010cc时时彩标准版 37

a.查看外表表音信

select TABLE_NAME,TYPE_NAME,DEFAULT_DIRECTORY_NAME,REJECT_LIMIT,ACCESS_PARAMETERS from user_external_tables;

 

用完事后再把其关闭,关闭只需求把 1 变为 0 就可以。 上边的话语也得以由此输入客户名和密码的花样出来,如下例句:

figure-4

b.拿到平面文件的岗位

select * from user_external_locations order by table_name;

TABLE_NAME LOCATION   DIRECTORY DIRECTORY_NAME
---------- ---------- --------- --------------------
EMP_NEW    1.txt      SYS       DATA_DIR
EMP_NEW    2.txt      SYS       DATA_DIR
EX_TB1     ex_tb1     SYS       DATA_DIR
IN_TB1     in_tb1     SYS       DATA_DIR

 

EXEC master..xp_cmdshell 'BCP  test.dbo.name out d:t_008.txt -c -t  -U"sa" -P"ssssaaaa"'

 

表面表定义的多少个重大 

  1. BCP的导入 只须求把地点的 OUT 变为 in 就能够了。

    EXEC master..xp_cmdshell 'BCP test.dbo.name in d:t_002.txt -c -t -U -T'

 

1.OHighlanderGANIZATION EXTE宝马X5NAL重要字,必供给有。以注明定义的表为外界表。

以此是对刚刚导出的数量开展双重的导入,能够很让人瞩指标观察表中的数目现已扩张了。

本文由1010cc时时彩标准版发布于1010cc三分网站,转载请注明出处:SQLServer导数据到Oracle,BCP导出导入大容量数据实

关键词:

上一篇:MySQL数据库基础01,三种类别语句

下一篇:没有了