gpt4 book ai didi

sql - 存储过程被随机丢弃

转载 作者:行者123 更新时间:2023-12-04 23:48:05 24 4
gpt4 key购买 nike

我们最近在暂存和生产环境中遇到了一个奇怪的问题。我们已经对 SQL Server 2005 上的存储过程运行了一个更新脚本,验证了新的更改,并开始在我们的产品上使用它。一段时间后,相同的存储过程从数据库中消失了。除我们打算使用的任务外,此存储过程未被任何其他任务使用。我们已经检查了每一位代码和部署脚本,但找不到只是删除存储过程的痕迹。

此问题不会发生在我们的开发和 QA 环境中,而只会发生在暂存和生产环境中。

有人可以帮忙吗?

亲切的问候,

马法兹

最佳答案

如果您排除了明显的因素(例如蓄意破坏),那么我建议您查看 sys.sql_modules引用程序 - 可能会出现意外失误,例如:

IF NOT EXISTS (SELECT 1 FROM SYS.PROCEDURES WHERE NAME = 'Proc1')
DROP PROCEDURE Proc1
GO

CREATE PROC dbo.Proc1
AS
...

<< MISSING GO!

IF NOT EXISTS (SELECT 1 FROM SYS.PROCEDURES WHERE NAME = 'Proc2')
DROP PROCEDURE Proc2
GO

CREATE PROC dbo.Proc2
AS
...

即在上面,由于缺少 GOProc1 定义的末尾。每次 Proc1 运行时,它都会丢弃 proc Proc2(如果 Proc2 if exists 会不方便地隐藏错误> 已被删除)。

同样,另一个常见问题是将 GRANT EXEC 留在 PROC 的底部 - 如果权限松懈,这可能会破坏过程的性能。

这里最好的建议是以最小权限执行应用程序,这样它就无法执行 DDL,例如 DROPGRANT .这样,当执行 Proc1 时,应用程序就会中断,让您可以快速追踪有问题的代码。

关于sql - 存储过程被随机丢弃,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22497755/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com