数据库在事务中间突然停止

Database suddenly stopped in middle of transaction

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

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

我可能会 lose/miss 处理这两种情况。

感谢您的帮助。

不考虑您可能很清楚的注意事项或没有备份,也不考虑您使用什么软件进行 运行 交易,考虑 Oracle 数据库完全符合 ACID

ACID (atomicity, consistency, isolation, durability) is a set of properties of database transactions intended to guarantee data validity despite errors, power failures, and other mishaps. In the context of databases, a sequence of database operations that satisfies the ACID properties (which can be perceived as a single logical operation on the data) is called a transaction. For example, a transfer of funds from one bank account to another, even involving multiple changes such as debiting one account and crediting another, is a single transaction.

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

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

如果交易在进行中发生重大故障,会发生什么情况主要取决于交易的完成方式。请阅读下面的文章以了解不同的场景:

Transactions

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

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