У меня есть БД Oracle с некоторыми данными, которые я хочу переместить на SQL Server.
Проблема состоит в том, что в моей БД Oracle есть некоторые столбцы с типом TIMESTAMP(0) WITH TIME ZONE
, и SSIS обнаруживает их как CLOB
,Поэтому он не может сказать, что не может преобразовать CLOB
в datetime2
.
. Я уже создал таблицы в базе данных SQL Server.Таким образом, он просто перемещает данные с помощью некоторого преобразования типов.
Я использую мастер импорта и экспорта SQL Server (SSIS) из SQL Server Management Studio (SSMS).
Яс помощью .NET Framework Data Provider для Oracle для подключения к базе данных Oracle и собственный клиент SQL Server 11.0 для подключения к моему SQL Server.
Мой тип источникаTIMESTAMP(0) WITH TIME ZONE
и мой тип назначения datetime2
.
Вот ошибка, которую я получаю:
[Source Information]
Source Location : localhost
Table: "MYSPACE"."MYTABLE"
Column: START_DATE
Column Type: CLOB
SSIS Type: Unicode text stream [DT_NTEXT]
Mapping file (to SSIS type): C:\Program Files (x86)\Microsoft SQL Server\140\DTS\MappingFiles\OracleClientToSSIS10.XML
[Destination Information]
Destination Location : localhost
Destination Provider : SQLNCLI11
Table: [dbo].[mytable]
Column: start_date
Column Type: datetime2
SSIS Type: database timestamp with precision [DT_DBTIMESTAMP2]
Mapping file (to SSIS type): C:\Program Files (x86)\Microsoft SQL Server\140\DTS\MappingFiles\MSSQLToSSIS10.XML
[Conversion Steps]
Conversion unknown ...
SSIS conversion file: C:\Program Files (x86)\Microsoft SQL Server\140\DTS\binn\DtwTypeConversion.xml
Итак, как вы можете видеть, столбец START_DATE
определяется какCLOB.Это неверно.
Я заглянул внутрь OracleClientToSSIS10.XML
<!-- TIMESTAMP 10.* -->
<dtm:DataTypeMapping >
<dtm:SourceDataType>
<dtm:DataTypeName>timestamp</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:NumericType>
<dtm:DataTypeName>DT_DBTIMESTAMP2</dtm:DataTypeName>
<dtm:SkipPrecision/>
<dtm:UseSourceScale/>
</dtm:NumericType>
</dtm:DestinationDataType>
</dtm:DataTypeMapping>
<!-- TIMESTAMP WITH TIME ZONE 10.* -->
<dtm:DataTypeMapping >
<dtm:SourceDataType>
<dtm:DataTypeName>TIMESTAMP WITH TIME ZONE</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:NumericType>
<dtm:DataTypeName>DT_DBTIMESTAMPOFFSET</dtm:DataTypeName>
<dtm:SkipPrecision/>
<dtm:UseSourceScale/>
</dtm:NumericType>
</dtm:DestinationDataType>
</dtm:DataTypeMapping>
<!-- CLOB -->
<dtm:DataTypeMapping >
<dtm:SourceDataType>
<dtm:DataTypeName>CLOB</dtm:DataTypeName>
</dtm:SourceDataType>
<dtm:DestinationDataType>
<dtm:CharacterStringType>
<dtm:DataTypeName>DT_NTEXT</dtm:DataTypeName>
<dtm:Length>255</dtm:Length>
</dtm:CharacterStringType>
</dtm:DestinationDataType>
</dtm:DataTypeMapping>
Кажется, хорошо, верно?