首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在BIML中使用Oracle & Attunity

在BIML中使用Oracle & Attunity
EN

Stack Overflow用户
提问于 2020-11-02 18:10:26
回答 1查看 422关注 0票数 0

我想用biml将数据从oracle传输到SQL。

到目前为止,我能够创建一个(简单的)包来手动传输数据。此包包含一个SQL_目标值连接(本机OLEDB)、一个Oracle连接( OleDBDestination \attunity)、一个Oracle和一个OleDBDestination。

在创建了这个包之后,我尝试将这个包转换为BIML,但是只得到了一个"CustomSsisConnection“(=Oracle )和一个"Connection”(SQL)。包本身不包含在新的biml脚本中。

基于创建的连接,我尝试自己对包进行“编码”,并提出了以下代码:

代码语言:javascript
复制
<Biml xmlns="http://schemas.varigence.com/biml.xsd">
    <Connections>
        <Connection Name="SQL.DWH_NEW" ConnectionString="data source=SOMESERVER;initial catalog=DWH_NEW;provider=SQLNCLI11.1;integrated security=SSPI;auto translate=False;" />
        <CustomSsisConnection Name="OracleSource" CreationName="ORACLE" ObjectData="&lt;DTS:ConnectionManager xmlns:DTS=&quot;www.microsoft.com/SqlServer/Dts&quot;&gt;&#xD;&#xA;  &lt;OraConnectionString&gt;SERVER=SomeOracleServer;USERNAME=myUser;WINAUTH=0;data source=SomeOracleServer;user id=myUser;&lt;/OraConnectionString&gt;&#xD;&#xA;  &lt;OraPassword Sensitive=&quot;1&quot;&gt;&lt;/OraPassword&gt;&#xD;&#xA;  &lt;OraRetain&gt;False&lt;/OraRetain&gt;&#xD;&#xA;  &lt;OraInitialCatalog&gt;&lt;/OraInitialCatalog&gt;&#xD;&#xA;  &lt;OraServerName&gt;SomeOracleServer&lt;/OraServerName&gt;&#xD;&#xA;  &lt;OraUserName&gt;ext-bi-pg&lt;/OraUserName&gt;&#xD;&#xA;  &lt;OraOracleHome&gt;&lt;/OraOracleHome&gt;&#xD;&#xA;  &lt;OraOracleHome64&gt;&lt;/OraOracleHome64&gt;&#xD;&#xA;  &lt;OraWinAuthentication&gt;False&lt;/OraWinAuthentication&gt;&#xD;&#xA;  &lt;OraEnableDetailedTracing&gt;False&lt;/OraEnableDetailedTracing&gt;&#xD;&#xA;&lt;/DTS:ConnectionManager&gt;" />
    </Connections>
    <Packages>
        <Package Name="Package2" Language="None" ConstraintMode="LinearOnCompletion" ProtectionLevel="EncryptSensitiveWithPassword">
            <Tasks>
                <Dataflow Name="Data Flow Task">
                    <Transformations>
                       <OracleSource Name="oracleSourceStmt" Connection="OracleSource" >
                           <DirectInput>"SELECT * FROM SomeTable"</DirectInput>
                       </OracleSource>
                        <OleDbDestination Name="OLE DB Destination" ConnectionName="SQL.DWH_NEW">
                            <ExternalTableOutput Table="[dbo].[SomeTable]" />
                        </OleDbDestination>
                    </Transformations>
                </Dataflow>
            </Tasks>
        </Package>
    </Packages>
</Biml>

如果我检查我得到的错误,“无法解析.在属性'Connection‘中的引用。’”无效。请提供有效的范围名称。

我也尝试使用"OracelConnection“而不是CustomSSISConnection,但是我确实收到了另一条错误消息:OracelConnection未检测到。安装与Biml/BimlStudio版本相匹配的32位或64位版本的oracle客户端访问。

我确实读过Scott的“使用”,但这也没有什么帮助,因为现在应该已经有了对Attunity连接器的内置支持。

  • 能不能给出一个提示\澄清我的错误是什么?
  • (仍然)应该使用CustomSSISConnection还是OracelConnection才是正确的选择?如果我要使用oracleConnection,什么提示是缺少的?
  • 是否有人用biml (成功地)创建了sql ssis-包的oracle?

这么多问题--希望有人能帮上忙!

你好,Gregor

EN

回答 1

Stack Overflow用户

发布于 2020-12-11 17:02:19

我在使用BimlExpress时发现的用于的格式是下面的格式,虽然在我自己开发的Biml框架中到处都是嵌入式变量名,但它应该会让您朝着正确的方向前进。

Oracle连接节点

Expressions节点是如何将连接设置为从项目参数中获取值的,我一直认为将其作为保存、重新部署以更改一个小配置值的选项非常有用:

代码语言:javascript
复制
    <CustomSsisConnection Name="<#=ConnectionName#>"
                          CreationName="MSORA"
                          ObjectData="&lt;OracleXMLPackage&gt;&lt;OraConnectionString&gt;<#=conn#>&lt;/OraConnectionString&gt;&lt;OraRetain&gt;False&lt;/OraRetain&gt;&lt;OraInitialCatalog&gt;&lt;/OraInitialCatalog&gt;&lt;OraServerName&gt;<#=ServerName#>&lt;/OraServerName&gt;&lt;OraUserName&gt;<#=Username#>&lt;/OraUserName&gt;&lt;OraOracleHome&gt;<#=Config.GetConfigValue(@"OracleHome")#>&lt;/OraOracleHome&gt;&lt;OraOracleHome64&gt;<#=Config.GetConfigValue(@"OracleHome")#>&lt;/OraOracleHome64&gt;&lt;OraWinAuthentication&gt;False&lt;/OraWinAuthentication&gt;&lt;OraEnableDetailedTracing&gt;False&lt;/OraEnableDetailedTracing&gt;&lt;OraPassword Sensitive=&quot;1&quot; Encrypted=&quot;0&quot;&gt;<#=Password#>&lt;/OraPassword&gt;&lt;/OracleXMLPackage&gt;"
                          CreateInProject="true"
                          >
        <Expressions>
            <Expression ExternalProperty="ConnectionString"
                        >@[$Project::<#=ConnectionName#>_Conn]</Expression>
            <Expression ExternalProperty="OracleHome"
                        >@[$Project::OracleHome]</Expression>
            <Expression ExternalProperty="OracleHome64"
                        >@[$Project::OracleHome64]</Expression>
        </Expressions>
    </CustomSsisConnection>

Oracle数据源节点

注意,这是一个自定义组件,它将输出一个Attunity源代码。所以你必须在你的机器上找到这个。同样,框架中也有一些遗物,但是它们应该可以帮助您了解到底发生了什么。如果您没有像我这样以编程方式执行此操作,那么最大的麻烦是添加所有列及其数据类型:

代码语言:javascript
复制
    <CustomComponent Name="<#=SourceTechType#>Src - Retrieve Rows - <#=FromSchema#> <#=FromTable#>"
                     LocaleId="None"
                     Version="4"
                     UsesDispositions="true"
                     ComponentClassId="{CB67CD40-126C-4280-912D-2A625DFAFB66}"
                     ComponentTypeName="CB67CD40-126C-4280-912D-2A625DFAFB66"
                     ContactInfo="Oracle Source;Microsoft Connector for Oracle by Attunity; Attunity Ltd.; All Rights Reserved; http://www.attunity.com;4"
                     >
        <Annotations>
            <Annotation AnnotationType="Description">Microsoft Oracle Source Component by Attunity</Annotation>
        </Annotations>
        <CustomProperties>
            <CustomProperty Name="BatchSize" DataType="Int32" SupportsExpression="true" Description="The number of rows fetched in a batch.">100000</CustomProperty>
            <CustomProperty Name="PrefetchCount" DataType="Int32" SupportsExpression="true" Description="Number of pre-fetched rows.">0</CustomProperty>
            <CustomProperty Name="LobChunkSize" DataType="Int32" SupportsExpression="true" Description="Determines the chunk size allocation for LOB columns">32768</CustomProperty>
            <CustomProperty Name="DefaultCodePage" DataType="Int32" SupportsExpression="true" Description="The code page to use when code page information is unavailable from the data source.">1252</CustomProperty>
            <CustomProperty Name="AccessMode" DataType="Int32" TypeConverter="AccessMode" Description="The mode used to access the database.">1</CustomProperty>
            <CustomProperty Name="TableName" DataType="String" SupportsExpression="true" Description="The name of the table to be fetched."></CustomProperty>
            <CustomProperty Name="SqlCommand" DataType="String" SupportsExpression="true" Description="The SQL command to be executed.">
select cols
from tables
where conditions = met
            </CustomProperty>
        </CustomProperties>
        <Connections>
            <Connection Name="MSOraConnection"
                        ConnectionName="<#=SourceConnectionName#>"
                        />
        </Connections>
        <OutputPaths>
            <OutputPath Name="Output"
                        ErrorRowDisposition="FailComponent"
                        TruncationRowDisposition="FailComponent"
                        IsErrorOutput="false"
                        >
                <OutputColumns>
                <#  foreach (var column in table.Columns) { #>
                        <OutputColumn Name="<#=column.Name#>"
                                      ExternalMetadataColumnName="<#=column.Name#>"
                                      DataType="<# if(column.GetTag("ConvertFrom").Length > 0) { #><#=column.GetTag("ConvertFrom")#><# } else { #><#=column.DataType#><# } #>"
                                      <# if(column.DataType.ToString() == "String"){ #>CodePage="1252"<# } #>
                                      Length="<#=column.Length#>"
                                      Precision="<#=column.Precision#>"
                                      Scale="<#=column.Scale#>"
                                      />
                <#  } #>
                </OutputColumns>
                
                <ExternalColumns>
                <#  foreach (var column in table.Columns) { #>
                    <ExternalColumn Name="<#=column.Name#>"
                                    DataType="<# if(column.GetTag("ConvertFrom").Length > 0) { #><#=column.GetTag("ConvertFrom")#><# } else { #><#=column.DataType#><# } #>"
                                    <# if(column.DataType.ToString() == "String"){ #>CodePage="1252"<# } #>
                                    Length="<#=column.Length#>"
                                    Precision="<#=column.Precision#>"
                                    Scale="<#=column.Scale#>"
                                    />
                <#  } #>
                </ExternalColumns>
            </OutputPath>
            
            <OutputPath Name="Error"
                        IsErrorOutput="true">
                <OutputColumns>
                <#  foreach (var column in table.Columns) { #>
                    <OutputColumn Name="<#=column.Name#>"
                                  DataType="<# if(column.GetTag("ConvertFrom").Length > 0) { #><#=column.GetTag("ConvertFrom")#><# } else { #><#=column.DataType#><# } #>"
                                  <# if(column.DataType.ToString() == "String"){ #>CodePage="1252"<# } #>
                                  Length="<#=column.Length#>"
                                  Precision="<#=column.Precision#>"
                                  Scale="<#=column.Scale#>"
                                  />
                <#  } #>
                </OutputColumns>
            </OutputPath>
        </OutputPaths>
    </CustomComponent>
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/64650970

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档