第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
© Copyright 2024 Paperzz