3

6 時間ごとにバックアップを作成するこの SQL ジョブ (SQL Server 2005) があります。バックアップのファイル名はタイムスタンプに基づいているため、一意のファイル名 (dbname_yyyymmddhhmmss.bak) が作成されます。ファイルが 3 日前のもので、スクリプトに基づいて 3 日前のバックアップ (.bak) を削除したい場合、xp_cmdshell を使用することを知っていますか。誰かが私を助けてくれますか、事前に感謝します。乾杯!

4

4 に答える 4

4

xp_cmdshell がこの仕事の最良の代替手段ではないことに同意します。あなたが私のようで、保守計画が好きでない/信頼していない場合は、ファイル システムのサポートが DOS でできるものよりもはるかに強力な C# コンソール アプリケーションを作成することができます (または T-SQL を使用して出力を解析します)。 xp_cmdshell 'DIR ...') を実行し、Windows のスケジュールされたタスクでそれをスケジュールして、SQL Server サービス/プロキシ アカウントからの特権のエスカレーションについて心配する必要がないようにします。すべてを1つのパッケージに入れるのはいいことですが、オイルを交換する人にキッシュを作ってもらいたいとは限りません.

于 2009-02-04T14:04:57.847 に答える
1

これは、実際には xp_cmdshell に適したタスクではありません。SQL Server 内でこの機能を有効にすると、セキュリティにも影響があります。

達成しようとしているものは、SQL Server Integration Services (SSIS) に適しています。バックアップの管理と実行に使用できるコンポーネントと、データの移動と削除に使用できるファイル システム タスク コンポーネントがあります。

ファイル システム タスク、変数、式の組み合わせを使用して、バックアップ ファイル名を取得し、日付コンポーネントを抽出して、ファイルの古さを判断できます。その後、ファイルに対して適切なアクションを実行できます。

これがお役に立てば幸いですが、追加情報が必要な場合は、お気軽に質問してください。

乾杯、ジョン

于 2009-02-04T12:29:48.350 に答える
1

これはあなたの質問に対する答えではありませんが、メンテナンス プラン (オブジェクト エクスプローラ -> 管理 -> メンテナンス プラン) を使用して、SqlServer 2005 で直接これを行うことができます。

私は通常、2 つのタスクを含む 1 つのメンテナンス プランを作成します。x 日後に古いバックアップを削除する「メンテナンス クリーンアップ タスク」と、それに続く「データベースのバックアップ タスク」です。

于 2009-02-04T12:33:51.617 に答える
0

.NET アセンブリを記述して、SQL Server 内から呼び出すことができます。テーブル値関数が特定のディレクトリ内のすべてのファイルをファイル名とファイルの日付スタンプとともに返すように記述するのはかなり簡単です。

于 2009-02-04T12:43:50.177 に答える