2010-12-15 21 views
2

以下のコードをOracleサーバーからSQL Server 2005に一括コピーしようとしていて、タイムアウトが発生します。 Oracle接続のタイムアウトをどのように延長できますか?それは私がウェブ上で読んだものからできないようです。ここ.netアプリケーションのOracle接続のタイムアウトを

OracleConnection source = new OracleConnection(GetOracleConnectionString()); 
source.Open(); 

SqlConnection dest = new SqlConnection(GetSQLConnectionString()); 
dest.Open(); 


OracleCommand sourceCommand = new OracleCommand(@"select * from table"); 


using (OracleDataReader dr = sourceCommand.ExecuteReader()) 
      { 
       using (SqlBulkCopy s = new SqlBulkCopy(dest)) 
       { 
        s.DestinationTableName = "Defects"; 
        s.NotifyAfter = 100; 
        s.SqlRowsCopied += new SqlRowsCopiedEventHandler(s_SqlRowsCopied); 
        s.WriteToServer(dr); 
        s.Close(); 
       } 
      } 

source.Close(); 
dest.Close(); 

は私のOracle接続文字列である:あなたの接続文字列で

return "User Id=USER;Password=pass;Data Source=(DESCRIPTION=" + 
        "(ADDRESS=(PROTOCOL=TCP)(HOST=14.12.7.2)(PORT=1139))" + 
        "(CONNECT_DATA=(SID=QCTRP1)));"; 

答えて

0

、「接続の生涯」と「接続タイムアウト」パラメータがあります。それに応じて設定することができます。詳しくは、hereを参照してください。

ところで、あなたはこれを尋ねていませんが、DBレコード(例:Informatica、FM​​Eなど)を移行するためのETLツールを検討しましたか?あなたのアプローチは有効ですが、あるDBからクライアントへのすべてのレコードを水和してから別のDBに直列化するので、それほどパフォーマンスは高くありません。小規模なバルク・セットの場合、これは大きな問題ではありませんが、何十万行も処理する場合は、公式のETLツールを検討することをお勧めします。

+0

を予算内に設定せず、20,000レコードしか設定できません。私は良い市民であり、必要以上にリソースをロックしたくないです。 – kacalapy

+0

私はORACLEデータをSQLに取得するために使用できる無料のETLツールがあり、これを定期的に毎日実行するようにスケジュールしますか? – kacalapy

+0

私は頭の上から何の推薦もありませんが、グーグルの "free etl"は有望な結果を返しました。ほとんどのETLツールは、データベースに依存しません(または少なくともOracleとSQL Serverをサポートしています)。 –