データ移行の テクニックいろいろ

第1回 SQL Server勉強会
データ移行の
テクニックいろいろ
データベース友の会
Quatrex
2010/11/6
目次
自己紹介
 「データ移行」とは
 こんな時にデータ移行
 データ移行の手段
 デモ
 まとめ

2010/11/6
データベース友の会
2
自己紹介:Quatrex?

仕事
 某SIerの会社員、金融業界に生きる。
 Windows系インフラ技術者
⇒ DBA転向
⇒ インフラ類 何でもやる課



経験:SQL Server / DBA業務 / Oracle少し / MySQL僅少
資格:MCDBA / MCITP2005DBA / デスペ / Oracle11gGold etc.
仕事以外
 「データベース友の会」やってます。
 趣味:インドア派、ごく稀にアウトドア
2010/11/6
データベース友の会
3
「データ移行」とは

Wikipedia曰く
「データ移行(データいこう)またはデータマイ
グレーション(英: data migration)は、異なる
種類のストレージ、フォーマット、コンピュータ
などの間でデータを転送するプロセスであ
る。」

今回は、「データをこちらのサーバからあちら
のサーバに移す作業」くらいの意味です。
2010/11/6
データベース友の会
4
こんな時にデータ移行


現行の環境から、新環境へ
開発環境で作ったデータを本番環境へ
 本番移行
 データ更新、追加

本番環境のデータを開発環境へ
 テストデータや分析用として
 データ修正(データパッチ)

データバックアップの手段として
 本番データ修正前に
 通常運用として
2010/11/6
データベース友の会
5
データ移行の手段 for SQL Server


単位は「データベース単位」 or 「テーブル単位」
データベース単位




テーブル単位






完全バックアップ / 復元
デタッチ / アタッチ
SSIS(SQL Server Integration Services)
SSIS
bcpユーティリティ
sqlcmdユーティリティ
BULK INSERT
番外編:MS Access、リンクサーバー
Q. 他に手段はありますか?
2010/11/6
データベース友の会
【事後メモ】参加者の方から、
レプリケーションを使った事
例を教えていただきました。
6
完全バックアップ / 復元

概要
 移行単位「データベース単位」
 データベース中のテーブルやストプロなどのオブジェクト
を、まとめて別の媒体(テープやファイル)にコピー

操作
 移行元:
バックアップ
 移行先: 復元

ポイント
 基本的にオンライン実行可能
2010/11/6
データベース友の会
7
デタッチ / アタッチ

概要
 移行単位「データベース単位」
 インスタンスからデータベースの登録を削除する。データ
ファイルはそのまま残る。
 「掴んでいるデータベースファイルを放す」感じ

操作
 移行元:
デタッチ
 移行先: アタッチ

ポイント
 操作が高速
 バックアップにも使える(デタッチ
→ ファイルコピー)
 操作時、オフラインになる
2010/11/6
データベース友の会
8
SSIS(SQL Server Integration Services)

概要





操作



移行単位「データベース単位」「テーブル単位」
旧DTS(データ変換サービス)
様々なエクスポート/インポートが行える。DB作成、テーブル作成も可。
DB接続(SQL Server/Oracle/ODBC)、Excel、Access、テキスト。
ウィザード形式
Business Intelligence Development Studio(ETL処理の開発)
ポイント



2010/11/6
正直お得。SSIS + BI Development Studio
実行する場所にインストールする。サーバ or クライアント。
エラーメッセージがどうも分かりにくい(私感)。インストールしてないと
きに使おうとすると「製品レベルが不十分です」とか言われる。
データベース友の会
9
bcpユーティリティ

概要




操作



移行単位「テーブル単位」
コマンドベースでテーブルのエクスポート/インポート
テキスト形式 or バイナリ形式
【事後メモ】queryout
オプションも使えます。
移行元: bcp テーブル名 out ファイル名 オプション
移行先: bcp テーブル名 in ファイル名 オプション
ポイント


データをそのまんま移したいならバイナリ形式(Unicodeネイティブ形
式)を使用するのが吉。日本語文字列、数値、NULL、etc.
大量データのインポートには、コミットの行数を指定するのが吉(-bオ
プション)。そうしないとトランザクションログが肥大化してとっても痛い
目に。
【事後メモ】一括ログ復旧モデルであれば肥大化しない、
とのご指摘。今度やってみます。
2010/11/6
データベース友の会
10
sqlcmdユーティリティ





移行単位「テーブル単位」
データベースにSQL文を発行する汎用コマンドツール
バッチファイルに組み込んだり、とっても便利
操作



【事後メモ】2005からのユーティリティ。
2000ではosqlユーティリティでした。
概要
移行元: sqlcmd -Q"SELECT … " オプション > data.txt
移行先: いろんな方法で…
ポイント



2010/11/6
とっても便利なツールなんですが、データ移行の手段としては正直お
すすめしない。
なぜなら、エクスポートデータの整形が大変だから。
NULLを「NULL」(文字列)とか出力するし。これで結構ハマりました
…。
データベース友の会
11
BULK INSERT

概要
 移行単位「テーブル単位」
 Transact-SQL文
 インポートのみ。bcpのインポート機能だけ、みたいな。

操作
 移行先:

BULK INSERT テーブル名 FROM 'ファイル名'
ポイント
 データをそのまんまインポートしたいなら、bcpのバイナリ
形式(Unicodeネイティブ形式)のエクスポートファイルを
使用するのが吉。
 大量データのインポートには、コミットの行数を指定する
のが吉。そうしないとトランザクションログが(略)。
2010/11/6
データベース友の会
12
番外編

MS Access
 AccessからSQL ServerにODBC接続
 SQL ServerのテーブルをAccessのテーブルにエクス
ポート。インポートはその逆。
 同じMS製品同士だし、データ親和性が高い(かも?)

リンクサーバー
 異なるインスタンスに接続し、あたかも同一インスタンス
上のデータベースにアクセスするかのごとくSQL発行でき
る。
 SQL Serverだけでなく、OracleやODBC接続も可。
 ネットワーク上で常時接続できないといけないけどね。
2010/11/6
データベース友の会
13
デモ

環境
 移行元(172.16.232.129)
 SQL Server 2005 on Windows Server 2003
 32bit
 移行先(172.16.232.130)
 SQL Server 2008 R2 on Windows Server 2008 R2
 64bit
 中間データ配置場所
 「データ移行用」フォルダ

環境(下地)


2010/11/6
ThinkPad x200
VMware Player 3.1.2 on Ubuntu 10.10
データベース友の会
14
デモ

やること
 SSIS(ウィザード形式)
 BI
Development Studioチラ見せ
 bcp + BULK INSERT
 sqlcmdの出力具合
【事後メモ】2005バックアップ
→ 2008復元はできますが、
 完全バックアップ / 復元
その逆は失敗することを実機
確認しました。
 デタッチ / アタッチ
2010/11/6
データベース友の会
15
まとめ
いろんな移行手段を、要件によって使いわけ
よう。
 MSさん曰く、「SQL Server のディスク上スト
レージ形式は、64 ビット環境でも 32 ビット環
境でも同じです。」(キリッ)
 課題

 大量データをいかにさばくか。
 10GB、100GB、1TB、10TB…。
2010/11/6
データベース友の会
16