POLARDB中执行了一批写SQL,其中有一条失败,提示事务回滚。然而,回滚似乎并未成功完成。目的是在业务代码没有报错的情况下,确定回滚过程中是否出现错误。
有时人们会进行他们不希望的插入、更新或删除,并希望恢复他们的更改(或撤消它们)。是否有数据库可以让这件事变得容易(即是否有数据库跟踪对它所做的每一次插入、更新、删除,以便您可以在特定时间之前重新创建整个数据库)?
我有一个非常大的表,需要将架构更改为一列 - 我需要将数据类型从 varchar(50) 扩展到 varchar(100)。我预计这会很快发生,因为列数据类型已经是可变的,并且显然该列中当前没有数据必须更改。但是在命令运行了几分钟后,我决定退后看一看。现在,在杀死 SPID 之后,回滚已经发生了一个多小时(比命令运行的时间长得多)。当我用 statusonly 运行“kill”时,它说:
SPID 82:正在进行事务回滚。预计回滚完成:0%。预计剩余时间:0 秒。
sp_WhoIsActive 将等待显示为 IO_Completion。
为什么回滚ALTER TABLE foo ALTER COLUMN bar varchar(100) NULL
会像这样卡住?列栏现在是 varchar(50)。
更新:大约 3 小时后回滚完成。我仍然想知道为什么这需要这么长时间才能回滚。
想象在一个共享数据库上有多个客户(例如),并且需要一个备份系统,以便可以回滚单个客户而不影响其他客户。- 客户自己是否可以下令回滚或只有某种管理员可以下令并不重要,但出于多种原因,为每个客户拥有一个数据库不是一种选择。
编辑:会有一个客户表,但客户的数据将分布在许多表中。也许是因为客户可以添加只有他们可以访问的东西。\编辑
怎样才能最好地做到这一点?
我考虑了以下选项(不介意顺序):
#1 定期进行数据库备份并建立一种机制,清除所有相关表中的所有相关行,然后从备份文件中读取客户数据并将其插入数据库。随着数据库的变化,必须维护这种机制。
#2 为每个相关表制作一个影子表。所需的机制与#1 基本相同,但不需要从外部备份文件中读取。随着数据库的变化,必须维护机制和影子表。如果客户需要能够自主订购回滚,这将比 #1 更好。
我缺少任何选项吗?有什么我应该注意的吗?最重要的是:做这种事情的任何最佳实践?
我正在使用 PostgreSQL,以防万一包含任何可以提供帮助的东西。
我们在我们的 ALWAYS-ON HA 集群上运行 SQL Server 2016 Standard Edition 2016 SP2-CU4。
由于最近的一些问题,我们的一个节点损坏了,我们不得不用新节点替换它。由于这是来自 AWS Marketplace 的全新镜像,它附带了开箱即用的 SP2-CU13(最新)。
客户希望将其回滚到原始 SP2-CU4(没有升级到 CU13 的计划/要求)。
作为主要步骤,我尝试在实例上安装 SP2-CU4 KB 文章,但这不适用于附加的错误消息。(无法在此计算机上更新 SQL Server 实例或功能)
Q1 - 如何在服务器上安装 SP2-CU4。
Q2 - 如果集群在不同的 CU 上运行会有什么影响。
我想运行一个查询,但只是为了测试它并有可能回到我看到回滚事务的先前状态。
我之前必须运行这个命令吗?
delete * from myTables
where colName = "***"
应用程序中的错误进行了一些更改,现在我需要在没有备份的情况下回滚
我可以为此使用日志文件吗?
“回滚”是另一种选择吗?
信息:
- 我的恢复模式设置为简单
-AutoCommit 尚未设置
- 当我尝试使用还原任务时,它告诉我“没有选择要还原的备份集”
我正在使用 SQL Server 2014 Express
似乎在发生诸如数据锁定之类的事件时重新启动 SQL Server 并不是(总是)这样一个好主意。http://www.sqlpassion.at/archive/2016/08/08/restarting-sql-server-always-a-good-idea/
我想具体问下SQL Server Restart会回滚未提交事务的问题。
我的同事跑了SELECT @@TRANCOUNT
,得了零分。因此,他假设重新启动 SQL Server 不会导致任何类型的回滚。尽管如此,从一张桌子移到另一张桌子的位置在重新开始后又移回了原处。
SELECT @@TRANCOUNT
是否存在即使返回零也会发生回滚的情况?
有谁知道在不将数据库设置为单用户模式的情况下将文件组设置为 AUTOGROW_ALL_FILES 的方法吗?我经常将新的文件组/文件添加到 24/7 生产数据库,其中终止活动会话和回滚事务(通过 SET SINGLE_USER WITH ROLLBACK IMMEDIATE)绝对不是首选。IMO 此操作应该能够与数据库上的其他活动会话一起完成。