【问题标题】:Database suddenly stopped in middle of transaction数据库在事务中间突然停止
【发布时间】:2020-12-28 06:03:53
【问题描述】:

我正在构建一个以 Oracle 云数据库作为主数据库的 Web 应用程序。它是一个支付应用程序,所以每一毫秒都很重要,交易一直在发生。 这是最明显的问题,我没有找到答案。我没有任何备份数据中心。我只有一个实例,没有运行任何备份实例!它有一些预算限制

  1. 如果数据库在事务的中间停止会发生什么?
  2. 如果数据库在几分钟后停止并重新启动会怎样?

在这两种情况下,我可能会丢失/错过交易。

感谢您的帮助。

【问题讨论】:

  • 当您说 Oracle 云数据库时,您是指 Oracle PaaS 还是 IaaS?
  • 已使用 PassS 数据库。

标签: sql database oracle web-applications rdbms


【解决方案1】:

无需考虑或没有备份(您可能很清楚),也无需使用什么软件来运行事务,考虑到 Oracle 数据库完全符合 ACID

ACID(原子性、一致性、隔离性、持久性)是一组 旨在保证数据的数据库事务的属性 尽管有错误、电源故障和其他事故,但仍然有效。在里面 数据库的上下文,满足数据库操作的序列 ACID 属性(可以被视为单个逻辑 对数据的操作)称为事务。例如,一个 将资金从一个银行账户转移到另一个银行账户,甚至涉及 多项更改,例如借记一个帐户并贷记另一个帐户, 是单笔交易。

Oracle 使用所谓的系统更改号 (SCN),它是数据库使用的逻辑内部时间戳。 SCN 对数据库中发生的事件进行排序,这是满足事务的 ACID 属性所必需的。 Oracle 数据库使用 SCN 来标记 SCN,在该 SCN 之前,所有更改都已知在磁盘上,以便恢复避免应用不必要的重做。数据库还使用 SCN 标记一组数据不存在重做的点,以便停止恢复。

Oracle 数据库使用重做日志文件和撤消表空间中的数据存储在发生故障时使数据库保持一致状态。

当事务在进行时发生重大故障时会发生什么,主要取决于事务是如何完成的。请阅读以下文章以了解不同的场景:

Transactions

如果数据库在几分钟后再次恢复,在数据库关闭的同时执行的所有事务都将失败。通常在这里,对于支付系统,您应该考虑使用消息队列系统(通常使用事务监视器完成),以便在数据库再次从应用程序端启动时执行所有待处理的事务。

您应该认真考虑将任何 Oracle 云备份策略用于 PaaS 服务。请记住,您可以避免硬件故障和云服务中的其他注意事项,但备份不仅适用于硬件问题,还适用于逻辑问题。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-03-08
    • 1970-01-01
    • 1970-01-01
    • 2022-06-21
    • 1970-01-01
    相关资源
    最近更新 更多