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


12

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

ソース管理へのエクスポートをチェックし、エクスポートされた保守計画を機能的に同一のインスタンスに適用します。

StackOverflowSQL Server Newbieは、Integration Servicesを使用して保守計画をエクスポートすることをお勧めします

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

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

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

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

回答:


10

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


これは、SSISが完全にインストールされている場合にのみ機能しますdtutil。これは、SSIS が存在していても、基本的に無効になっているためです。SQL Serverの一部のバージョン(Web Editionなど)では、メンテナンスプランが基本的にSSISのほとんどすべての機能を使用している場合でも、SSISを完全にインストールできません。(ただし、あなたが足かせされていないそのうちの一つのSQL Serverの2つのバージョン、持っていると仮定すると、このラウンドを取得するハックがある- 。下記の私の答えを参照)
MikeBeaton

3

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

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

ユーザー保守計画の行を、障害のあるサーバーから非障害のサーバーにコピーするストアドプロシージャを作成します。関連する行は次のとおりです。

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

このSPを記述して、一致するidの行を最初に削除し、次に最新バージョン(または同様のアプローチ、たとえばUPDATE一致するids、次にINSERT欠落idする)を挿入する必要があります。そして、どちらかの側にリンクサーバーをセットアップする必要があります。これにより、両方のサーバーに対応するSQLを作成できます。

それだけで、実際には、たとえば定期的にこれを呼び出すことができます。たとえば、メンテナンスプランから...そして、すべてのメンテナンスプランを非障害側でバックアップできます。

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

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

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


1

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

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

例A: SQL Server上で実行DTUTIL MySSISServerAからSQLメンテナンスパッケージをコピーするMySourceServerBMyDestServerC

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

ANY同じバージョンの警告がある場合、DTUTILはプランをvCurrentにアップグレードします
-billinkc

素晴らしい点!しかし、アップグレードは役立つ場合があります。私はをしたいSQL 2008で計画を作成し、コピー/ SQL 2008にそれらの計画をアップグレードし、2008 R2、2012,2014、2016年
スティング

0

見て:

あるサーバーから他のサーバーにメンテナンスプランを転送(コピー)する方法 スリーカント・バンダラ

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

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

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

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

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.