获取不断更新的Oracle数据库的"快照"的最佳方法是什么?

Bha*_*dya 6 oracle snapshot

我想获取一个由TIBCO数据库适配器不断更新的Oracle数据库的一致快照.

典型地,TIBCO一次更新一堆表,然后是COMMIT.如果我遍历所有表,每天拍摄一次快照,那么我可以在提交之前从表A获取数据,并在提交之后从表B获取数据 - 但如果A和B有关系,那么它们将不再匹配正常.

"SET TRANSACTION READ ONLY"是要走的路吗?
例如

COMMIT
SET TRANSACTION READ ONLY
SELECT * FROM A WHERE A.ADB_UPDATEDDATE > TODAY()-1 
SELECT * FROM B WHERE B.ADB_UPDATEDDATE > TODAY()-1 
etc.
COMMIT
Run Code Online (Sandbox Code Playgroud)

(今天语法可能不正确,不重要!)

或者我能做些什么更好的事情?

dpb*_*ley 7

如果"快照"是指一致模式下数据库的完整副本,那么我将从备份中恢复数据库并将其恢复到所需的时间点.Oracle恢复过程将处理一致性(由系统变更编号或SCN跟踪).

如果您使用RMAN进行备份和恢复,则会出现一个带有time子句的"DUPLICATE DATABASE"命令,这将使此操作相对轻松.

另一方面,如果您只是想以一致模式提取几个表,我可以考虑两个选项:

  • 使用(较旧的)exp实用程序的consistent = y选项导出表组
  • 将较新的expdp实用程序与flashback_time选项一起使用

  • 我总是惊讶于人们倾向于避免使用"RMAN".在Oracle世界中,它是切片面包以来最好的东西. (3认同)

Gai*_*ius 4

使用称为闪回的Oracle 功能可以很容易地做到这一点。只要你知道上一个版本是什么时候(时间或scn)并且它在闪回窗口内,你就可以简单地查询它。