This dataset result set will hold 120MB. If possible, use a TOracleQuery or a TOracleDataSet in UniDirectional mode. In both cases there is no memory overhead for large result sets.
Then perhaps you need to limit the result set to the records you are interested in by using QBE or a where clause. Viewing 3000 records in a DBGrid is not very useful. You can additionally set TOracleDataSet.QueryAllRecords to False, so that the dataset only fetches records when the application (grid) requests them.