Warning: file_get_contents(/data/phpspider/zhask/data//catemap/7/sql-server/27.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何从磁盘删除特定的SQL*.bak文件_C#_Sql Server_Database Backups_Smo - Fatal编程技术网

C# 如何从磁盘删除特定的SQL*.bak文件

C# 如何从磁盘删除特定的SQL*.bak文件,c#,sql-server,database-backups,smo,C#,Sql Server,Database Backups,Smo,我有一个C项目,它的一个特点是复制现有的SQL数据库版本2012 为此,我使用SMO类备份和还原来备份数据库,然后以新名称还原它们。数据库副本还原为“仅复制”,以免影响数据库的整体备份和还原过程 所有这些都很好 问题是,我似乎无法删除在执行备份时创建的*.bak文件。我应该提到*.bak文件是在服务器盒上创建的 我尝试使用系统存储过程msdb.dbo.sp_delete_backuphistory的修改版本,该过程尝试删除我从系统表中创建的备份的所有引用。这运行没有错误。然而,这并没有触发我认为

我有一个C项目,它的一个特点是复制现有的SQL数据库版本2012

为此,我使用SMO类备份和还原来备份数据库,然后以新名称还原它们。数据库副本还原为“仅复制”,以免影响数据库的整体备份和还原过程

所有这些都很好

问题是,我似乎无法删除在执行备份时创建的*.bak文件。我应该提到*.bak文件是在服务器盒上创建的

我尝试使用系统存储过程msdb.dbo.sp_delete_backuphistory的修改版本,该过程尝试删除我从系统表中创建的备份的所有引用。这运行没有错误。然而,这并没有触发我认为可能发生的文件清理

我也试过查看xp_delete_deletefile,但这似乎不合适,因为它需要一个“delete date”参数。原因是我只想删除我创建的一个特定备份文件

删除备份文件是一个两阶段的过程吗?1从系统表中删除,然后2从磁盘中删除?还是有一个我不知道的一步流程

我做错了什么,以致*.bak文件将被永久删除

我对SQL Server完全没有经验

以下是经过修改的存储过程的副本:

声明@backup\u set\u id表backup\u set\u id INT 声明@media\u set\u id表media\u set\u id INT 声明@restore\u history\u id表restore\u history\u id INT 插入@backup\u set\u id backup\u set\u id 选择不同的备份集id 从msdb.dbo.backupset 其中expiration_date不为NULL,expiration_date<@olests_date AND database_name=@DBName,IS_copy_only=1 插入@media\u set\u id media\u set\u id 选择不同的媒体\u集\u id 从msdb.dbo.backupset 其中expiration_date不为NULL,expiration_date<@olests_date AND database_name=@DBName,IS_copy_only=1 插入@restore\u history\u id restore\u history\u id 选择不同的还原\u历史\u id 从msdb.dbo.restorehistory 在“选择备份设置id”中的“备份设置id”位置 来自@backup\u set\u id 开始交易 从msdb.dbo.backupfile中删除 在“选择备份设置id”中的“备份设置id”位置 来自@backup\u set\u id 如果@错误>0 跳槽 从msdb.dbo.backupfilegroup中删除 在“选择备份设置id”中的“备份设置id”位置 来自@backup\u set\u id 如果@错误>0 跳槽 从msdb.dbo.restorefile中删除 选择restore_history_id中的restore_history_id 从@restore\u history\u id 如果@错误>0 跳槽 从msdb.dbo.restorefilegroup中删除 选择restore_history_id中的restore_history_id 从@restore\u history\u id 如果@错误>0 跳槽 从msdb.dbo.restorehistory中删除 选择restore_history_id中的restore_history_id 从@restore\u history\u id 如果@错误>0 跳槽 从msdb.dbo.backupset中删除 在“选择备份设置id”中的“备份设置id”位置 来自@backup\u set\u id 如果@错误>0 跳槽 删除msdb.dbo.backupmediafamily 来自msdb.dbo.backupmediafamily bmf 其中bmf.media\u set\u id在选择媒体\u set\u id中 来自@media\u set\u id 然后选择COUNT* 从msdb.dbo.backupset 其中media\u set\u id=bmf.media\u set\u id=0 如果@错误>0 跳槽 删除msdb.dbo.backupmediaset 来自msdb.dbo.backupmediaset bms 其中bms.media\u set\u id位于选择媒体\u set\u id中 来自@media\u set\u id 然后选择COUNT* 从msdb.dbo.backupset 其中media\u set\u id=bms.media\u set\u id=0 如果@错误>0 跳槽 提交事务 回来 退出: 回滚事务
至少在SQL Server 2014中,第二个参数文件夹路径可以是特定的文件名,这只会导致删除一个文件,例如:EXEC master.dbo.xp_delete_file 0,'C:\Backups\SomeDatabaseBackup.bak'@stuartd非常感谢您的回复。很好用@stuartd,您能否确认是否有必要运行修改后的存储过程来清理系统表?那么,完全不运行存储过程是否可以接受?再次感谢。sp_delete_backuphistory的文档中说,在执行每个备份或还原操作后,会向备份和还原历史记录表中添加更多行;因此,我们建议您定期执行sp_delete_backuphistory。因此,这意味着您不必每次都运行它。