2018年12月31日月曜日

SQL Server の Import Export Wizard によるデータのExport

SQL Server のBCPコマンドによるデータエクスポート の投稿でBCPコマンドを使ってTableデータをファイルに書き出す方法を説明している。
今回は、SQL Server のタスクに標準で備わっているデータエクスポートの機能を使ってTableデータをファイルに出力してみる。

環境

  • DB: SQL Server 2012 SP4 (11.0.7001.0 (X64)) Evaluation or Express
  • データソース: AdventureWorksLT2012
  • データ保存先:ローカル ファイル(テキスト ファイル)
AdventureWorksLT2012 の SalesLT.Customer のデータをファイルに出力する。

Import/Export WizardによるデータExport

SSMSを起動しオブジェクトエクスプローラーからAdventureWorksLT2012を右クリック→タスク→データのエクスポート を選択する。

enter image description here



SQL Server インポートおよびエクスポート ウィザード
・ようこそ

enter image description here


・データソースの選択
認証:Windows認証
データベース:AdventureWorksLT2012

enter image description here


・変換先の選択
※データベース:AdventureWorksLT2012 の照合順序(SQL_Latin1_General_CP1_CI_AS) に対応したコードページを選択すること!! (コードページの選択を誤ると実行時にエラーになる)

コードページの例(抜粋)
Identifier .NET Name Additional information
1252 windows-1252 ANSI Latin 1; Western European (Windows)
932 shift_jis ANSI/OEM Japanese; Japanese (Shift-JIS)
65001 utf-8 Unicode (UTF-8)
51932 euc-jp EUC Japanese

※ファイル名に出力先のファイルのフルパスを設定する。
ディレクトリを予め作成していること。

enter image description here


・テーブルコピーまたはクエリの指定

enter image description here


・フラットファイル変換先の構成
※元データとして SalesLT.Customer テーブルを選択する。
区切りは規定値を使用する。

enter image description here


・パッケージの保存および実行
設定内容をすぐに実行するか、SSISパッケージとして再利用可能なように保存するかを選択できる。
→ SSISパッケージとして保存できるのは、Evaluation または Standard以上の商用ライセンスの場合のみ。
今は「すぐに実行」を選択する。
※以下図は、Evaluation または Standard以上の商用ライセンスの場合

enter image description here


※Developer または Express等の無償ライセンスの場合

enter image description here


・ウィザードの完了
設定内容の概要を確認します。

enter image description here


・操作の完了
エラー無く処理が完了すると下図のような結果が表示されます。

enter image description here


・出力結果

enter image description here

コードページの選択エラー

上記例では元データとして AdventureWorksLT2012 を使用している。
AdventureWorksLT2012 の照合順序は SQL_Latin1_General_CP1_CI_AS であるため、対応したコードページとして「1252 (ANSI - ラテンI)」を選択しなければならないと説明している。
ここでは敢えてコードページを「932 (ANSI/OEM - 日本語 Shift-JIS)」に設定した場合で実行してみる。

・コードページを「932 (ANSI/OEM - 日本語 Shift-JIS)」に設定

enter image description here


・実行エラーが発生

enter image description here


・エラーメッセージ
→ コードページについて警告されている。

enter image description here


このように元のデータの照合順序と対応しないコードページを設定するとエラーとなり実行出来ない。


SSISパッケージの作成と再利用

上記事例ではExport処理を実施してしまうと操作を再利用することが出来ない。(もう一度ウィザードを始めから設定することになる)
Evaluation または Standard 以上の商用ライセンスの場合はSSISパッケージをファイルとして保存することが出来、コマンドプロンプトまたはPowerShellから実行することが出来る。
今回はEvaluation Editionの環境でSSISパッケージの保存とPowerShellによる実行を試してみる。

・SSISパッケージの保存設定1
保存先としてSQL Server 又はファイルシステムが選択できるが、今回はファイルシステムを選択。
保護レベルとパスワードを設定。

enter image description here


・SSISパッケージの保存設定2
保存先のディレクトリを設定する

enter image description here


・ウィザードの完了
設定内容の概要を確認します。

enter image description here


・操作の完了
エラー無く処理が完了すると下図のような結果が表示されます。

enter image description here


・SSISパッケージの実行
SSISパッケージの実行にはコマンドプロンプトまたはPowerShellでDTEXECコマンドを使用します。
DTEXEC /f “[SSISパッケージの保存パス(.dtsx)]” /Decrypt [パスワード]
※SQL Server をバージョンアップした環境で上記DTEXECコマンドを実行すると以下のエラーが発生します。
エラー: 2018-12-31 05:50:33.59 コード: 0xC0016020 ソース: 説明: エラー
0xC001700A “パッケージに含まれるバージョン番号が無効です。バージョン番号を現在のバージョン番号より大きくすることはできません。”
により、パッケージをバージョン 6 から 3 に移行できませんでした。
上記エラーはDTEXECコマンドに関連付けられているEXEの実体がSQL Server 2012ではない(古いVersion)になっていることが原因のようです。
レジストリを書き換えれば良さそうな気もしますが、SQL Server 2012に対応いたEXEを指定するようにコマンドを記載すれば動作します。

PS C:\Users\hoge> & "C:\Program Files\Microsoft SQL Server\110\DTS\Binn\DTExec.exe" /f  "C:\Temp\Export_Customer.dtsx" /Decrypt hogepin
Microsoft (R) SQL Server Execute Package Utility
Version 11.0.7001.0 for 64-bit
Copyright(C) Microsoft Corporation. All rights reserved.

開始: 5:54:24
進捗状況: 2018-12-3105:54:26.00
   ソース: データ フロー タスク 1
   検証しています: 0% の完了
進捗状況の終了

~

進捗状況: 2018-12-3105:54:26.59
   ソース: データ フロー タスク 1
   クリーンアップ: 100% の完了
進捗状況の終了
DTExec: パッケージの実行から返されました DTSER_SUCCESS (0)。
開始: 5:54:24
完了: 5:54:26
経過時間:  2.059 秒
※EXEのフルパスを指定する場合に「Program Files」のように間にスペースが入るパスを指定する場合は、パス名の前に「&」を追加すること。


まとめ

  • SSISを使ってデータをフラットファイルにExportする場合は、元データの照合順序と出力先のコードページの指定を正しく設定すること。
  • 商用ライセンスではSSISパッケージを保存することが出来る。
  • SSISパッケージを実行する場合は「DTEXEC」コマンドをPowerShell等で実行する。
  • SQL Server のVersionが複数インストールされている環境では、DTEXECコマンドの指定でEXEのフルパスを指定すること。

追記(12/31)
SSISパッケージの保存で「ファイルシステム」ではなく、「SQL Server」を選んだケースを試してみたが、
  • SSMSでIntegration Services にログインして「格納済のパッケージ」ディレクトリの「MSDB」の配下にSSISパッケージが格納されていることを確認。
  • 実行したがエラーとなる。エラー内容から、Edtionの権限が認められていない模様。実行時はEvaluation Edition のインスタンスであったが、同じ環境下にExpress Edition のインスタンスが構築されており、その辺の問題かと。

enter image description here

  • 上記のようにSSISパッケージをSQL Serverに保存したところ、以前の投稿で作成していた統合サービスカタログが初期化されてしまった…
    Import/Export Wizard で作成したSSISパッケージをSQL Serverに保存するのはやめた方が良さそう…

参考

Code Page Identifiers

DTExec.exe を使用してコマンド プロンプトから SSIS パッケージを実行する



0 件のコメント:

コメントを投稿