【问题标题】:After importing package remains on database even after deletion导入包后即使删除后仍保留在数据库中
【发布时间】:2013-01-20 15:33:56
【问题描述】:

我是 SQL Server 新手。我将存储在我的文件系统上的一个包导入到我的 SQL Server 2008R2 数据库中。后来我从文件系统中删除了这个包。但是,该包继续保留在 SQL Server 数据库中,甚至可以执行!

据我所知,这不应该发生,因为即使是 SQL Server 也会引用存储在文件系统中的那个包。所以我的问题是:这种行为正常吗?如果不是,可能是什么原因

欢呼

【问题讨论】:

  • 您是否检查了 Management Studio 中的 SQL Server Agent / Jobs 文件夹?可能有一个作业已安排并正在引用包(或它的副本)。
  • 这是绝对正常的!当您将包加载到 SQL Server 时,它的完整副本存储在 SQL Server 中 - 它不再依赖于磁盘上的包 - 它现在是 SQL Server 引擎中的一个对象。
  • @Aaron> 唯一运行 syspolicy_purge_history 的作业
  • 那么谁在执行包,你如何确定它正在执行?您究竟在哪里看到包仍然存在并且仍在被调用的证据?
  • @marc_s> 那为什么会有两个文件夹,即 FileSystem 和 MSDB。如果所有内容都存储在 DBMS 本身中,为什么不将每个包都集中到一个文件夹中呢?

标签: ssis sql-server-2008-r2


【解决方案1】:

当包在文件系统上时,它就可以放在你想要的任何地方。当包在数据库中时,如果您使用包部署模型,它将存储在 dbo.sysssispackage 的 msdb 目录中,适用于 2008/2008R2 和 2012。 2005 使用dbo.sysdtspackages90,2012 在项目部署模型中将使用SSISDB 目录。

所以现在您知道它在一个表中,这就是代理能够引用的内容。如果您想摆脱它,请调用适当的存储过程。在这种情况下,它是msdb.dbo.sp_ssis_deletepackage 它有两个参数,包的名称和包所在的文件夹。根文件夹是00000000-0000-0000-0000-000000000000。否则,使用正确的包名称运行以下查询,它将生成删除所述包所需的调用。

与往常一样,在盲目运行之前评估语句。

SELECT 
    P.name
,   P.folderid
,   'EXECUTE msdb.dbo.sp_ssis_deletepackage @name = ''' + P.name + ''', @folderid = ''' + CAST(P.folderid as varchar(50)) + '''' AS run_me
FROM 
    dbo.sysssispackages AS P
WHERE
    P.name = 'Package'

【讨论】:

  • 是的,我完全同意你上面的说法。但是正如您所说,存储在文件系统中的包必须保存在 FIlesystem 文件夹中,而 DB 中的包将保存在 MSDB 文件夹中。在我的 SQL SERVER management studio 中,ghost 包显示在 Filesystem 文件夹中……这是否意味着该包保存在 Filesystem 中?然而,并不是!!那就是我的问题,为什么它在文件系统中可见并执行呢?
  • 伙计们!!我有个请求。如果有人可以在他们的系统上尝试这个简单的场景并告诉我他/她的结果,那就太好了。也许这种行为应该发生,或者我的 SQL Server 安装有问题。您所要做的就是在文件系统上放置一个包,将其导入您的 SQL 服务器。检查包是否存在于 Filesystem 文件夹中。然后从文件系统中删除包并重新检查 SQL 服务器文件系统文件夹。谢谢
【解决方案2】:

经过深思熟虑并询问了一些精通 sql 的人,我觉得这种行为非常自然。创建这两个文件夹只是为了区分获取包的来源。导入后,包将保存在数据库中。那么它的位置并不重要。在我的示例中,创建了包的副本并将其存储在数据库中。 谢谢大家的帮助和时间:)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2020-11-18
    • 2014-07-09
    • 2019-12-05
    • 2010-09-16
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多