没时间,只翻译后面部分。不对的地方请大家指正。
Of course, your rollback segments can be too small, but that's an easy fix. Just drop and recreate larger rollback segments. But if their not too small, here's a list of things to try (in no particular order) and some of them might help you.
当然,你的回滚段可能太小,这时很容易改变,只需删除并重建更大的回滚段即可。但如果不是回滚段太小,你可以尝试一下下面列出的事情(没有顺序),可能对你会有帮助。1. Run large reports and batch processes during periods of low user activity.
1. 在用户活动较少时运行大查询动作和批处理过程。2. Avoid running large reports at the same time as batch processes are updating the same data objects.
2. 避免在批处理更新数据内容时执行大的查询过程。3. Commit less frequently. As mentioned above, try 10,000 row cycles or higher. In our data warehouses (DWxxx), we have 500MB rollback segments. You may be able to run some processes and not commit until all the rows are updated. (Of course, if you are running a read-only transaction, this tip will not help you.)
3. 减少"提交"频率。正如上面提到的,可以每10,000条记录(甚至更多)才提交一次。在我们的数据仓库(DWxxx)中,我们有500MB的回滚段。有些处理要求在所有记录都更新后才能提交。(当然,如果你运行在一个只读事务中,这点对你没帮助。)4. Limit the query to a range of records for any given pass, rather than the whole table.
4. 通过条件来限制查询只针对部分记录,而不是整个表。5. Force long-running queries to avoid re-visiting the same block several times during the query. This can be done by either forcing a full table scan(which many of our large queries already do) or by adding a 'dummy' sort to the query so that all the records are retrieved and sorted, then fetched sequentially from the sorted data.
5. 避免在一个长时间查询动作中多次重复访问同一个数据块。这可以通过两种方法实现,一是进行全表扫描(我们许多大查询过程就是这么做的),二是添加一个'dummy'排序过程到查询中,这样先对所有的记录进行检索和排序,然后从排序后的数据表中顺序提取数据。
6. Use a temporary table to hold the data needed for the cursor base query. A CTAS statement (create table A as select from table B) works well for this.
6. 用临时表保存游标基础查询所需要的数据,可以使用CTAS语句(即create table A as select from table B)来实现。7. Where possible, use SQL based set-processing rather than row-based
PL/SQL processing. This provides a great performance boost.
7. 如果可能,尽量使用基于SQL的集合处理,它比使用基于行的PL/SQL处理要好,可以更好的性能。8. ONE OF THE MOST IMPORTANT: Do not fetch across commits. A fetch across commit occurs when a commit is issued in a loop, but the read cursor remains open and is fetched after the commit. 
8. 最重要的是:不要跨commit动作提取记录。当一个commit语句出现在一个循环中时,可能会出现跨commit的提取动作,这时读游标一直处于打开状态,并且在commit之后才能进行提取动作。