我们希望在程序中使用ADOConnection
。
在其他软件中,我们可以在实际会话中使用“session”(连接)id,我们也可以列出实际(其他)连接。
如果程序未正确终止,我们使用此功能清除特殊表中的永久数据。
有时我们使用真实记录来签名。在以前的数据库中,我们有更多选项来清除它们。
同一连接中另一个持有记录的事务和“nowait”选项来检查真正的锁(是否存在)。
数据库级触发器(连接时,断开连接时)清除某些内容。
唯一会话ID +访问会话列表以确定会话是否存在。
在会话结束时删除的全局(但基于会话的)对象,但我们可以检查它们的存在。
在SQL Server中我不知道如何做到这一点。正如我在这个DB中看到的那样:
一个。) 我们没有真正唯一的会话ID。
湾) 我们没有公共临时表,其记录将在会话结束时删除。
下进行。) 我们不会列出以某种方式链接实际会话的连接会话(连接)(通过id,通过某些东西来改变相同的用户名而不是另一个应用程序)。
d。) ADO通过连接有一个事务,并且事务似乎是阻塞的。我们不希望仅将此功能的连接加倍。
予。) 正如我所看到的,只有全局临时表可以提供帮助,如果名称可以包含tablename + keyvalue。
例如:
“bill_head_ID28338328”表存在是某人锁定密钥28338328的意思(签名)。
如果此连接异常终止,那么全局临时表将在最后消失。
II。) 或者,如果我有一个名为“living_connections”的表,那也是一回事。
每个连接都将基于GUID的id插入此表中+创建一个名为“LIVCON_”+ GUID的全局临时表。
通常,程序会从最后的“living_connections”中清除自己的记录。 但我们有一个“自动调节”功能。
这可以列出living_connections,并检查具有相同GUID的所有全局临时表。 如果它找不到它,那意味着连接以某种方式死亡。
然后我们可以清除此记录以及所有链接的记录。
但也许这是一个错误的想法。
你怎么看?你有什么好主意来检查活着和什么连接 永久性标志有效吗?感谢您提供任何帮助,推进,链接等。
一些扩展: MS-SQL服务器可能使用TCP / IP(套接字)连接参数来确定哪个客户端处于活动状态。如果连接异常死亡,服务器可能会使用默认的keepalive参数,即2小时......: - (
答案 0 :(得分:0)
MS SQL具有SPID + ConnectionTime。 这些混合值足够独特,可以将它们用作键,并检查哪些会话数据存活,哪些会死...