-1

つまり、私が行っているのは、リモートの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分かかります。

4

1 に答える 1

2

単一の挿入は常に遅くなります。配列内のデータの処理を開始し、ソース システムから ID のバッチを選択し、配列をターゲットにロードします。

参考になりそうな記事はこちら。http://www.oracle.com/technetwork/issue-archive/2009/09-sep/o59odpnet-085168.html

于 2013-03-18T10:57:54.343 に答える