标签: locking

唯一的非聚集索引对锁有帮助吗?

我想知道当涉及到 KEY 锁时,SQL Server 对于唯一非聚集索引和非唯一聚集索引的行为是否有所不同。

sql-server locking nonclustered-index unique-constraint

0
推荐指数
1
解决办法
1023
查看次数

ISOLATION LEVEL READ UNCOMMITTED 会影响删除吗?

我有一个特殊的情况让我使用SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED. (我sp_getapplock用来确保单个进程访问给定的行。)

我正在尽力避免任何类型的锁定升级。我清楚地知道ISOLATION LEVEL READ UNCOMMITTED读取有什么作用,但我不确定删除。

我看到用做删除一些示例代码ROWLOCKREADPAST,连同ISOLATION LEVEL READ UNCOMMITTED但我是没有什么,会做明确的,所以我也没有一直在使用它了。

这是否需要防止我的删除锁定升级或就ISOLATION LEVEL READ UNCOMMITTED足够了?

注意:
如果有兴趣,这里这里是这个问题的相关 sprocs。

sql-server locking isolation-level sql-server-2016

0
推荐指数
1
解决办法
483
查看次数

锁定:允许插入但不允许更新

我想锁定一个表:INSERT应该被允许,但UPDATE应该被禁用。

我正在使用当前的 PostgreSQL 版本。

我阅读了“建议锁”和“显式锁定”。也许我是盲人,但我找不到适合我的目标的解决方案。

以下是我的用例的详细信息:

有一个表,大致类似于日志记录:多个进程同时向表中添加新行。

脚本每小时处理一次添加的数据。

现在我想确定这个脚本有一个固定的工作集。不应修改脚本正在处理的行。但是,如果在脚本运行时添加新行也没关系。这些行在下一次调用脚本时获取进程。

postgresql locking

0
推荐指数
1
解决办法
95
查看次数

表 X 上的更新如何锁定表 Y?

我们处于这样的情况:选择被更新阻止。但表格不同。

UPDATE [dbo].[TABLE_1]
SET ...

SELECT [t1].[field]
FROM [dbo].[TABLE_1] AS [t1]
WHERE...
Run Code Online (Sandbox Code Playgroud)

当它们同时运行时,这个简单的过程会阻塞这个过程:

SELECT "A lot of fields"
FROM TABLE_TOTALLY_DIFFERENT
INNER JOIN [another table totally different] 
ON...
WHERE...
Run Code Online (Sandbox Code Playgroud)

这对我来说毫无意义。

即使通过查看 pageID,我也可以看到在这种情况下被锁定的表是TABLE_TOTALLY_DIFFERENT.

但他们与他们无关。

我如何查找并确定它们被锁定的原因?

sql-server sql-server-2012 locking

0
推荐指数
1
解决办法
74
查看次数

SQL Server 知识产权(保护数据库结构和关系)

我想知道是否有任何关于保护数据库结构的更新?我们提供了一个使用 SQL 作为其主要 DBMS 的许可应用程序,我们希望锁定数据库结构(模式)。

我知道我可以自己加密数据和存储过程......等。我想要最佳实践来加密/保护/锁定来自终端客户端 DBA 的数据结构和关系。

在我们安装和修复应用程序时,我可以访问最终客户端物理服务器。

该应用程序是使用 linq to sql 用 C# 编写的

恐惧是使用数据库方案对解决方案进行逆向工程(并且已经发生过一次)。所以我们需要在安全的环境中运行我们的应用程序,它只使用本地数据库。

Microsoft 没有提供此功能:https : //docs.microsoft.com/en-us/sql/relational-databases/security/protecting-your-sql-server-intellectual-property?view=sql-server-2017

security sql-server encryption locking

-1
推荐指数
1
解决办法
233
查看次数

在以下库存系统中,是否可以强制行锁以避免死锁并确保其按预期工作?

我想为 M 个用户自动保留 N 个对象的库存。

我有两张库存跟踪表,一张用于全球库存,一张用于个人库存。

  • 全局清单表列:ObjectID uniqueidentifier、Count int
  • 个人库存表列:UserID nvarchar(64)、ObjectID uniqueidentifier、Count int

有两个表,因为我必须为每个对象以及每个用户强制执行最大允许保留。例如,一个对象可能被限制为总共保留 1000 个,每个用户最多保留 10 个该对象。

全局清单表以 [ObjectID] 为唯一键,个人清单表以 [UserID, ObjectID] 为唯一键。

  • 主键是每个表上的唯一索引,因此只对行进行锁定,而不会对其他索引键进行锁定。
  • 全局清单表将始终驻留在单个数据库中。
  • 个人库存表可以跨多个数据库进行分片,因此更新全局和一个或多个个人表的事务可能是分布式的。
  • 此“保留库存”事务是将在这些表上执行的唯一事务。

为 3 个对象保留库存的示例请求如下所示。一些对象有限制,而另一些则没有。

[
    {ObjectID: 'A', QuantityToReserve: 1},
    {ObjectID: 'C', QuantityToReserve: 2, GlobalMax: 1000, PersonalMax: 10},
    {ObjectID: 'B', QuantityToReserve: 5}
]
Run Code Online (Sandbox Code Playgroud)
  • 这种为多个对象保留库存的请求必须以原子方式完成,并且必须对所有对象都成功。
  • 在尝试在个人表上取任何锁之前,总是在全局表上取一组完整的锁。

原子预留是通过启动一个事务,然后首先更新全局清单表中的行来实现的,对于所有对象 ID,按升序排列。

没有限制的对象的更新语句如下所示:

UPDATE [GlobalInventory] WITH (ROWLOCK, XLOCK, HOLDLOCK)
SET [Count] = [Count] + @QuantityToReserve
WHERE [ObjectID] = @ObjectID
Run Code Online (Sandbox Code Playgroud)

具有限制的对象的更新语句如下所示:

UPDATE [GlobalInventory] WITH (ROWLOCK, XLOCK, HOLDLOCK)
SET …
Run Code Online (Sandbox Code Playgroud)

sql-server deadlock concurrency locking sql-server-2019

-4
推荐指数
2
解决办法
285
查看次数