首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >T/SSIS-使用主/外键重新设计后的表锁定

T/SSIS-使用主/外键重新设计后的表锁定
EN

Stack Overflow用户
提问于 2014-07-03 15:42:37
回答 1查看 242关注 0票数 2

我设法让自己陷入了困境,我对通知系统中使用的表进行了快速的重新设计,并设法使这些东西完全无用。

任何使用它们的尝试(select/update/insert/delete/alter)都会导致一个无限期运行的查询。我相信我不小心误用了级联选项,使之接近史诗般的比例。下面是我使用过的三个表和相关键

通过使用"WITH (NOLOCK)“提示,我成功地选择了表的形式,但是我删除/更改TBL_NOTIFICATIONS表上的约束的尝试没有成功。希望你们中的一个能看到我哪里出了错&好好惩罚我。

http://i.imgur.com/s8YrFFn.png (关系结构,我在包含图像方面还没有足够的声誉)

TBL_NOTIFICATIONS:

代码语言:javascript
复制
CREATE TABLE [dbo].[TBL_NOTIFICATIONS]
(
    [NotificationID]    INT IDENTITY(0,1)   NOT NULL,
    [ApplicationID]     INT                 NULL,
    [SubApplicationID]  INT                 NULL,
    [Title]             NVARCHAR(50)        NULL,
    [ShortDesc]         NVARCHAR(512)       NULL,
    [Link]              NVARCHAR(100)       NULL,
    [RaisedBy]          NVARCHAR(36)        NULL,
    [RaisedFor]         NVARCHAR(36)        NULL,
    [Show]              INT                 NULL,
    [DateCreated]       DATETIME            NULL,
    [DateToArchive]     DATETIME            NULL,
    CONSTRAINT [PK_TBL_NOTIFICATIONS] PRIMARY KEY CLUSTERED 
    (
        [NotificationID] ASC
    ) WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
) ON [PRIMARY]
GO

ALTER TABLE [dbo].[TBL_NOTIFICATIONS]
WITH CHECK ADD CONSTRAINT [FK_TBL_NOTIFICATIONS_TBL_NOTIFICATIONS_APPLICATION_DESCRIPTIONS]
FOREIGN KEY( [ApplicationID] )
REFERENCES [dbo].[TBL_NOTIFICATIONS_APPLICATION_DESCRIPTIONS] ( [ApplicationID] )
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[TBL_NOTIFICATIONS] CHECK CONSTRAINT [FK_TBL_NOTIFICATIONS_TBL_NOTIFICATIONS_APPLICATION_DESCRIPTIONS]
GO

ALTER TABLE [dbo].[TBL_NOTIFICATIONS]
WITH CHECK ADD CONSTRAINT [FK_TBL_NOTIFICATIONS_TBL_NOTIFICATIONS_SUBAPPLICATION_DESCRIPTIONS]
FOREIGN KEY( [SubApplicationID], [ApplicationID] )
REFERENCES [dbo].[TBL_NOTIFICATIONS_SUBAPPLICATION_DESCRIPTIONS] ( [SubApplicationID], [ApplicationID] )
ON UPDATE CASCADE
ON DELETE CASCADE
GO

ALTER TABLE [dbo].[TBL_NOTIFICATIONS] CHECK CONSTRAINT [FK_TBL_NOTIFICATIONS_TBL_NOTIFICATIONS_SUBAPPLICATION_DESCRIPTIONS]
GO

TBL_NOTIFICATIONS_APPLICATION_DESCRIPTIONS:

代码语言:javascript
复制
CREATE TABLE [dbo].[TBL_NOTIFICATIONS_APPLICATION_DESCRIPTIONS]
(
    [ApplicationID] [int] NOT NULL,
    [Description] [nvarchar](50) NULL,
    CONSTRAINT [PK_TBL_NOTIFICATIONS_APPLICATION_DESCRIPTIONS] PRIMARY KEY CLUSTERED 
    (
        [ApplicationID] ASC
    ) WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
) ON [PRIMARY]
GO

最后..。

TBL_NOTIFICATIONS_SUBAPPLICATION_DESCRIPTIONS:

代码语言:javascript
复制
CREATE TABLE [dbo].[TBL_NOTIFICATIONS_SUBAPPLICATION_DESCRIPTIONS]
(
    [SubApplicationID] [int] NOT NULL,
    [ApplicationID] [int] NOT NULL,
    [Description] [nvarchar](50) NULL,
    [ImagePath] [nvarchar](200) NULL,
    CONSTRAINT [PK_TBL_NOTIFICATIONS_SUBAPPLICATION_DESCRIPTIONS] PRIMARY KEY CLUSTERED 
    (
        [SubApplicationID] ASC,
        [ApplicationID] ASC
    ) WITH ( PAD_INDEX = OFF, STATISTICS_NORECOMPUTE = OFF, IGNORE_DUP_KEY = OFF, ALLOW_ROW_LOCKS = ON, ALLOW_PAGE_LOCKS = ON ) ON [PRIMARY]
) ON [PRIMARY]
GO

正如我已经提到的,SELECT语句可以通过使用"WITH (NOLOCK)“对表执行,但是任何修改它们的尝试都会遇到无限加载的查询。我试图修改UPDATE和DELETE约束(改为“无操作”和"SET“),但没有成功。同样,使用带DROP约束的ALTER只会永远运行。

在查询"sys.foreign_keys“时,我可以查看约束,但是我不认为我可以直接修改系统表,尽管我非常希望在这一点上被告知其他方面。

是否有人有任何想法:( a)如何删除这些表上的约束/键;或( b)如何在不遇到另一个锁的情况下删除这些表

欢迎的任何想法,特别是欢迎,都会暗示我到底是如何使这些表对我的SQL-fu免疫的。

提前感谢

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-07-03 16:13:17

我没有足够的声誉来评论,所以请原谅我把这个作为一个回答,也许一个国防部想要移动它?

您是否尝试过访问SSMS中的“活动监视器”,并查看是否有阻塞的进程(您可以从那里杀死进程)?持有锁的卡住过程会引起你所描述的症状。

在这里阻塞有一个很好的线程,How to find what is locking my tables

票数 2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/24558078

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档