2017-01-10 10 views
4

BIMLを使用して自動ステージング領域を生成しようとしています。 ソースデータベースはProgressであり、ODBCによって接続されています。 https://www.cathrinewilhelmsen.net/2015/07/12/biml-extension-methods-getdatabaseschema/BIML GetDatabaseSchemaがODBCプログレスソースデータベースで動作しない

http://bimlscript.com/walkthrough/Details/3121

1-2-Environment.biml:

<Biml xmlns="http://schemas.varigence.com/biml.xsd"> 
    <#@ template tier="0" #> 

<Connections> 
    <OleDbConnection Name="Source" ConnectionString="Provider=MSDASQL;DSN=XXX;UID=XXX;PWD=XXX;" /> 
    <OdbcConnection Name="Source2" ConnectionString="DSN=XXX;UID=XXX;PWD=XXX;" /> 
    <OleDbConnection Name="Target" ConnectionString="Provider=SQLOLEDB;Server=localhost;Initial Catalog=DWH_Staging;Integrated Security=SSPI;" /> 
</Connections> 
<Databases> 
    <Database Name="DWH_Staging" ConnectionName="Target" /> 
    <Database Name="pa" ConnectionName="Source" /> 
</Databases> 
<Schemas> 
    <Schema Name="test" DatabaseName="DWH_Staging" /> 
    <Schema Name="pub" DatabaseName="pa" /> 
</Schemas> 

ソース2は、通常のODBC接続がある

私は、次のウォークスルーを使用しています、SourceはODBC用にOLEDBを使用してテストします。

1-2 CreateTableMetadata.biml

<#@ import namespace="System.Data" #> 
<#@ import namespace="Varigence.Biml.CoreLowerer.SchemaManagement" #> 

<# 
var sourceConnection = RootNode.DbConnections["Source"]; 
var importResult = sourceConnection.GetDatabaseSchema(); 

#> 
<Biml xmlns="http://schemas.varigence.com/biml.xsd"> 
    <Tables> 
    <# foreach (var table in importResult.TableNodes) { #> 
    <Table Name="Staging_<#=table.Schema.Name#>_<#=table.Name#>" SchemaName="DWH_Staging.test"> 
     <Columns> 
     <# foreach (var column in table.Columns) { #> 
      <# if (column.DataType == System.Data.DbType.AnsiString) { #> 
      <Column Name="<#=column.Name#>" DataType="String" Length="<#=column.Length#>"> 
       <Annotations> 
       <Annotation AnnotationType="Tag" Tag="ConvertToUnicode">yes</Annotation> 
       </Annotations> 
      </Column> 
      <# } else { #> 
      <#=column.GetBiml()#> 
      <# } #> 
     <# } #> 
     </Columns> 
     <Annotations> 
     <Annotation AnnotationType="Tag" Tag="SourceSchemaQualifiedName"><#=table.SchemaQualifiedName#></Annotation> 
     </Annotations> 
    </Table> 
    <# } #> 
    </Tables> 
</Biml> 

1-X-DeployTargetTables.biml:

<#@ template tier="2" #> 
<Biml xmlns="http://schemas.varigence.com/biml.xsd"> 
    <Packages> 
    <Package Name="MasterTableDeploy" ConstraintMode="Parallel"> 
     <Tasks> 
     <# foreach (var table in RootNode.Tables) { #> 
     <ExecuteSQL Name="Create <#=table.Name#>" ConnectionName="Target"> 
      <DirectInput><#=table.GetDropAndCreateDdl()#></DirectInput> 
     </ExecuteSQL> 
     <# } #> 
     </Tasks> 
    </Package> 
    </Packages> 
</Biml> 

問題が発生MasterTableDeploy.dtsxパッケージはない、あります何かを含んでいる、それはちょうど空です。 テストとして私は完全に正常に動作するソースとして独自のSQL Serverを使用しました。 進行中のODBCソースを使用してもエラーメッセージは表示されません。

アイデア?

+0

あなたまたは他の誰かがデータベースログにアクセスできますか?通常dbname.lg。おそらく彼らは何かを明らかにするでしょうか? – Jensd

+0

こんにちは、どのログを意味しますか?進歩から? – RoundFour

+0

正確に。 「databasename.lg」というデータベースログが少なくとも1つあります。 appserverを使用する場合は、asbroker1.server.logやasbroker1.broker.logなどの名前のファイルもあります。これらの名前は標準ですが、データベース名とは別に名前を変更することもできます。 – Jensd

答えて

1

ODBC接続を使用してDb2データベースに接続しようとすると、同様の問題が発生しました。 BimlEngine.dllの逆コンパイルが終了し、この機能がODBC接続用に実装されていないことがわかりました。 申し訳ありません

+1

ご返信ありがとうございます。これが真実なら、なぜ彼らはどこかでこれを述べないのですか?私たちはこれを動作させるために数時間を失いました。 – RoundFour

+0

System.DBをインクルードしているので、System.DB.ODBC.GetSchema()メソッド(またはOleDBが毒であればSystem.DB.Oledb.GetSchema()を使用して直接試すことができます)とそこ。 スクリプトタスクでこのようなことを一度やって、そのスキーマオブジェクト用の特定の準拠していない "ODBC"ドライバ/データベースを照会します... – user1390375

関連する問題