つまり、私が行っているのは、リモートのNettezzaデータベースから大量のデータを読み取り、それらを別のリモートのOracleデータベースに挿入することです。そのために、私はODBCドライバーを使用しています。問題は、データが多く、時間がかかりすぎることです。どうすればスピードアップできますか?これが私がすることです:
まず、挿入するための接続とコマンドを作成します。
String connect = "Driver={Microsoft ODBC for Oracle};CONNECTSTRING=(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhost)(PORT=myprt))(CONNECT_DATA=(SERVICE_NAME=myname)));Uid=uid;Pwd=pass";
connection = new OdbcConnection(connect);
connection.Open();
String q = @"INSERT INTO TEST (id)
VALUES (?)";
myCommand = new OdbcCommand(q,connection);
次に、nettezaからデータを読み取ります。
String connect = "Driver={NetezzaSQL};servername=server;port=5480;database=db; username=user;password=pass;
string query = @"SELECT T2.LETO_MESEC, T1.*
FROM data T1
JOIN datga2 T2 ON T2.ID = T1.EFT_ID
WHERE T2.LETO_MESEC = '" + mesec + @"'";
using (OdbcConnection connection = new OdbcConnection(connect))
{
try
{
OdbcCommand command = new OdbcCommand(query, connection);
connection.Open();
OdbcDataReader reader = command.ExecuteReader();
int counter=0;
while (reader.Read())
{
int id_first = reader.GetInt32(5);
insertOracle(id_first);
}
}
catch (Exception e)
{
Console.WriteLine("ne dela" + e.ToString());
}
}
そして最後に私の挿入物:
public void insertOracle(int id_first)
{
try
{
myCommand.Parameters.Clear();
myCommand.Parameters.Add(new OdbcParameter("id", id_first));
myCommand.ExecuteNonQuery();
}
catch (Exception e)
{
Console.WriteLine("ne dela" + e.ToString());
}
}
これらがすべての行でコミットされていることに気づいたので、それを削除して高速化する方法。現在、20000行の場合は約10分かかります。