javascript

java

python

c#

android

c++

node.js

php

html

jquery

ios

reactjs

css

.net

git

ruby-on-rails

sql

c

ruby

string

.net-TransactionScope和多线程

我想知道在处理多线程时如何正确使用TransactionScope类?

我们在主线程中创建一个新的作用域,然后生成几个工作线程,并希望它们参与主作用域,例如,如果该作用域从未完成,则在每个工作线程上调用回滚。

我在内部使用ThreadStaticAttribute读取了有关TransactionScope的内容,这使上述操作变得不可能/非常困难-有人可以验证这两种方法吗? 如果我们以同步的方式用完代码,那么回滚将起作用,即内部事务能够参与主事务,但是如果我们切换到线程执行则不能。

谢谢

trans by 2020-08-12T07:09:27Z

SQL Server如何处理存储过程中有关事务的语句?

说我有一个存储过程,该过程由几个单独的SELECT,INSERT,UPDATE和DELETE语句组成。 没有明确的BEGIN TRANS / COMMIT TRANS / ROLLBACK TRANS逻辑。

SQL Server将如何以事务方式处理此存储过程? 每个语句都会隐式连接吗? 还是存储过程会有一笔交易?

另外,如何使用T-SQL和/或SQL Server Management Studio独自发现这一点?

谢谢!

trans by 2020-08-12T03:38:24Z

连接关闭后,未提交的事务将如何处理?

他们会立即回滚吗?一段时间后它们会回滚吗?他们是否处于未提交状态?

如果使用连接池并且仅重置连接,行为是否相同?

trans by 2020-08-06T15:59:46Z

带有ADO.NET的SQL Server的默认事务隔离级别是什么?

带有ADO.NET的SQL Server的默认事务隔离级别是什么? 我正在使用SQL Server的默认安装,而仅使用普通的System.Data.SqlClient类。

trans by 2020-07-13T17:31:37Z

java-在Spring bean中启动新事务

我们有:

@Transactional(propagation = Propagation.REQUIRED)
public class MyClass implementes MyInterface { ...

MyInterface具有单个方法:go()

当go()执行时,我们开始一个新的事务,该事务在方法完成时进行提交/回滚-很好。

现在,在go()中说,我们在MyClass中调用了一个私有方法,该方法具有go()。Spring似乎“忽略”了REQUIRES_NEW批注,并且没有启动新的事务。 我相信这是因为Spring AOP在接口级别(MyInterface)上运行,并且不会拦截对MyClass方法的任何调用。 这样对吗?

有什么办法可以在go()事务中启动新事务? 调用另一个已将事务配置为REQUIRES_NEW的Spring托管Bean的唯一方法是吗?


更新:添加当客户端执行go()时,它们通过对接口而非类的引用来执行:

@Autowired
MyInterface impl;

impl.go();
trans by 2020-07-10T12:03:04Z

片段事务上的片段重复

好的,每当我尝试替换应用程序中的一个片段时,它只会将该片段添加到另一个片段所在的容器中,而保留当前片段。 我尝试调用replace并引用包含片段的视图,并通过引用片段本身。 这些都不起作用。 我可以使用片段事务管理器将片段添加到视图中,但是即使我尝试在添加片段后将其删除,也无法使用。 任何帮助,将不胜感激。 这是我的文件。

public void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);
    setContentView(R.layout.main);

    //Setup the actionabar. Use setDrawableBackground to set a background image for the actionbar.
    final ActionBar actionbar = getActionBar();
    actionbar.setDisplayShowTitleEnabled(false);
    actionbar.setDisplayUseLogoEnabled(true);
    actionbar.setNavigationMode(ActionBar.NAVIGATION_MODE_TABS);
    actionbar.addTab(actionbar.newTab().setText(R.string.home_tab_text).setTabListener(this),true);
    actionbar.addTab(actionbar.newTab().setText(R.string.insert_tab_text).setTabListener(this));

    Fragment fragment = new insert_button_frag();
    FragmentTransaction transaction = getFragmentManager().beginTransaction();
    transaction.replace(R.id.button_fragment, fragment);
    transaction.addToBackStack(null);

    transaction.commit();
}

这是布局

<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
    android:orientation="vertical"
    android:layout_width="fill_parent"
    android:layout_height="fill_parent">

    <LinearLayout
        android:orientation="vertical"
        android:id="@+id/button_fragment_container"
        android:layout_width="fill_parent"
        android:layout_height="wrap_content" >

        <fragment
            android:name="com.bv.silveredittab.home_button_frag"
            android:id="@+id/button_fragment"
            android:layout_width="fill_parent"
            android:layout_height="wrap_content" />

    </LinearLayout>

    <LinearLayout
        android:orientation="horizontal"
        android:layout_width="fill_parent"
        android:layout_height="fill_parent" >

        <fragment
            android:name="com.bv.silveredittab.quick_insert_frag"
            android:id="@+id/quick_insert_frag"
            android:layout_width="350dip"
            android:layout_height="fill_parent" />

        <fragment
            android:name="com.bv.silveredittab.editor_frag"
            android:id="@+id/editor_frag"
            android:layout_width="fill_parent"
            android:layout_height="fill_parent" />

    </LinearLayout>

</LinearLayout>

这是片段代码

public class insert_button_frag extends Fragment {

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container, Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        return inflater.inflate(R.layout.insert_buttons,container, false);
    }
}

就像我说的。 我尝试引用片段父视图来替换它,并且片段本身(通过id)仍然将它仅添加新片段,在原始片段所在的包含视图内。

trans by 2020-07-08T08:35:18Z

sql server-sql try / catch rollback / commit-防止在rollb之后错误提交

我正在尝试编写具有事务和try / catch块的MS sql脚本。 如果捕获到异常,则事务将回滚。 如果不是,则提交事务。 我看过几个不同的网站说要这样做:

begin transaction
begin try
    --main content of script here
end try
begin catch
    rollback transaction
end catch

commit transaction

但是,即使在捕获异常的情况下,我们仍然不会达到“提交交易”行吗? 因为事务已经回滚,这不会导致SQL错误吗? 我认为应该这样做:

declare @success bit = 1

begin transaction
begin try
    --main content of script here
end try
begin catch
    rollback transaction
    set @success = 0
end catch

if(@success = 1)
begin
    commit transaction
end

通常发布的解决方案如何不包含@success变量? 提交已回滚的事务是否没有发生SQL错误? 我在说第一个代码示例的“提交事务”行在捕获异常的情况下仍然会被打错,这是不对的吗?

trans by 2020-07-01T09:59:46Z

为什么SQL数据库在命令日志上使用预写日志?

我阅读了有关Voltdb的命令日志。 命令日志记录事务调用,而不是像预写日志一样记录每个行更改。 通过仅记录调用,命令日志将保持在最低限度,从而限制了磁盘I / O对性能的影响。

谁能解释为什么Voltdb使用命令日志以及为何标准SQL数据库(例如Postgres,MySQL,SQLServer,Oracle)使用预写日志的数据库理论?

trans by 2020-06-26T23:31:20Z

java-春季交易需要vs需求新:回滚交易

我有一个具有REQUIRED事务属性的方法:

@Transactional(propagation = Propagation.REQUIRES_NEW)
public void createUser(final UserBean userBean) {
    //Some logic here that requires modification in DB
}

可以同时多次调用此方法,并且对于每个事务,如果发生错误而不是将其回滚(独立于其他事务),则将被多次调用。

问题在于,这可能迫使Spring创建多个事务,即使另一个事务可用,也可能会导致一些性能问题。


REQUIRED的Java文档说:Support a current transaction, create a new one if none exists.

这似乎解决了性能问题,不是吗?

回滚问题呢? 如果在使用现有事务时新方法调用回滚怎么办? 那会不会回滚整个交易,即使以前的呼叫也是如此?

[编辑]我想我的问题还不够清楚:

我们有数百个客户端连接到我们的服务器。

对于每个客户,我们自然需要发送有关事务的反馈(确定或例外->回滚)。

我的问题是:如果我使用REQUIRED,这是否仅使用一个事务,并且如果第100个客户遇到问题,第一个客户的事务也会回滚?

trans by 2020-02-20T01:31:33Z

sequelize.js-Node.js 7如何在异步/等待中使用sequelize事务?

Node.js 7及更高版本已经支持异步/等待语法。 如何在异步事务中使用异步/等待?

trans by 2020-02-13T01:09:29Z

数据库-只读数据库访问的事务?

关于使用事务从数据库中读取数据似乎有很多不同的意见。

引用developerWorks文章交易策略:模型和策略概述:

为什么要进行交易,如果   您仅在读取数据? 答案   是你不知道 开始一个   事务以执行只读   操作增加了   处理线程并可能导致共享   读取数据库上的锁(取决于   您正在使用哪种数据库   以及设置的隔离级别   至)。

相反,Hibernate文档中引用了以下内容:非事务性数据访问和自动提交模式

我们的建议是不要使用   应用程序中的自动提交模式,以及   仅应用只读事务   当有明显表现时   受益或将来的代码更改时   可能性很小。 总是喜欢   将常规ACID交易分组   您的数据访问操作,   无论您阅读还是阅读   写数据。

EclipseLink邮件列表上也有类似的争论。

那么真相在哪里呢? 交易是否阅读最佳实践? 如果两者都是可行的解决方案,那么使用交易的标准是什么?

据我所知,只有隔离级别高于“读取提交”时,它才会有所作为。 它是否正确?

有什么经验和建议?

trans by 2020-02-07T18:59:32Z

php-事务内的MySQL事务

最近,在一个用于mysql数据库的PHP脚本中,我需要在恰好位于另一个事务内部的某个位置使用事务。 我所有的测试似乎都表明这很好,但是我找不到有关此用法的任何文档。

我想确定-交易中的交易在mysql中是否有效? 如果是这样,有没有一种方法可以找出嵌套事务中的层数? (即恢复正常状态需要多少回滚)

提前致谢,布赖恩

trans by 2020-01-30T08:52:01Z

java-将@Transactional放在哪里? 在接口规范或实现中?

这个问题已经在这里有了答案:

  • 我应该在接口定义或实现类中的@Transactional注解:放在哪里?                                     5个答案

放置@Transactional注释的最佳实践是什么? 我应该注释接口方法还是实现?

trans by 2020-01-28T12:15:00Z

实体框架-EF代码优先DBContext和事务

我想知道使用2722534421797797798912进行交易的最佳方法是什么。特别是,

  1. 如果我更改多个实体,则DbContext.SaveChanges是否在内部实现事务?
  2. 如果我想多次致电DbContext.SaveChanges(相同的上下文/不同的上下文),如何实现交易?
trans by 2020-01-28T12:10:11Z

Django中计数器的原子增量

我正在尝试以原子方式在Django中增加一个简单的计数器。 我的代码如下所示:

from models import Counter
from django.db import transaction

@transaction.commit_on_success
def increment_counter(name):
    counter = Counter.objects.get_or_create(name = name)[0]
    counter.count += 1
    counter.save()

如果我正确理解Django,则应将函数包装在事务中并使增量成为原子。 但这不起作用,并且计数器更新中存在竞争条件。 如何使此代码成为线程安全的?

trans by 2020-01-23T10:52:57Z

tsql-SQL Server:池连接之间的隔离级别泄漏

如先前的堆栈溢出问题(TransactionScope和连接池以及SqlConnection如何管理IsolationLevel?)所证明的那样,事务隔离级别在与SQL Server和ADO.NET(以及System.Transactions和EF的池连接)之间泄漏,因为它们建立在 ADO.NET)。

这意味着在任何应用程序中都可能发生以下危险的事件序列:

  1. 请求发生,需要显式事务以确保数据一致性
  2. 其他任何不使用显式事务的请求都会出现,因为它仅在执行非关键读取。 现在,该请求将以可序列化的方式执行,从而可能导致危险的阻塞和死锁

问题:预防这种情况的最佳方法是什么? 现在真的需要在任何地方使用显式事务吗?

这是一个自包含的副本。 您将看到第三个查询将继承第二个查询的可序列化级别。

class Program
{
    static void Main(string[] args)
    {
        RunTest(null);
        RunTest(IsolationLevel.Serializable);
        RunTest(null);
        Console.ReadKey();
    }

    static void RunTest(IsolationLevel? isolationLevel)
    {
        using (var tran = isolationLevel == null ? null : new TransactionScope(0, new TransactionOptions() { IsolationLevel = isolationLevel.Value }))
        using (var conn = new SqlConnection("Data Source=(local); Integrated Security=true; Initial Catalog=master;"))
        {
            conn.Open();

            var cmd = new SqlCommand(@"
select         
        case transaction_isolation_level 
            WHEN 0 THEN 'Unspecified' 
            WHEN 1 THEN 'ReadUncommitted' 
            WHEN 2 THEN 'ReadCommitted' 
            WHEN 3 THEN 'RepeatableRead' 
            WHEN 4 THEN 'Serializable' 
            WHEN 5 THEN 'Snapshot' 
        end as lvl, @@SPID
     from sys.dm_exec_sessions 
    where session_id = @@SPID", conn);

            using (var reader = cmd.ExecuteReader())
            {
                while (reader.Read())
                {
                    Console.WriteLine("Isolation Level = " + reader.GetValue(0) + ", SPID = " + reader.GetValue(1));
                }
            }

            if (tran != null) tran.Complete();
        }
    }
}

输出:

Isolation Level = ReadCommitted, SPID = 51
Isolation Level = Serializable, SPID = 51
Isolation Level = Serializable, SPID = 51 //leaked!
trans by 2020-01-16T23:00:15Z

.net-在交易中使用“ GO”

我正在构建一个Web应用程序,尝试在App_Start上安装/升级数据库。安装过程的一部分是确保数据库已安装asp.net功能。 为此,我正在使用System.Web.Management.SqlServices对象。

我的意图是在SQL事务中完成所有数据库工作,如果其中任何一个失败,请回滚该事务并使数据库保持不变。

SqlServices对象具有方法“ Install”,该方法采用ConnectionString而不是事务。 因此,我改为使用SqlServices.GenerateApplicationServicesScripts,如下所示:

string script = SqlServices.GenerateApplicationServicesScripts(true, SqlFeatures.All, _connection.Database);
SqlHelper.ExecuteNonQuery(transaction, CommandType.Text, script, ...);

然后我使用企业库中的SqlHelper。

但这会引发异常,并带有大量错误,下面是一些错误

Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near 'GO'.
Incorrect syntax near the keyword 'USE'.
Incorrect syntax near the keyword 'CREATE'.
Incorrect syntax near 'GO'.
The variable name '@cmd' has already been declared. Variable names must be unique within a query batch or stored procedure.

我认为在SQL事务中使用GO语句存在一些问题。

以这种方式执行后,如何使生成的脚本起作用。

trans by 2020-01-08T09:04:29Z

android-动画片段和背面

我在使用或理解弹出方式时遇到问题FragmentTransactions从后堆栈开始处理自定义动画。 具体来说,我希望它可以调用“ out”动画,但是似乎没有。

我有一个简单的方法来处理片段事务(FragmentTransaction)在其中添加片段并应用自定义过渡,以便淡入/淡出。 我也将此添加到后堆栈,以便用户可以使用后退按钮,实际上是导航到片段之前的状态加入。

protected void changeFragment() { 
    FragmentTransaction ft = fm.beginTransaction(); 
    ft.setCustomAnimations(android.R.anim.fade_in, android.R.anim.fade_out); 
    ft.add(R.id.fragment_container, new TestFragment()); 
    ft.addToBackStack(null); 
    ft.commit(); 
} 

一切进展顺利,但是当用户单击后退按钮,过渡动画不会反转。 我所期望的是当片段被删除时,它将使用淡出动画。 相反,它似乎会弹出(没有动画),然后容器似乎渐渐消失了。我不确定这到底是什么正在发生,但片段绝对不会消失。

我的应用程序使用兼容性库来添加片段支持,但我认为这也适用于Honeycomb(android-11)。有人知道我在这里做错什么吗?只是期待太多? 理想情况下,我想为片段类似于Gmail(在Xoom上)针对通过单击一条消息前进,然后通过使用后退前进按钮。 最好不必覆盖后退按钮功能,并保持自己的片段状态,因为我可以我想退出几个“交易”,我是不喜欢重新发明轮子。

在Android开发者小组上也有人问过:[http://groups.google.com/group/android-developers/browse_thread/thread/1136a3a70fa0b6e9]

trans by 2019-12-29T02:14:14Z

SQL Server 2005-包含TRY CATCH ROLLBACK模式的嵌套存储过程?

我对以下模式的副作用和潜在问题感兴趣:

CREATE PROCEDURE [Name]
AS
BEGIN
    BEGIN TRANSACTION
    BEGIN TRY
        [...Perform work, call nested procedures...]
    END TRY
    BEGIN CATCH
        ROLLBACK TRANSACTION
        RAISERROR [rethrow caught error using @ErrorNumber, @ErrorMessage, etc]
    END CATCH
END

据我所知,此模式与单个过程一起使用时是正确的-该过程将完成其所有语句而没有错误,或者将回滚所有操作并报告错误。

但是,当一个存储过程调用另一个存储过程来执行某些子工作时(理解为有时会单独调用较小的过程),我看到与回滚有关的问题-信息性消息(级别16) 发出的代码说明为@@TRANCOUNT。我认为这是因为子过程中的回滚总是回滚最外面的事务,而不仅仅是子过程中开始的事务。

我确实希望整个过程回滚并在发生任何错误时中止(并且该错误作为SQL错误报告给客户端),我只是不确定来自试图回滚事务的外层的所有副作用。 已经回滚了。 在每个TRY CATCH层进行回滚之前,也许要检查@@TRANCOUNT

最后是客户端(Linq2SQL),它具有自己的事务层:

try
{
    var context = new MyDataContext();
    using (var transaction = new TransactionScope())
    {       
            // Some Linq stuff
        context.SubmitChanges();
        context.MyStoredProcedure();
        transactionComplete();
    }
}
catch
{
    // An error occured!
}

如果在MyStoredProcedure内部调用的存储过程“ MySubProcedure”引发错误,我可以确定以前在MyStoredProcedure中完成的所有操作都将被回滚,由SubmitChanges进行的所有Linq操作将被回滚,最后 错误将被记录? 或者我需要更改模式以确保整个操作是原子的,同时仍允许子部件单独使用(即子过程仍应具有相同的原子保护)

trans by 2019-12-25T15:34:27Z

sql-在事务内截断表

可以在事务中使用SQL“截断表”命令吗? 我正在创建一个应用程序,我的桌子上有很多记录。 我想删除所有记录,但是如果应用程序失败,我将回滚事务。 删除每条记录需要很长时间。 我想知道如果我使用truncate table,是否仍可以回滚事务并在发生故障时恢复数据。 我意识到截断表不会将每个删除都写入事务日志,但是我想知道它是否将页面取消分配写入日志,以便回滚有效。

trans by 2019-12-24T23:05:52Z

1 2 3 4 下一页 共4页