I was running a series of insert /* +append */ into foo select * from foo@dblink. It worked fine on a set of small tables less than 1 billion rows each, but failed on a large table 4.5 billion rows. The actual error message shown here:
ERROR at line 1:
ORA-00600: internal error code, arguments: [qerrmOFBu1], [3148], [ORA-03148: OCI_ATTR_ROW_COUNT cannot return
a row count exceeding UB4MAXVAL. The actual row count is [4295000059]], [], [], [], [], [], [], [], [], []
The table has 420 partitions, and the largest partition only has 14 million rows, but it seems Oracle blows up at the table level. Maybe Oracle is using a 32 bit counter for UB4MAXVAL? 2^32 is 4,294,967,296 and you can see variable OCI_ATTR_ROW_COUNT got higher than that as shown in the error message, so one variable is defined well and the other too small (just guessing).
I still have to copy a larger table with 20 billion rows. That should be interesting! Maybe I should rewrite all of my statements to work at the partition level.
64-bit Oracle 12cR1 Enterprise Edition with patch set 12.1.0.2 on Oracle Linux 6.5 with 512 GB RAM: SGA 200 PGA 100G, free 100 GB. Plenty of storage free space (10 TB free at time of error). CPU was only 10% utilized.
Thoughts?