2

我必须从具有全局索引的分区表中导出数据,该索引必须始终在线,但我在这样做时遇到了麻烦。对于数据导出,我使用的是 Data Pump Export - expdp,并且我只导出一个分区。最老的,不是活跃的。

我的 expdp 命令导出正确的数据,它看起来像这样:

expdp user/pass@SID DIRECTORY=EXP_DIR 
DUMPFILE=part23.dmp TABLES=SCHEMA_NAME.TABLE_NAME:TABLE_PARTITION_23`

使用数据库的应用程序的连接超时为 10 秒。此参数无法更改。如果 INSERT 查询未在 10 秒内完成,则将数据写入备份文件。

我的问题是,在持续几分钟的导出过程中,一些数据最终出现在备份文件中,而不是数据库中。我想知道为什么,并避免它。

分区每周组织一次,我保持 4 个分区处于活动状态(过去 4 周)。每个分区最大为 3 GB。

我正在使用 Oracle 11.2

4

1 回答 1

1

您是否获得使用 AWR 的许可?如果是这样,您是否有超时发生时快照的 AWR 报告?

Oracle 读取器不会阻止写入器,并且导出进程没有理由锁定任何会影响新插入的内容。

这是一个超时 10 秒的单个 INSERT 操作(即您在单个 INSERT 语句中插入大量行)?或者这是一批单独的插入,使得一些插入可以在 10 秒的窗口中成功,而一些可能会失败?您说“某些数据最终会出现在备份文件中”,但我不确定这些场景中哪一个更准确。

在正常操作期间,您离 10 秒超时还有多远?

系统是否可能受 I/O 限制,并且执行导出会增加 I/O 系统的负载,从而导致所有操作变慢?如果您遇到了 I/O 瓶颈,并且您添加了一个必须读取 3 GB 分区并将该数据写入磁盘(可能也在数据库服务器上)的导出进程,那肯定会导致总体速度下降。如果你已经相当接近 10 秒的超时时间,那肯定会把你推到边缘。

于 2011-07-01T19:55:54.507 回答