• 締切済み
  • 困ってます

(SQLSERVER) 別サーバーへテーブルコピー

標題の別サーバーの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する事が理想です。 ※夜間のバッチ処理ですので、上記の方法が私の知識的に難しようであれば、テーブルを作り直ししてもよいと考えております。 効率的な方法をご存じの方がいらっしゃいましたらアドバイスをお願いいたします。

共感・応援の気持ちを伝えよう!

  • SQL Server
  • 回答数5
  • 閲覧数11895
  • ありがとう数13

みんなの回答

  • 回答No.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.aspx#SSMSProcedure ちょっとわかりにくいかも。 ならば、下のサイトの手順でやってみる。 http://d.hatena.ne.jp/haradago/20110125/p1 ぐらいかな。 ・・・これで引っかかるようなら、どこがわからないか、あるいは、何を入力したか    返信いれてください。

共感・感謝の気持ちを伝えよう!

  • 回答No.4

とりあえず、Microsoftのサイトに自習書があるので見てください。(参照URL) 他の回答者も書いていますが、 更新元サーバーをさわらずに実施しようとするならば 更新先サーバーにリンクサーバーとして、更新元サーバーを登録して 更新元を select した結果を 更新先へ insert する方法が最善だと思われます。

参考URL:
https://www.microsoft.com/ja-jp/sqlserver/2008/r2/technology/self-learning.aspx

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.3

BCPは、 1.販売管理サーバーで OUTパラメタをつけてデータベースから普通のファイルへ出力 2.出力したファイルを社内開発用サーバーへコピー  (ネットワークドライブで直接参照してもいいが4.が遅い) 3.社内開発用サーバーで対象テーブルをtruncateまたはdelete  (BCPではデータが変更された分はUpdateされたと思いますが削除された分が反映できないため) 4.社内開発用サーバーで INパラメタをつけてデータベースへ普通のファイルから読み込む という処理になります。 http://msdn.microsoft.com/ja-jp/library/ms162802.aspx 参照。(本当は2008R2のに移動してもらったほうがいいけど。) なお、テーブルレイアウトの変更は両方のサーバに必要。 他の方法としては、 A)データベースをバックアップしてリストアする。  他のテーブルは対象外なのでかえってやりにくい。  (まあ、別のデータベースとしてリストアしてmerge文とdelete文使って・・・   という方法はありますが) B)トランザクションレプリケーションする  たぶんバッチ処理でなくリアルタイムになってしまうので論外。  トランザクションログやディストリビューションデータベースのサイズなどもろもろを考慮する  必要もある。 C)スナップショットレプリケーションする  これは、時刻指定でコマンドを実行したときに全部入れ替えされるのでやり方としてはありと  思いますが。  販売管理サーバーに設定することが多いのと、知っておかないといけないことが大量なのと。。。 D)リンクサーバを作ってSQLを実行する。  これは、時刻指定で、deleteとmerge(またはinsert/update)命令を実行するだけ。  トランザクションログがあふれないかどうかだけが気がかりですが。  リンクサーバの作り方は下のURLあたりかな。  http://technet.microsoft.com/ja-jp/library/ff772782.aspx  権限設定で、はまる可能性はありますが、  sqlのほうは、deleteもmergeも、  テーブル名の指定で、リンクサーバ名.DB名.スキーマ名.テーブル名とするだけなので比較的簡単。 まあ、簡単なのは、BCPかリンクサーバを使う方法でしょう。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

Siegrune様 回答ありがとうございます。 記載頂いた、URLを拝見しましたが、私にはハードルが高すぎて理解出来ませんでした。 質問では、理想を描いてしまったため、根本的なSQLServerを理解していない私には厳しそうです。 今まで、Accessのリンクテーブルを作成して必要なデータを抽出していたのですが、大量のデータのクエリをかけると販売管理システム自体が不安定になるため、上記のような事が出来ないかと考えておりました。 ですので、販売管理側に大きな負荷がかからなければ、(ADサーバー側は負荷がかかって停止しても問題ありません。)全テーブルを作り直してもかまいません。 あわせて、出来れば毎日深夜にその作業を行えれば、業務に支障が出る事は無いと思います。 間違っているかもしれませんが、BCPを使う場合。 販売管理SV側で、bcpコマンドでバックアップファイルを作成・出力。 ADSV側で、出力されたバックアップファイルを読込と言う事で宜しいでしょうか? お教え頂いたURLを拝見しましたが、イマイチ理解出来なかったため、最低限必要な書き方をお教え頂けたら幸いです。 私のイメージとしては、Mysqldumpみたいな事が出きれば現段階では良いと考えております。 あつかましいお願いで申し訳ありませんが、よろしくお願いいたします。

  • 回答No.2

SQL Serverの場合リンクサーバーの設定をすれば別サーバーのデータベースをリンクサーバー名.データベース名.スキーマ名.テーブル名とする事で通常のSQLで扱えるようになります。夜間バッチで行うのであれば受ける側のSQL ServerでDROPとCREATEとINSERTを行う作業をプログラムを組んで実現されれば問題が少ないです。

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

  • 回答No.1

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

共感・感謝の気持ちを伝えよう!

質問者からのお礼

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

関連するQ&A

  • 別のDBからテーブルをコピーする方法

    SQL Server2005 Express Edition を使っています。 異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの ですが・・・ コピー元DB名:DB_A コピー元テーブル名:dbo.顧客 コピー先DB名:DB_B テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。 お教えいただければ幸いです。 よろしくお願いいたします。

  • PostgresSQLのテーブルを他のサーバにコピーしたい!

    すいませーん!教えてください! Linux8.0でPostgresSQLを使っています。 サーバ内にあるDBのテーブルを、他のサーバにコピー、もしくは丸ごと転送するやりかったってありますか? あったら教えてください。 こちら、linuxは初心者。SQLも一般的なコマンドしか知らないので、出来れば詳しい手順とコマンドを教えていただければ助かります。 テーブルをtxtファイルにして…とか聞いたんですが。よくわからないのです。

  • bcpによる、テーブル→CSVファイル出力について

    bcpによる、テーブル→CSVファイル出力について SQL Server(2003)のクエリアナライザからテーブル->ファイル出力を試みたのですが、うまくいきません。 サーバからの実行ではなく、クライアントのEnterpriseManagerのクエリ実行です。 このエラーは、サーバ接続自体がうまくいってないということでしょうか? exec master.dbo.xp_cmdshell 'bcp xxxxx.dbo.コピー元テーブル名 out C:\AAA.csv -c -S サーバ名 -U 接続ID名 -P 接続パスワード' 実行結果 SQL Status=S1000 ,NativeError=0 Error=[Microsoft][ODBC SQL Server Driver]一括コピーホストのデータファイルが開けません。 csv->テーブルについては、BULK INSERTで問題無く取り込めているので、単純に逆を行いたいだけです。 bcp使わない方法があれば、それでもいいのですが。。。。。

  • テーブルの中身を違うテーブルへコピー

    お世話になります。 SQLについて質問があるのですが・・・。 Aというテーブルがあり、何件かデータが入っています。 そのAテーブルにフィールドを2つ新たに追加したいのです。 ALTER TABLEは使わずに、 以下の様な操作をしたいと考えております。 1:Aテーブルを違う名前に変更。  もしくはテーブルを丸々コピー。 2:テーブルBを作成。   (テーブルAのフィールドに2つフィールド追加した内容) 3:テーブルBにテーブルAの内容を丸々コピー。   その際、新規に追加した2つのフィールドには、初期値として、何かの文字or数字を入れる。 4:Aテーブルを削除 と、いう感じです。 作成はINSERT、削除はDROPを使えばいいのかなーって 思っているのですが、 テーブル名の変更や、テーブルの内容のコピーが ちょっと分かりません。 上記について、ご教授の程、よろしくお願いします。 なお、DBにはSQL Serverを使用しています。

  • SQLサーバーのテーブルの値が更新できません

    お尋ねします。 SQLサーバー2005にDB1というデータベースにdbo_TB1というテーブルがあります。そのテーブルの特定の列の値を更新したいので、AC.mdbというアクセスのファイルにテーブルのリンクをし、更新したいファイルを用意して、アクセスのクエリでデータを更新しようとしましたところ、更新ができませんでした。  dbo_TB1を更新可能にするためには、どのようにして権限を与えればいいでしょうか。  SQLサーバー2005の知識を習得しようと学習を始めたばかりで、よく理解できていません。よろしくお願いします。

  • SQLサーバでテーブルをコピーする

    SQLサーバ超初心者です。 A支店用のテーブルを作成(dbo.data_A)したのですが B支店(dbo.data_B)、C支店用(dbo.data_C)のテーブルを作成したいです。 Accessなどのように、コピーペーストなどはできないのですよね? ご教授お願いいたします!

  • SQLサーバーのテーブルに対してアクセスで更新クエリを行ないたい

    こんばんは。 ・vista ・アクセス2003 ・SQL Server 2005 です。 SQL ServerからテーブルをMDBへリンクしているのですが そのテーブルに対し、アクセス側で更新クエリを実行しようとすると 実行時エラー '3157': ODBC--リンク テーブル'テーブル名'での更新に失敗しました。 [Microsoft][ODBC SQL Server Driver]時間切れになりました。(#0) と言うエラーになり、更新クエリができません。 どうすればアクセスでSQLサーバーのテーブルに対して更新クエリを行えるのでしょうか? よろしくお願いします。

  • ストアドプロシージャで別DBに接続

    Oracleのマテリアライズドビューのデータを SQL Server 2008のDBに毎晩取り込む処理を作る必要があり、方法を検討中です。 SQL Serverが稼働しているWindows Server 2003のマシンから、 毎晩タスクで起動させて実行することを考えています。 SQL Serverのストアドプロシージャで実現できないかと考えているのですが、 ストアドプロシージャだけで実現可能でしょうか? Oracleに接続してビューのデータを取得し、それに基づいて、 SQL ServerのDB内のテーブルのデータ追加、更新、削除等を行います。 単純なコピーではなく、データ加工や変換等の処理も行います。 経験がないので、実現可能かというところから教えて下さい。 実現不可能なら、他にどのような選択肢があるか教えていただけると助かります。 よろしくお願いします。

  • AccessのテーブルをSQL Serverに自動インポートする方法について

    現在SQL Server2005を使用しております。 別のサーバー内でAccessのテーブルデータが定期的に更新されており、 このデータを利用したシステムをSQL Server上で作ろうと考えています。 手動でSQL ServerにAccessのテーブルデータをインポートするやり方は分かりましたが、(データ更新の為に)定期的にインポートする方法がわかりません。 どのように実現すればよいか、サンプルや参考になるHPがありましたら 是非教えていただけないでしょうか?

  • SQL serverの1つのデータベース内にある全てのテーブルを一気に

    SQL serverの1つのデータベース内にある全てのテーブルを一気にcsv化したいと思っています。 が、テーブルを1個ずつcsv化する方法しか見つからず、困っています。 テーブルの数が100ほどあるので、できれば一気に行いたいのです。 ※見つけた方法 (1)SQL Server Enterprise Maganerで、データベースを右クリック→「すべてのタスク」の「エクスポート」→変換対象にFlat Fileを選ぶ これだとテーブル1個ずつしか変換できません。 (2)bcpコマンドを使う こちらもテーブル名を指定していますので、やはりテーブル1個ずつしか変換できません。 何かいい方法はないでしょうか。 あるいは、上記の方法を少し変えることで一気に変換できるのでしょうか。