Questions tagged «transaction»

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


6
如果我们在sql-server中启用读取已提交的快照,会有什么风险?
我在这里已经读到,每行将存储一些额外的数据,因此我们可能会看到性能下降,但是还有哪些其他风险? 例如。这会影响数据库的恢复吗?我们还需要采取其他措施来利用这一优势吗? 我计划执行以下命令: ALTER DATABASE DatabaseName SET READ_COMMITTED_SNAPSHOT ON ALTER DATABASE DatabaseName SET ALLOW_SNAPSHOT_ISOLATION ON 我相信这将使我们更接近oracle,如果一个事务正在更新,其他事务仍可以读取旧数据。这个对吗? 我正在研究此问题,因为我厌倦了SQL Server 2005中的锁定问题。我希望这可以减少用户偶尔看到的死锁,有助于提高应用程序的整体性能,并鼓励我们的开发人员为每个事务执行多个操作而无需恐惧。

9
要求不要使用事务并使用替代方法来模拟事务
我从事T-SQL的开发已经有好几年了,并且一直在不断深入研究,继续学习有关该语言各个方面的所有知识。我最近开始在一家新公司工作,收到了我认为关于交易的奇怪建议。永远不要使用它们。而是,使用一种模拟交易的解决方法。这来自于我们的DBA,该DBA在一个数据库中处理大量事务,并随后进行大量阻塞。我主要工作的数据库没有出现此问题,并且我看到过去使用过事务。 我了解交易会受到阻碍,因为这样做本质上就是这样做的,如果您不使用任何交易就可以逃脱,那就一定要这样做。但是在很多情况下,每个语句必须成功执行。如果失败了,那么所有人都必须提交。 我一直将交易范围保持在尽可能狭窄的位置,始终与SET XACT_ABORT ON结合使用,并且始终在TRY / CATCH中使用。 例: CREATE SCHEMA someschema; GO CREATE TABLE someschema.tableA (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColA VARCHAR(10) NOT NULL ); GO CREATE TABLE someschema.tableB (id INT NOT NULL IDENTITY(1, 1) PRIMARY KEY, ColB VARCHAR(10) NOT NULL ); GO CREATE PROCEDURE someschema.ProcedureName @ColA …

4
如何找出谁删除了一些SQL Server数据
我的老板昨天从一个客户那里询问,询问他们如何找到谁删除了他们在SQL Server数据库中的某些数据(如果重要的话,这是速成版)。 我以为可以从事务日志中找到它(假设它没有被截断)-这正确吗?如果是这样,您实际上将如何找到这些信息?

3
什么是“混沌”隔离级别?何时使用?
ADO.NET文档显示了将SQL事务的事务级别设置为Chaos的可能性。听起来不愉快,但是如果该功能存在,那么大概可以合理使用。 BOL中的SET TRANSACTION ISOLATION LEVEL命令(啊!看,我可以使用google和BOL)似乎什么都没有命名为“ chaos”,并且ADO.NET确实有5种模式,除了“ chaos”之外,它们还与已记录的级别很好地匹配 这个混沌水平是做什么的?(为什么它的名称不友好?) 参考: ADO.NET枚举

1
结合交易触发
假设我们有以下情况: 我们有一张桌子(假设Table_A),其中有一个触发器INSERT。触发工作是table_B根据中的插入值更新其中的某些行table_A。 现在,当我们在表中简单地插入一行时,一切正常,但是在通过事务插入数据的情况下呢?触发器将等待所有事务语句成功运行,还是在识别到插入后立即触发?如果触发器在识别出第一个插入后立即触发,那么如果事务在最后一行失败,会发生什么?有什么机制可以解决这种情况吗?

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

7
Oracle-以任何方式查看对特定表的未提交的更改?
我目前正在通过批处理过程进行调试,该批处理过程执行许多DML语句,但不会立即进行提交。能够在未提交事务的情况下查看另一个会话中的“待处理”更改将是很好的。这可能吗? 例: Insert into table myTable (col1, col2) values ("col1", "col2"); --Somehow view the pending transaction maybe by system view?.... ...other DML statements.... commit;

2
从一个存储过程启动3个存储过程时如何回滚
我有一个存储过程,其中仅执行3个存储过程。如果主控SP成功,我仅使用1个参数进行存储。 如果第一个存储过程在主存储过程中工作正常,但是第二个存储过程失败,那么它将自动回滚主SP中的所有SP还是我必须发出一些命令? 这是我的程序: CREATE PROCEDURE [dbo].[spSavesomename] -- Add the parameters for the stored procedure here @successful bit = null output AS BEGIN begin transaction createSavebillinginvoice begin Try -- SET NOCOUNT ON added to prevent extra result sets from -- interfering with SELECT statements. SET NOCOUNT ON; BEGIN EXEC [dbo].[spNewBilling1] END …

1
MySQL交易大小-太大太大了吗?
我有一个经常运行的导入过程,我希望它是一种“全有或全无”的交易,又名:交易。 涉及的方面很多,进口量可能在10万至100万以上的记录之间。这相当于有效载荷范围从几MB到几百MB的数据。 我知道临时表是另一种选择-但是此方法似乎很方便。 对于这种在提交之间进行大量数据操作的做法,是否有需要注意的警告?(提交后在典型的写/索引加载突发之外)

2
我可以选择插入同一未提交事务中的数据吗?
也许这是一个愚蠢的初学者问题,但是我在任何地方都找不到答案。我到处都读到关于的信息Transaction Isolation,它解决了并发事务中数据的可见性。我担心的是一次交易中的行为。 如果我开始交易,请插入一些数据,我是否可以立即选择它们-仍在同一但尚未提交的交易中?如果是,在并发事务的情况下,是否可以像上述事务隔离那样以类似的方式更改此行为? 具体来说,我的目标是PostgreSQL 9.4。

1
如何在SQL Server DDL中使用事务?
我有一个登录表,所有插入都通过一个存储过程完成。 CREATE TABLE dbo.LogTable( LogRefnr int IDENTITY(1, 1) NOT NULL, LogQuery varchar(255) NOT NULL, LogTime datetime NOT NULL, logQueryDuration int NULL, LogSessionID int NULL, CONSTRAINT PK_Log PRIMARY KEY CLUSTERED (LogRefnr) ) go Create procedure DBO.LogInsert ( @Query varchar(255), @time datetime, @duration int, @SessinID int) as begin Insert into LogTable ( …


4
交易中的交易
如果例如以下脚本被调用,PostgreSQL将显示什么行为? BEGIN; SELECT * FROM foo; INSERT INTO foo(name) VALUES ('bar'); BEGIN; <- The point of interest END; PostgreSQL会放弃第二个BEGIN还是会隐式地决定提交,然后BEGIN END作为单独的事务最后运行该块?

3
休眠的SPID阻止了其他事务
我确实很难找到我们遇到的一些障碍。 根阻止SPID的状态为“正在休眠”,cmd为“正在等待命令”,并且sqltext为SET TRANSACTION ISOLATION LEVEL READ COMMITTED。 当我查看“按阻塞的交易计数列出的最高交易”报告时,阻塞的SQL语句为“-”。 我已经在SQL上执行了跟踪,并且当阻塞发生时是在跟踪根阻塞SPID,但它并没有真正引导我到任何地方。最后一个trace语句与sqltext上面的相同SET TRANSACTION ISOLATION LEVEL READ COMMITTED。 我检查了所有可以找到的相关存储过程,以确保它们具有TRY / CATCH BEGIN TRAN / COMMIT TRAN / ROLLBACK TRAN语句(我们将存储过程用于所有内容,因此没有独立的语句在运行)。该问题在过去的24小时内才刚刚开始发生,并且没有人声称对系统进行了任何更改。 解决方案:我们很少使用的存储过程之一有一个插入错误(列数不匹配),但是我们仍然对正在发生的事情感到困惑。 查看所有跟踪信息时,有时会列出该存储过程的EXEC语句,但绝不会在阻塞SPID上发生BLOCK之前。看来,当它开始阻塞时,跟踪并没有记录它(或其中的任何一条语句)的执行情况。但是,还有其他时间跟踪确实记录了它的执行并且没有发生阻塞。 存储过程错误报告来自用户,我能够在跟踪中找到多个EXEC语句并在SSMS中运行它们。当我运行它们时,我们没有任何阻塞发生或挂起的情况。它们按预期运行(错误后触发catch块并回滚了事务)。解决了存储过程的问题后,我们再也没有看到此问题。

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.