Questions tagged «transaction»

一种将一组一致的更改自动提交到数据库的机制。

2
SQL Server中的批处理中止错误列表
在SQL Server中,如果XACT_ABORT关闭,则某些错误将终止当前语句(例如,向使用某些参数的存储过程提供不正确数量的参数),而某些错误将中止整个批处理(例如,将参数提供给存储的不带参数的程序)。[参考]:http : //www.sommarskog.se/error-handling-I.html#scope-abortion。 我想知道的是,是否有明确的列表列出哪些错误正在批处理中止,哪些错误正在语句终止。

2
SQL Server作业中的事务和try-catch
在SQL Server作业的每个步骤中,我们都有DML操作。为了确保更新/插入的情况下将回滚不顺心的事,我已经包裹的数据修改的每一步中TRY CATCH和TRANSACTION块: BEGIN TRY BEGIN TRANSACTION [[INSERT/update statements]] ... IF @@TRANCOUNT > 0 BEGIN COMMIT TRANSACTION PRINT 'Successful.' END END TRY BEGIN CATCH SELECT ERROR_NUMBER() AS ErrorNumber, ERROR_SEVERITY() AS ErrorSeverity, ERROR_STATE() AS ErrorState, ERROR_PROCEDURE() AS ErrorProcedure, ERROR_LINE() AS ErrorLine, ERROR_MESSAGE() AS ErrorMessage IF @@TRANCOUNT > 0 BEGIN ROLLBACK TRANSACTION …

2
SQL Server事务超时
SQL Server 2008 R2中是否有办法导致涉及事务的数据库修改超时?在一种情况下,我们的应用程序代码会挂起或引发异常,并且无法执行回滚或提交。然后,这导致其他会话挂起,等待事务完成。

3
SQL Server-非阻塞选择语句的隔离级别是多少?
我有一个运行很长时间的事务(称为T1),该事务在SQL Server 2008 R2中的表上执行一些删除,更新和插入操作。同时,另一个进程会定期运行该表中的select语句。 在默认隔离设置下(我认为是READ COMMITTED吗?),T1会阻止所有select语句运行,直到事务提交或回滚为止。 我希望看到的是即使事务正在进行中,select语句也可以在一致的数据上起作用。我相信SNAPSHOT隔离可以提供帮助,但是不确定我的方向是否正确。这是此应用程序的最佳隔离级别吗? 其次,我对调用select语句的过程没有任何控制,但对调用T1的.NET应用程序有控制。在select语句和T1上是否都需要进行任何隔离级别更改,或者仅将T1标记为具有不同的隔离级别就足够了吗?

3
RAM或物理文件中的事务日志?
我是交易的初学者,只是有关交易日志的问题。我们知道在提交事务时,更改将写入事务日志,但是事务日志是否在RAM或物理文件中?如果它在RAM中并且发生系统故障时,显然RAM将被重新擦除,因此我们丢失了事务信息,那么如何恢复提交?

2
COMMIT是否可以在PostgreSQL 9.5的匿名plgpsql函数中工作?
我正在将大量大文件导入到许多表中,这些表将使用匿名plpgsql代码块内的循环进行分区$do$。 $do$ BEGIN FOR yyyy in 2012..2016 THEN EXECUTE $$COPY table$$||yyyy||$$ FROM 'E:\data\file$$||yyyy||$$.csv DELIMITER ',' CSV;$$; END LOOP; END; $do$ LANGUAGE plpgsql 整个过程大约需要15个小时,我希望如果某个时刻出现导入错误,所有导入都不会回滚。 IIRC COMMIT在存储的函数中不起作用,因为整个函数被视为单个事务。 从文档中$do$ 将代码块视为没有参数的函数的主体,并返回void。它被解析并执行一次。 我假设这意味着整个$do$事务是一个事务,因此在该块内的提交将不起作用。我对么?

3
为什么时态表记录事务的开始时间?
更新临时表中的行时,该行的旧值存储在历史记录表中,事务开始时间为SysEndTime。当前表中的新值将使事务开始时间为SysStartTime。 SysStartTime并SysEndTime在datetime2使用时态表来记录当行是当前版本列。事务开始时间是包含更新的事务开始的时间。 BOL说: 系统datetime2列中记录的时间基于事务本身的开始时间。例如,在单个事务中插入的所有行将在与SYSTEM_TIME周期开始相对应的列中记录相同的UTC时间。 示例:我开始从以下位置更新“订单”表中的所有行,20160707 11:00:00并且该事务需要5分钟才能运行。这将在历史记录表中为每行创建一行,并用SysEndTimeas 20160707 11:00:00。在当前表中的所有行会产生SysStartTime的20160707 11:00:00。 如果有人要20160707 11:01:00在更新运行时执行查询,他们将看到旧值(假设默认读取已提交隔离级别)。 但是,如果有人随后使用AS OF语法查询时态表,那么20160707 11:01:00他们将看到新值,因为它们SysStartTime将是20160707 11:00:00。 对我来说,这意味着它不会显示当时的行。如果它使用事务结束时间,则该问题将不存在。 问题:这是设计使然吗?我想念什么吗? 我可以认为它正在使用事务开始时间的唯一原因是,它是事务开始时唯一的“已知”时间。它不知道事务在开始时将在何时结束,并且在结束时应用结束时间将花费一些时间,这将使正在应用的结束时间无效。这有意义吗? 这应该允许您重新创建问题。

1
提交和回滚只读事务是否存在性能差异?
我打开(可重复读取)事务(BEGIN TRAN),对某些记录进行一些处理。我要做的第一件事是检查我需要更改的数据是否在数据库中。在某些情况下,我会进行更改。但是在某些情况下,这无关紧要。在这种情况下,我要么COMMIT TRAN还是ROLLBACK TRAN和返回从存储过程。目前,尚未对数据进行任何更改,因此提交和回滚的效果是相同的。 我应该在提交和回滚之间选择任何考虑因素吗?有不同的性能成本吗?其他考虑因素?

1
如何终止等待IO_COMPLETION的暂停的SQL Server事务?
我们有一个已运行5个小时以上的交易。我们的磁盘空间不足。会话已被终止,但仍在等待IO_COMPLETION。实际上,wait_type刚刚更改为PAGEIOLATCH_EX。如何终止已暂停的SQL Server事务?我不担心丢失数据,因为所有数据都可以重新填充。 session_id: 54 STATUS: suspended blocked by: 0 wait_type: PAGEIOLATCH_EX Elapsed Time (in Sec): 19750.420000 open_transaction_count: 2

3
“当连接关闭并返回到池时,保留来自最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别”?
MSDN在线文章“ SQL Server中的快照隔离 ”指出: “隔离级别具有连接范围的范围,并且一旦使用SET TRANSACTION ISOLATION LEVEL语句设置了连接,它将一直有效,直到关闭连接或设置另一个隔离级别为止。当关闭连接并返回到池中时,则保留了最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别。后续重用池化连接的连接将使用在池化连接时生效的隔离级别。” 这是不矛盾的段落(“直到”还是“保留”)? 然后,如果在关闭连接并将其返回到池之后,“ 保留了与最后一个SET TRANSACTION ISOLATION LEVEL语句的隔离级别”,则应如何理解: 默认隔离级别将具有任意值(池中的不同连接将具有不同的隔离级别,并且其值将取决于重新打开的连接)? 还是池中所有连接的所有默认值都将更改为最后一个?但是又是未知数吗?

1
UserDB选择结果的特定TempDB插入将SOS_SCHEDULER_YIELD中的结果转换为ENCRYPTION_SCAN
我们的其中一个生产系统出现了一个问题,即从我们的用户数据库向临时表插入一条插入语句。当我注释掉插入/选择时,有问题的存储过程会及时运行,因此我对问题的隔离很有信心。 当我取消注释有问题的插入/选择时,调用的一系列存储过程基本上停止了。在tempdb或我们的任何用户数据库中,我看不到“按年龄划分的热门交易”中的任何内容。当数据库处于“静止”状态时,我看不到活动监视器中有任何偏离活动监视器信息的东西,除了CPU的平坦度约为20%。 行为如下:当我设置然后执行重现情况时,到达有问题的插入/选择时,我看到一个SOS_SCHEDULER_YIELD并有一个ENCRYPTION_SCAN。大约五个小时后,我将看到对存储过程的处理恢复并且该活动将完成(我在每个不同的操作周围放入了快速且肮脏的日志语句)。 我还用执行时的值替换了插入的选择部分中的变量,并运行选择查询本身,并在五秒钟内将其返回。 有问题的用户数据库的加密启用值为FALSE,tempdb也是如此。有问题的操作发生在大约65k行数据上,我仅用1k行进行了尝试,并且这种行为仍然存在,尽管花费的时间要少得多。 单个用户数据库是此行为的唯一实例。我已经通过该用户数据库的备份在本地复制了它。我们还有大约70个该软件的其他用户没有出现此问题。 鉴于上述信息,我的问题是,为什么我们的存储过程停止处理?由于可能希望获得一个准确的答案,因此调试此错误的正确步骤是什么?DMV之一中可能有某些东西,例如dm_tran_locks,dm_exec_requests,dm_tran_database_transactions,dm_os_schedulers,dm_exec_sessions,尽管它们为我提供了一些信息,但我并没有以指向解决方案的方式来解释或理解输出。 以下是有问题的插入/选择: INSERT INTO #TS_EVENT_DATA ( EVENT_FK, EVENT_TYPE_CR_FK, EVENT_ENTITY_CLASS_CR_FK, userDatabase_ID, DATA_NAME_FK, IMPORT_JOB_FK, PRODUCT_STRUCTURE_FK, ORG_ENTITY_STRUCTURE_FK, ENTITY_CLASS_CR_FK, ENTITY_DATA_NAME_FK, ENTITY_STRUCTURE_FK, DATA_SET_FK, DATA_TYPE_CR_FK, ORG_IND, TABLE_NAME, NET_VALUE1_NEW, NET_VALUE2_NEW, NET_VALUE3_NEW, NET_VALUE4_NEW, NET_VALUE5_NEW, NET_VALUE6_NEW, NET_VALUE1_CUR, NET_VALUE2_CUR, NET_VALUE3_CUR, NET_VALUE4_CUR, NET_VALUE5_CUR, NET_VALUE6_CUR, PERCENT_CHANGE1, PERCENT_CHANGE2, PERCENT_CHANGE3, PERCENT_CHANGE4, PERCENT_CHANGE5, PERCENT_CHANGE6, VALUE_UOM_CODE_FK, ASSOC_UOM_CODE_FK, VALUES_SHEET_NAME, UOM_CONVERSION_FACTOR, END_DATE_CUR, …

2
交易,参考资料以及如何执行双重记账?(PG)
两次入境簿记是 一套用于在财务会计系统中记录财务信息的规则,其中每个交易或事件都会更改至少两个不同的名义分类帐。 帐户可以是“借方”或“贷方”,所有贷方的总和必须等于所有借方的总和。 您将如何在Postgres数据库中实现这一点?指定以下DDL: CREATE TABLE accounts( account_id serial NOT NULL PRIMARY KEY, account_name varchar(64) NOT NULL ); CREATE TABLE transactions( transaction_id serial NOT NULL PRIMARY KEY, transaction_date date NOT NULL ); CREATE TABLE transactions_details( id serial8 NOT NULL PRIMARY KEY, transaction_id integer NOT NULL REFERENCES transactions (transaction_id) ON UPDATE …

2
我可以使用事务日志来重建数据库吗?
我们似乎丢失了一些数据,而且似乎没有可靠的备份。我们确实有巨大的事务日志,并且有人认为我们也许可以使用这些日志来回到某个特定点。 是否可以使用事务日志来帮助重建数据库? SQL Server 2008 R2,顺便说一句。 (x从stackoverflow发布)

3
使用MySQL触发器或事务?
我想问一下您在网站上使用MySQL触发器或事务的意见。 实际上,我有一个payment带有- 的历史记录表UserId | OperationId | Comment | Credits | Sign (debit or credit)。因此,每个付款操作都会插入此表中。 但是,计算用户每次执行操作时的总信用额度将非常耗时。因此,我认为将每个用户的总信用额保留在用户profile表中可能是一个好主意。 这是问题所在。如何确定表格中的总贷方金额profile与payment历史记录表格中的操作保持同步? 我认为使用2种方法: MySQL触发器或 源代码中编码的交易 哪个更可靠?如果我有大型数据库(超过100.000个用户)怎么办? 您对此有何建议? BD 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.