好きなおでんの具材ドラフト会議しましょう

標題の別サーバーのDBへテーブルをコピー(更新)したいと考えておりますが、やり方が全く分かりませんのでお教えください。

【更新元】
販売管理サーバー
OS:Windwos2008R2
SQL SERVER 2008R2
サーバー名:POS
DB名:POSDATA
テーブル名:POS売上伝票

【更新先】
社内開発用サーバー
OS:Windwos2008R2
SQL SERVER 2012Express
サーバー名:AD
DB名:POS
テーブル名:POS売上伝票

POS上のSQL ManagementStudeoから、AD上のSQLSERVERへのアクセスは可能な状態にしております。

◎実装したい要件
POSサーバー上のデータを、毎日定時にADサーバー上のDBに追加更新
※理想としては、バッチ等のスクリプトをタスクに登録し定時に実行

自分なりに調べてみたのですが、データを丸ごとコピーする場合は、"bcp"コマンドを実行すれば可能なようですが、bcpコマンドで、サーバー間のコピーの方法が良くわかりませんでした。
また、出来れば日々更新する為、データが変更されたレコードはUPDATE追加されたデータは、INSERTする事が理想です。
※夜間のバッチ処理ですので、上記の方法が私の知識的に難しようであれば、テーブルを作り直ししてもよいと考えております。

効率的な方法をご存じの方がいらっしゃいましたらアドバイスをお願いいたします。

A 回答 (5件)

>間違っているかもしれませんが、BCPを使う場合。


>販売管理SV側で、bcpコマンドでバックアップファイルを作成・出力。
>ADSV側で、出力されたバックアップファイルを読込と言う事で宜しいでしょうか?
はい。あっています。
とはいえ、
>
>お教え頂いたURLを拝見しましたが、イマイチ理解出来なかったため、最低限必要な書き方をお教え頂け>たら幸いです。
という感じでしたら、リンクサーバを使うほうがいいのかなあという気がしてきました。

http://sql55.com/query/linked-server.php
ここで、SQL SERVER認証のほうをつかう。
これが難しいようなら、
下のサイトの「SQL Server Management Studio の使用」のところを見てもらう。
http://msdn.microsoft.com/ja-jp/library/ff772782 …
ちょっとわかりにくいかも。
ならば、下のサイトの手順でやってみる。
http://d.hatena.ne.jp/haradago/20110125/p1

ぐらいかな。
・・・これで引っかかるようなら、どこがわからないか、あるいは、何を入力したか
   返信いれてください。
    • good
    • 0

とりあえず、Microsoftのサイトに自習書があるので見てください。

(参照URL)


他の回答者も書いていますが、
更新元サーバーをさわらずに実施しようとするならば
更新先サーバーにリンクサーバーとして、更新元サーバーを登録して

更新元を select した結果を
更新先へ insert する方法が最善だと思われます。

参考URL:https://www.microsoft.com/ja-jp/sqlserver/2008/r …
    • good
    • 2
この回答へのお礼

toshih2000様
MSの自習書お教え頂きありがとうございます。
いくつかダウンロードして見ましたが、低能な私でも理解出来そうでしたので、参考にさせて頂きます。

お礼日時:2014/05/13 19:34

BCPは、


1.販売管理サーバーで
OUTパラメタをつけてデータベースから普通のファイルへ出力
2.出力したファイルを社内開発用サーバーへコピー
 (ネットワークドライブで直接参照してもいいが4.が遅い)
3.社内開発用サーバーで対象テーブルをtruncateまたはdelete
 (BCPではデータが変更された分はUpdateされたと思いますが削除された分が反映できないため)
4.社内開発用サーバーで
INパラメタをつけてデータベースへ普通のファイルから読み込む

という処理になります。
http://msdn.microsoft.com/ja-jp/library/ms162802 …
参照。(本当は2008R2のに移動してもらったほうがいいけど。)
なお、テーブルレイアウトの変更は両方のサーバに必要。

他の方法としては、
A)データベースをバックアップしてリストアする。
 他のテーブルは対象外なのでかえってやりにくい。
 (まあ、別のデータベースとしてリストアしてmerge文とdelete文使って・・・
  という方法はありますが)
B)トランザクションレプリケーションする
 たぶんバッチ処理でなくリアルタイムになってしまうので論外。
 トランザクションログやディストリビューションデータベースのサイズなどもろもろを考慮する
 必要もある。
C)スナップショットレプリケーションする
 これは、時刻指定でコマンドを実行したときに全部入れ替えされるのでやり方としてはありと
 思いますが。
 販売管理サーバーに設定することが多いのと、知っておかないといけないことが大量なのと。。。
D)リンクサーバを作ってSQLを実行する。
 これは、時刻指定で、deleteとmerge(またはinsert/update)命令を実行するだけ。
 トランザクションログがあふれないかどうかだけが気がかりですが。
 リンクサーバの作り方は下のURLあたりかな。
 http://technet.microsoft.com/ja-jp/library/ff772 …
 権限設定で、はまる可能性はありますが、
 sqlのほうは、deleteもmergeも、
 テーブル名の指定で、リンクサーバ名.DB名.スキーマ名.テーブル名とするだけなので比較的簡単。

まあ、簡単なのは、BCPかリンクサーバを使う方法でしょう。
    • good
    • 0
この回答へのお礼

Siegrune様
回答ありがとうございます。

記載頂いた、URLを拝見しましたが、私にはハードルが高すぎて理解出来ませんでした。

質問では、理想を描いてしまったため、根本的なSQLServerを理解していない私には厳しそうです。

今まで、Accessのリンクテーブルを作成して必要なデータを抽出していたのですが、大量のデータのクエリをかけると販売管理システム自体が不安定になるため、上記のような事が出来ないかと考えておりました。

ですので、販売管理側に大きな負荷がかからなければ、(ADサーバー側は負荷がかかって停止しても問題ありません。)全テーブルを作り直してもかまいません。
あわせて、出来れば毎日深夜にその作業を行えれば、業務に支障が出る事は無いと思います。

間違っているかもしれませんが、BCPを使う場合。
販売管理SV側で、bcpコマンドでバックアップファイルを作成・出力。
ADSV側で、出力されたバックアップファイルを読込と言う事で宜しいでしょうか?

お教え頂いたURLを拝見しましたが、イマイチ理解出来なかったため、最低限必要な書き方をお教え頂けたら幸いです。

私のイメージとしては、Mysqldumpみたいな事が出きれば現段階では良いと考えております。

あつかましいお願いで申し訳ありませんが、よろしくお願いいたします。

お礼日時:2014/05/12 10:34

SQL Serverの場合リンクサーバーの設定をすれば別サーバーのデータベースをリンクサーバー名.データベース名.スキーマ名.テーブル名とする事で通常のSQLで扱えるようになります。

夜間バッチで行うのであれば受ける側のSQL ServerでDROPとCREATEとINSERTを行う作業をプログラムを組んで実現されれば問題が少ないです。
    • good
    • 0
この回答へのお礼

nharasawa様
回答ありがとうございます。

リンクサーバーの件も考えたのですが、どう変更してよいやら全く分からず。。。
また、販売管理SV側には、閲覧権限しかないので、リンクサーバー構築も難しいのではと考えております。

お礼日時:2014/05/12 10:11

SQLServerなら、ストアドプロシージャに、そういう処理するSQL文を作っておいて、SQLServerのジョブのスケジュール設定で、毎日定時に実行してあげればいいと思いますよ。

    • good
    • 0
この回答へのお礼

STICKY2006様
回答ありがとうございます。

ほんと、初歩の初歩が分かってないのですいません。
ストアドプロシージャーの作り方というか書き方が分かりません。
ジョブスケジュールについては、購入した本に載っていたので、何とかなるかなと思いますが、T-SQLについてAmazonを探したのですが、分かりやすい本がなかったのでお手上げ状態です。
また、販売管理SV側には、閲覧権限しか与えられてない為、ストアドも作成出来ないのではと考えています。
素人以下の質問で申し訳ありませんが、良い方法が有ればお教え頂けましたら幸いです。

お礼日時:2014/05/12 10:09

お探しのQ&Aが見つからない時は、教えて!gooで質問しましょう!

このQ&Aを見た人はこんなQ&Aも見ています

関連するカテゴリからQ&Aを探す


おすすめ情報