0

我们想ADOConnection在一个程序中使用。

在其他软件中,我们可以在实际会话中使用“会话”(连接)id,我们也可以列出实际(其他)连接。

如果程序错误终止,我们使用此功能从特殊表中清除永久数据。

有时我们用真实的记录来签署一些东西。在之前的数据库中,我们有更多的选项来清除它们。

  1. 同一连接中的另一个事务,它保存记录和“nowait”选项来检查真正的锁(是否处于活动状态)。

  2. 数据库级触发器(连接时,断开连接时)以清除某些内容。

  3. 唯一会话 ID + 访问会话列表以确定会话是否存在。

  4. 将在会话结束时删除的全局(但基于会话)对象,但我们可以检查它们的存在。

在 SQL Server 中,我不知道该怎么做。正如我在这个数据库中看到的:

a.) 我们没有真正唯一的会话 ID。

b.)我们没有公共临时表,其中包含将在会话结束时删除的记录。

c.)我们不会列出以某种方式链接实际会话的已连接会话(连接)(通过 id,通过在相同用户名但另一个应用程序上产生差异的东西)。

d.) ADO 通过连接有一个事务,并且该事务似乎是阻塞的。我们不想仅将此功能的连接数加倍。

I.) 正如我所见,如果名称可以包含表名 + 键值,那么只有全局临时表才有帮助。

例如:

“bill_head_ID28338328”表的存在意味着(标志)有人锁定了密钥 28338328。

如果这个连接异常终止,它的全局临时表最终会消失。

II.)或者如果我有一个名为“living_connections”的表,那也是一样的。

每个连接都会将一个基于 GUID 的 ID 插入到该表中 + 创建一个名为“LIVCON_”的全局临时表 + GUID。

通常程序会在最后从“living_connections”中清除自己的记录。但是我们有一个“自动清洗”功能。

这可以列出 living_connections,并检查所有具有相同 GUID 的全局临时表。如果它找不到它,这意味着连接以某种方式死亡。

然后我们可以清除该记录以及所有链接的记录。

但也许这是一个错误的想法。

你怎么看?你有什么好主意来检查哪些连接是有效的,哪些永久标志是有效的?

感谢您的任何帮助,提前,链接等。


一些扩展:MS-SQL 服务器可能使用 TCP/IP(套接字)连接参数来确定哪个客户端处于活动状态。如果连接异常终止,服务器可能会使用默认的 keepalive 参数,即 2 小时... :-(

4

1 回答 1

0

MS SQL 有 SPID + ConnectionTime。这些混合值足够独特,可以将它们用作键,并检查哪些会话数据是活动的,哪些是死的......

于 2013-09-26T13:43:18.593 回答