1

私はシステムを継承するという不運に見舞われ、それが私に大きな問題を引き起こしています。それは SQL Server 2005 で実行されており、私が抱えている問題はデータベース メンテナンス プランにあります。クリーンアップ ルーチンは文書化されていない XP_DELETE_FILE コマンドを使用しており、多かれ少なかれ毎晩スタックします。

XP_DELETE_FILE コマンドが削除しようとしているファイルを、毎晩のバックアップ プログラム (私には制御できません) がバックアップしているように見えます。失敗するか、単にファイルをバイパスするのではなく、ハングしているように見えます。これは、メンテナンス プラン内のそれ以上のステップが実行されないことを意味します。

私は次の行に沿ってこれに対する解決策を探していました:

  1. XP_DELETE_FILE コマンドを使用しない、または
  2. XP_DELETE_FILE を実行する前に、ファイル アクセス許可を確認しています。

しかし、私はそのような運がありませんでした。誰にでもアイデアや解決策があれば、喜んで感謝します。

よろしく

コードサンプル:

      -- Delete old backup files
  IF (@CurrentCommandOutput02 = 0 AND @Verify = 'N' AND @CurrentCleanupDate IS NOT NULL)
  OR (@CurrentCommandOutput02 = 0 AND @Verify = 'Y' AND @CurrentCommandOutput03 = 0 AND @CurrentCleanupDate IS NOT NULL)
  BEGIN
    IF @BackupSoftware IS NULL
    BEGIN
      SET @CurrentCommand04 = 'DECLARE @ReturnCode int EXECUTE @ReturnCode = master.dbo.xp_delete_file 0, N''' + REPLACE(@CurrentDirectory,'''','''''') + ''', ''' + @CurrentFileExtension + ''', ''' + CONVERT(nvarchar(19),@CurrentCleanupDate,126) + ''' IF @ReturnCode <> 0 RAISERROR(''Error deleting files.'', 16, 1)'
    END

    IF @BackupSoftware = 'LITESPEED'
    BEGIN
      SET @CurrentCommand04 = 'DECLARE @ReturnCode int EXECUTE @ReturnCode = master.dbo.xp_slssqlmaint N''-MAINTDEL -DELFOLDER "' + REPLACE(@CurrentDirectory,'''','''''') + '" -DELEXTENSION "' + @CurrentFileExtension + '" -DELUNIT "' + CAST(DATEDIFF(mi,@CurrentCleanupDate,GETDATE()) + 1 AS nvarchar) + '" -DELUNITTYPE "minutes" -DELUSEAGE'' IF @ReturnCode <> 0 RAISERROR(''Error deleting LiteSpeed backup files.'', 16, 1)'
    END

    EXECUTE @CurrentCommandOutput04 = [dbo].[CommandExecute] @CurrentCommand04, '', 1, @Execute
    SET @Error = @@ERROR
    IF @Error <> 0 SET @CurrentCommandOutput04 = @Error
  END
4

2 に答える 2

0

ファイル操作にはCLR関数を使用することをお勧めします。ファイルを操作するアセンブリを作成します(たとえば、を使用して、このアセンブリをシステムにロードし、非推奨のドキュメント化されていないXPの代わりに、追加したCLR関数File.Deleteでマークを付けて使用します。方法:CLRSQLServerストアドプロシージャを作成して実行するを参照してください。 。EXTERNAL_ACCESS

于 2012-05-22T09:22:38.443 に答える
0

どのような種類のファイルを削除しようとしていますか?

xp_delete_file は SQL 2000 の SP です。削除するファイルの最初の行をチェックして、それが SQL バックアップ ファイルまたは SQL レポート ファイルであることを確認します。ファイル拡張子に基づくチェックは行いません。

たぶん、削除コードの一部を投稿すると、助けやすくなります

于 2012-05-22T08:34:59.867 に答える