Questions tagged «rollback»

通过恢复到交易所做的更改来结束交易。

2
适用于MySQL的事务性DDL工作流程
我有点惊讶地发现,DDL语句(alter table,create index等)隐含在MySQL提交当前事务。来自MS SQL Server,能够在本地事务中进行数据库更改(然后被回滚)的能力是我工作流程的重要组成部分。对于连续集成,如果由于某种原因导致迁移失败,则使用回滚,以便至少我们不会使数据库处于半迁移状态。 人们在将MySQL与迁移和持续集成结合使用时如何解决这两个问题?

4
为什么某些DBMS不允许某些DDL语句回滚?
最近,我发现MySQL 不支持DDL的回滚,例如“ alter table”。习惯于PostgreSQL,这让我感到奇怪,但是我的一个朋友告诉我,即使Oracle也不允许。有不支持它的技术原因吗?对于他们来说,这仅仅是一个“无趣的”功能吗? 编辑:刚刚发现此比较。它看起来像有很多的DBMS是做支持事务DDL。


2
插入期间磁盘空间已满,会发生什么?
今天,我发现存储我的数据库的硬盘驱动器已满。这是以前发生的,通常原因很明显。通常会有一个错误的查询,这会导致大量的溢出到tempdb,直到磁盘装满为止。这次不太清楚发生了什么,因为tempdb不是驱动器满载的原因,而是数据库本身。 事实: 通常的数据库大小约为55 GB,后来增加到605 GB。 日志文件大小正常,数据文件很大。 数据文件具有85%的可用空间(我将其解释为“空气”:已使用但已释放的空间。SQLServer分配后将保留所有空间)。 Tempdb大小正常。 我发现了可能的原因;有一个查询选择了太多行的查询(错误的联接会导致选择110亿行,预计会有几十万行)。这是一个SELECT INTO查询,使我想知道是否可能发生以下情况: SELECT INTO执行 目标表已创建 数据被选择时插入 磁盘已满,导致插入失败 SELECT INTO被中止并回滚 回滚可以释放空间(已插入的数据将被删除),但是SQL Server不会释放释放的空间。 但是,在这种情况下,我不希望由创建的表SELECT INTO仍然存在,应该通过回滚将其删除。我测试了这个: BEGIN TRANSACTION SELECT T.x INTO TMP.test FROM (VALUES(1))T(x) ROLLBACK SELECT * FROM TMP.test 结果是: (1 row affected) Msg 208, Level 16, State 1, Line 8 Invalid object name 'TMP.test'. …


2
这两个SQL Server回滚有何不同?
在SQL Server 2008 R2中,这两个回滚有何不同: 运行ALTER语句几分钟,然后单击“取消执行”。完全回滚需要几分钟。 运行相同的ALTER语句,但是请确保该LDF文件的大小不足以使其成功完成。一旦达到LDF限制并且不允许“自动增长”,查询执行将立即停止(或发生回滚),并显示以下错误消息: The statement has been terminated. Msg 9002, Level 17, State 4, Line 1 The transaction log for database 'SampleDB' is full. To find out why space in the log cannot be reused, see the log_reuse_wait_desc column in sys.databases 这两个方面在以下几点上有何不同? 为什么第二个“回滚”是瞬时的?我不确定是否可以将其称为回滚。我的猜测是,事务日志是在执行过程中编写的,一旦它意识到没有足够的空间来完全完成任务,它就会以一些“结束”消息停止,而不会提交。 第一次回滚需要很多时间(回滚是单线程的)会发生什么? 2.1。SQL Server会返回并撤消LDF文件中的输入吗? 2.2。该LDF文件大小在回滚结束变得更小(从DBCC …

2
INSERT INTO新创建的目标表后,ROLLBACK不起作用
我正在研究将CSV文件(customers.csv)导入MySQL表(customers)的PHP脚本。 在将CSV文件的内容插入mysql表之前,我首先备份原始customers表。 我将整个导入过程(包括备份)包装在mysql事务中(以解决CSV在中间某处损坏的情况,并确保导入是原子的)。 问题是,当我在INSERT INTO语句后立即调用它时,ROLLBACK似乎不起作用:通过phpMyAdmin检查数据库时,我可以看到新创建的表,并且roollback之后仍存在ROWS INSIDE IT。 这是操作日志: [2015-01-19 14:08:11] DEBUG: "START TRANSACTION" [] [] [2015-01-19 14:08:11] DEBUG: SHOW TABLES LIKE :table_name; [] [] [2015-01-19 14:08:28] DEBUG: CREATE TABLE `customers__20150119_14_08_20` LIKE `customers` [] [] [2015-01-19 14:08:37] DEBUG: INSERT INTO `customers__20150119_14_08_20` SELECT * FROM `customers` [] [] [2015-01-19 14:08:50] DEBUG: "ROLLBACK" …

2
MongoDB副本集次要卡在“ ROLLBACK”状态
在我们的mongodb的最近一次自动更新过程中PRIMARY,当PRIMARY卸任时它永久进入ROLLBACK状态。 在该ROLLBACK状态下几个小时后,mongodb数据库目录.bson中的rollback目录中仍然没有回滚文件。那以及我们日志文件中的这一行:[rsSync] replSet syncThread: 13410 replSet too much data to roll back似乎表明该ROLLBACK过程失败了。 我想帮助您分析到底出了什么问题。 在我们的日志中似乎发生了两种不同的回滚。是这种情况还是花了3个小时? 如果第一次回滚成功(在19:00时)成功,为什么ou rollback目录中没有出现任何内容? 对所有这些警告的起因有任何猜测吗?可能与回滚失败有关吗? 我们是否由于第一次丢失了18秒的数据ROLLBACK? 是否有解决“卡在ROLLBACK状态”问题的通用解决方案?我们最终不得不使用整个数据库,并从主数据库重新同步。 相关的日志行是: # Primary coming back after restart... Tue May 15 19:01:01 [initandlisten] MongoDB starting : pid=3684 port=27017 dbpath=/var/lib/mongodb 64-bit host=magnesium Tue May 15 19:01:01 [initandlisten] db version v2.0.5, pdfile version 4.5 …
11 mongodb  rollback 

2
删除带有待处理事务的MySQL表
有没有办法删除MySQL中具有待处理事务的InnoDB表或数据库(最好在文件系统级别)? 发生了什么: 我使用MySQL 5.5.28并运行LOAD DATA INFILE…将一个巨大的数据集(300M行)导入InnoDB表。我以前没用过set autocommit = 0;。不幸的是,mysqld在导入过程中被阻止了。 当我重新启动时mysql,它将尝试回滚使用以下消息填充系统日志的事务: mysqld_safe [4433]:121212 16:58:52 InnoDB:等待1个活动事务完成 问题是回滚现在已经运行了25多个小时,在此期间 mysqld不接受任何套接字连接。 我不能只是删除/var/lib/mysql/*并从头开始,因为这台机器上还有其他一些InnoDB数据库/表。但是,有问题的表是单独数据库中的唯一表。删除整个表或整个数据库不是问题,因为之后我可以重新导入所有数据。
By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.