小编Pet*_*son的帖子

如何在Microsoft SQL Server中显式锁定表(寻找黑客 - 不合作的客户端)

这是我最初的问题:

我试图弄清楚如何在SQL Server中强制执行EXCLUSIVE表锁.我需要解决不合作的读者(我无法控制,闭源的东西),明确地将他们的ISOLATION LEVEL设置为READ UNCOMMITTED.结果是,无论我在执行插入/更新时指定了多少锁和什么样的隔离,客户端只需要设置正确的隔离并返回读取我正在进行的垃圾.

答案结果很简单 -

虽然无法触发显式锁定,但任何DDL更改都会触发我正在寻找的锁定.

虽然这种情况并不理想(客户端阻塞而不是目击可重复读取),但它比让客户端覆盖隔离并读取脏数据要好得多.这是带有虚拟触发器锁定机制的完整示例代码

赢了!

#!/usr/bin/env perl

use Test::More;

use warnings;
use strict;

use DBI;

my ($dsn, $user, $pass) = @ENV{ map { "DBICTEST_MSSQL_ODBC_$_" } qw/DSN USER PASS/ };

my @coninf = ($dsn, $user, $pass, {
  AutoCommit => 1,
  LongReadLen => 1048576,
  PrintError => 0,
  RaiseError => 1,
});

if (! fork) {
  my $reader = DBI->connect(@coninf);
  $reader->do('SET TRANSACTION ISOLATION LEVEL READ UNCOMMITTED');

  warn "READER $$: waiting for table creation";
  sleep 1;

  for …

t-sql sql-server table-locking

9
推荐指数
2
解决办法
2万
查看次数

标签 统计

sql-server ×1

t-sql ×1

table-locking ×1