我有两个数据库(10g 和 11g)。我通过 C# 连接到数据库,如下所示:
var con = new OracleConnection("data source=(DESCRIPTION = (ADDRESS_LIST = (ADDRESS = (PROTOCOL = TCP) (HOST = MYHOST)(PORT = MYPORT)) ) (CONNECT_DATA = (SERVER=DEDICATED) (SID = MYSID)));user id=MYUSER;password=MYPW");
var cmd = new OracleCommand("select id,clob_field from some_table", con);
cmd.InitialLOBFetchSize = -1;
using ( var reader = cmd.ExecuteReader() )
{
while ( reader.Read() )
{
var id = reader.GetInt32(0);
var clob = reader.GetString(1);
}
reader.Close();
}
该表有大约 15000 行,其中平均 CLOB 大小为 10KB。上面的代码每 100 行需要 1 分钟。两个数据库都有同样的问题。
如果我评论“var clob = ...”这一行,那么我会得到非常好的表现。
我试图dbms_lob.substr(clob_field,4000,1) where length(clob_field)<=4000
在几秒钟内拆分查询并获得 1-3k 行。但另一部分(剩余 3-4k 行)大约需要 10 分钟。
在 SQLDeveloper 中执行查询会在几秒钟内返回所有数据(每 1000 行不到 1 秒)。
任何人都可以帮助我获得合理的表现吗?