从 Oracle DB 导出一致的数据

Exporting consistent data from Oracle DB

我想在生产环境中导出 Oracle 数据库的内容,而在执行导出时使用该数据库的应用程序必须 运行ning。将简单的 "dump" 写入文件,例如简单地选择数据库的内容并使用 PL/SQL 在 table 之后将其写入 table 到文件中,似乎并不保证一致性。例如,通过将 table B 的所有内容写入文件,先前导出的 table A 可能已被更改,而 table B 已导出。因此,B 的导出内容可能会引用 table A 的 "new" 数据,这些数据不是 table A 的导出文件的一部分。我不能 运行 这个导出在一个大出于性能原因的事务(应用程序是 运行ning)。

可以使用哪些技术、工具等将一组一致的数据从 Oracle 数据库导出到一个文件中?

非常感谢!

Flashback 使您能够一致地导出数据。

每次数据库更改都会在UNDO中记录旧数据。 Oracle 使用该数据进行回滚和读取一致性 - SELECT 语句可以从特定时间点读取数据。闪回使用相同的机制,但是使用闪回可以手动设置时间点。如果您将每个查询的时间设置为相同的值,那么它们将从相同的一致时间读取。如果更改太多而 UNDO 表空间不足,您可能会遇到类似 ORA-01555: snapshot too old.

的错误

如果您构建自己的导出过程,您可以使用这样的闪回查询:

select * from test1 as of timestamp timestamp '2015-01-13 20:59:00';

如果您使用导出数据泵,则可以使用 flashback_time 选项:

FLASHBACK_TIME="TO_TIMESTAMP('25-08-2008 14:35:00', 'DD-MM-YYYY HH24:MI:SS')"

您使用的是哪个 Oracle 版本?

您可以使用 Oracle 数据泵,正如 John Heller 所说,包括子句 FLASHBACK_TIME="TO_TIMESTAMP('25-08-2008 14:35:00', 'DD-MM-YYYY HH24:MI:SS')"。 如果要导出当前时间一致的数据,可以通过如下方式配置该子句: FLASHBACK_TIME=系统时间戳

如果您的 Oracle 版本早于 10.2.0.4,我建议您使用 exp 二进制文件,包括子句 "consistent=y".

使用数据泵,您可以导出过去的数据(但并非总是可行)。使用 exp,您可以在 运行 命令时导出一致的数据。

请注意,在任何情况下都可能出现 "Snapshot too old" 错误。是因为undo tablespace不够space.