所以我正在做的是从远程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分钟。
答案 0 :(得分:2)
单个插入总是很慢 - 开始处理数组中的数据,从源系统中选择一批ID并将数组加载到目标。
这篇文章可能会有所帮助。 http://www.oracle.com/technetwork/issue-archive/2009/09-sep/o59odpnet-085168.html