Ssis 导入后,即使删除后,包仍保留在数据库中

Ssis 导入后,即使删除后,包仍保留在数据库中,ssis,sql-server-2008-r2,Ssis,Sql Server 2008 R2,我是SQL Server的新手。我将存储在文件系统中的包导入了SQLServer2008R2数据库。后来我从文件系统中删除了这个包。但是,该包仍然保留在SQL Server数据库中,甚至执行 据我所知,这意味着这种情况不应该发生,因为即使是SQL Server也会引用存储在文件系统中的包。所以我的问题是:这种行为正常吗?如果不是,可能的原因是什么 Cheerio当软件包在文件系统上时,它就可以放在任何你想要的地方。当包位于数据库中时,如果您使用包部署模型,它将存储在2008/2008 R2和20

我是SQL Server的新手。我将存储在文件系统中的包导入了SQLServer2008R2数据库。后来我从文件系统中删除了这个包。但是,该包仍然保留在SQL Server数据库中,甚至执行

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


Cheerio

当软件包在文件系统上时,它就可以放在任何你想要的地方。当包位于数据库中时,如果您使用包部署模型,它将存储在2008/2008 R2和2012的
dbo.sysssipackage
中的msdb目录中。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'

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

您是否检查了Management Studio中的SQL Server Agent/Jobs文件夹?可能有一个作业已计划并正在引用该包(或其副本)。这是绝对正常的!当您将包加载到SQL Server中时,它的完整副本存储在SQL Server中-它不再依赖于磁盘上的包-它现在是SQL Server引擎中的一个对象。@Aaron>唯一运行syspolicy_purge_history的作业那么谁在执行包,您如何确定它正在执行?你到底在哪里看到了该包仍然存在并仍在被调用的证据?@marc_s>那么为什么有两个文件夹,即FileSystem和MSDB。如果所有东西都存储在数据库管理系统中,为什么不将每个包合并到一个文件夹中呢?是的,我完全同意你上面的说法。但正如您所说,存储在文件系统中的包必须保存在文件系统文件夹中,而数据库中的包将保存在MSDB文件夹中。在我的SQL SERVER management studio上,ghost包显示在文件系统文件夹中。。。这是否意味着包保存在文件系统中?然而,它不是!!这就是我的问题,为什么它在文件系统中可见并执行?伙计们!!我有个要求。如果有人能在他们的系统上尝试这个简单的场景,并告诉我他/她的结果,那就太好了。也许这种行为应该发生,或者我的SQL Server安装有问题。您所要做的就是在文件系统上放置一个包,然后将其导入SQL server。检查文件系统文件夹中是否存在该包。然后从文件系统中删除该包,并重新检查SQL server文件系统文件夹。。谢谢