2010-12-15 108 views
2

J'ai le code ci-dessous essayant de faire une copie en bloc d'oracle à SQL Server 2005 et il continue de temporiser. comment puis-je étendre le délai de connexion Oracle? il semble que je ne peux pas de ce que je lis sur le web.La connexion de l'oracle de l'application .net expire

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(); 

ici est ma chaîne de connexion Oracle:

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

Répondre

0

Dans la chaîne de connexion, il y a un paramètre « durée de vie de connexion » et « Délai de connexion ». Vous pouvez le définir en conséquence. Voir here pour la référence complète. BTW, je sais que vous n'avez pas demandé cela, mais avez-vous considéré un outil ETL pour la migration de vos enregistrements DB (par exemple Informatica, FME, etc.)? Bien que votre approche soit valide, elle ne sera pas très performante puisque vous êtes en train d'hydrater tous les enregistrements d'un DB vers le client et ensuite de les sérialiser vers une autre DB. Pour les petits ensembles, ce n'est pas un gros problème, mais si vous traitez des centaines de milliers de lignes, vous pouvez envisager un outil ETL officiel.

+0

son pas dans le budget, et il n'y a que 20 000 dossiers. Je veux être un bon citoyen et ne pas verrouiller les ressources plus que nécessaire – kacalapy

+0

Y a-t-il un outil ETL gratuit que je peux utiliser pour obtenir des données ORACLE en SQL, et programmer cela pour qu'il s'exécute périodiquement chaque jour? – kacalapy

+0

Je n'ai aucune recommandation en tête, mais googling "free etl" a donné des résultats prometteurs. La plupart des outils ETL sont agnostiques de base de données (ou au moins supportent Oracle et SQL Server). –

3

Vous pouvez définir l'option s.BulkCopyTimeout