有一个场景是这样的:发起一个事务A,更新了若干行数据,但是不commit,然后执行alter system checkpoint命令发布一个检查点,让dbwn进程将脏数据块写进数据文件中,因为没有commit,所以重做日志缓冲区的内容没有写入redo log,接下来让服务器突然掉电,这样一来所有数据缓冲区和日志缓冲区的数据全部丢失。再启动数据库,发现事务A是被回滚的。问题:在这个场景中,oracle是怎样保证事务A可以被正确回滚?尽量详细些,谢谢!