web-dev-qa-db-ja.com

Integration Servicesを使用せずにメンテナンスプランをエクスポートできますか?

SQL Serverインスタンスから簡単なメンテナンスプランをエクスポートしようとしています。

ソース管理へのエクスポートをチェックし、エクスポートされたメンテナンスプランを機能的に同一のインスタンスに適用します。

StackOverflow および SQL Server Newbie Integration Servicesを使用してメンテナンスプランをエクスポートすることをお勧めします。

エクスポートターゲットのIntegration Servicesに接続しようとすると、次のエラーが表示されます。

コンピューター "WEBSERVER"のIntegration Servicesサービスへの接続が次のエラーで失敗しました:指定されたサービスはインストールされたサービスとして存在しません。

このボックスはデータをコンシューマーアプリケーションに提供するためにのみ使用するため、WEBSERVERの統合サービスを無効にすることを選択しました。 WEBSERVER上のすべてのデータは、バックエンドインスタンスから複製されます。 Integration Servicesは、バックエンドインスタンスでデータを処理するために頻繁に使用されます。

Integration Servicesを使用せずに保守計画をエクスポートするための文書化された方法はありますか?マイクロソフトはそれをサポートしていますか?

メンテナンスプランは、SQL Serverに格納されている他のSSISパッケージと同様にmsdb.dbo.sysssispackagesに格納されます。 MSDBからのSSISパッケージ抽出 に関する便利な投稿があります。

10
billinkc

これを行う方法があります。

OPと同様に、SQL Serverインスタンスが2つあり、1つはSSISがインストールされており、もう1つはインストールされていない(おそらくSQL Server Web Editionである場合など)と仮定します。

ホブリングされたサーバーからホブリングされていないサーバーにユーザー保守計画の行をコピーするストアドプロシージャを記述します。関連する行は次のとおりです。

SELECT name 
FROM msdb.dbo.sysssispackages 
WHERE packagetype = 6

これをSPと記述して、一致するidの行を最初に削除し、次に最新バージョンを挿入する必要があります(またはUPDATE matchingなど) ids、次にINSERT行方不明ids)そして、両方のサーバーをアドレス指定するSQLを記述できるように、リンクサーバーを片側または反対側にセットアップする必要があります。

それだけです。実際に、たとえばメンテナンスプランから定期的にこれを呼び出して、ホブリングされていない側のすべてのメンテナンスプランをバックアップできます。

もちろん、これは大規模なハックですが、実際には機能します。 (msdb.dbo.sysssispackagesのデータが異なるサーバーインスタンス間で実際に互換性があるようにするには、SQL Serverのバージョン番号が両側で同じであることがかなり重要だと思います。)

もちろん、SSISデータベーステーブルから関連する行を常に直接バックアップすることもできます。とにかくそれはうまくいくでしょう-元の質問への完全な答えとして。既に述べたように、これはSSISの前提とは関係ありません-単に保守計画を前提としています!

つまり、これはサポートされている軽量な方法であり、システム上のどこにもSSISがなくても機能します。上記のより複雑でハックな方法の利点は、エクスポートされた計画が、単なるデータ行としてではなく、標準形式で提供されることです。そのため、後で別のバージョンのSQL Serverにインポートできる可能性がはるかに高くなります。

3
MikeBeaton

私はまったく同じ問題で苦労してきました。主なポイントは次のとおりです。

WEBSERVERに統合サービスは必要ありません。文書化された方法の1つは、DTUTILを使用することです。 SQL Serverメンテナンスパッケージをソースからターゲットにコピーするには、Integration ServicesがインストールされているANY SQL Server(すべてのEnterprise機能が含まれる無料の開発者エディションでも)を使用します(パッケージのソースまたはターゲットではない場合でも)。例A.

例A:SQLサーバーでDTUTILを実行しますMySSISServerA SQLメンテナンスパッケージをMySourceServerBから-にコピーしますMyDestServerC

DTUTIL /SQL "Maintenance Plans\Nightly Maintenance" /copy  sql;"Maintenance Plans\Nightly Maintenance" /sourceserver MySourceServerB /destserver MyDestServerC /Q
1
Sting

見て:

1つのサーバーから別のサーバーにメンテナンスプランを転送(コピー)する方法 by Sreekanth Bandarla

言い換えると要約すると:

  1. SSMSで、「データベースエンジン...」に接続する代わりに、同じサーバー名の「統合サービス...」に接続します。

  2. 'Stored Packages/MSDB/Maintenance Plans'に移動します。

  3. すべてのメンテナンスプランがあります。それらを右クリックしてエクスポートします。

0
RicardoBalda