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

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

このQ&Aに関連する最新のQ&A

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
    • 1
この回答へのお礼

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に関連する人気のQ&A

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

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

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

このQ&Aを見た人が検索しているワード

このQ&Aと関連する良く見られている質問

Qオラクル SQLサーバーにて ファイルをDB管理したい

オラクルもしくはSQLサーバーにて
ファイルとか画像もデータベースで管理したいのですが

オラクルやSQLさーばーはファイルとかDBは
管理できるのでしょうか?

管理できる場合
ファイルをDBに保存するのでしょうか?

もしくは
ファイルへのリンク アドレスを
管理するのでしょうか?

詳しい方教えてください

Aベストアンサー

Oracle/SQL ServerともDBでファイルを保管することは可能です。
DBでの保管方式は通常複数用意されており、実際にファイルをデータストレージに保存する方法や専用ストレージに保存する方法、それ以外の方法もあります。

ファイルをDBに保存することの良し悪しは、立場と志向により意見が分かれますので議論する気はないのですが、保存しない方のメリットの例がすでに挙げられているようなので、保存する方のメリットをいくつかあげておきます。
(ちなみに私は基本的にDB保管するようにデザインするタイプです)
・フィールドの1つとして取り扱われるので、実ファイルの存在とデータの整合性をDB自体が保証する
・データベースバックアップにファイル自体も含まれるので、リカバリが容易
・SQL ServerのReporting ServiceのようにDBに収録された画像ファイルをそのまま割りつけられるようなツールにも利用できる
・DB内にバイナリ保管してしまうと、手順を踏まないとファイルに戻せないので、物理的なセキュリティ対策には有効

MicrosoftのSharepointなどがドキュメントをデータベースに保管している例です。

Oracle/SQL ServerともDBでファイルを保管することは可能です。
DBでの保管方式は通常複数用意されており、実際にファイルをデータストレージに保存する方法や専用ストレージに保存する方法、それ以外の方法もあります。

ファイルをDBに保存することの良し悪しは、立場と志向により意見が分かれますので議論する気はないのですが、保存しない方のメリットの例がすでに挙げられているようなので、保存する方のメリットをいくつかあげておきます。
(ちなみに私は基本的にDB保管するようにデザインするタイプで...続きを読む

QマイクロソフトSQLサーバー(2008)のインストール方法

宜しくお願いします、サーバーはまったくの初心者です。

仕様環境:WinXP/Pro SP3
CPU: AMD Athlon64 processor 2.00GHz 1.43GB RAM
ローカルディスクは残り128G有り

SQLサーバーをお試しで運用してみようと思い、
SQL Server 2008 Enterprise 開発者用トライアル版 (180 日間限定)をダウンロードしました。
(「X64実行可能ファイル」という項目がありそこからダウンロードしました)

ダウンロードはでき、わかり易くデスクトップ上に展開したのですが、
その後、「setup」というアイコンをクリックすると、
「現在のOSのアーキテクチャはX86です。このメディアは、このシステムで実行するように
サポートされていません。」

というエラーが出て先に進めません。

一応、インストールの方法に「コマンドプロンプトからのインストール方法」と
いうものもあったので、インストールパラメータというコードをコピペしてエンターを押すと、

「システム コンポーネントをインストールしたり構成するにはコントロールパネルを使って下さい。」
というエラーが出てきます。
意味もやり方がわかりません。(コンパネの中で何か操作するってことらしいですが・・)

まず、ダウンロードする前に前書きを読んだのですが、以下の文があります。

”X86、X64、または IA64 用の個別の自己解凍形式実行可能ファイル (EXE) を
ダウンロードすることもできます。
これらの実行可能ファイルでは、64 ビット バージョンの Windows 上への
X86 インストールはサポートされていません。
64 ビット バージョンの Windows 上に X86 をインストールするには、
DVD イメージを使用してください (IA64 はサポートされていません)。 ”

そして上部にDVDイメージというリンク先があり、そこに入ると
DVDイメージをダウンロードできそうな画面が出てきます。

これはもしかして、DVDに落としてからセットアップしないといけないということなのでしょうか?
ちなみにDVDはROMのみなので、書き込みはできません。

最終的にはaccessをインターフェースにして、SQLサーバーで運用できるまで
やってみようと思っています。

まずはインストールで躓いています。
何かご指示をお願いします。

宜しくお願いします、サーバーはまったくの初心者です。

仕様環境:WinXP/Pro SP3
CPU: AMD Athlon64 processor 2.00GHz 1.43GB RAM
ローカルディスクは残り128G有り

SQLサーバーをお試しで運用してみようと思い、
SQL Server 2008 Enterprise 開発者用トライアル版 (180 日間限定)をダウンロードしました。
(「X64実行可能ファイル」という項目がありそこからダウンロードしました)

ダウンロードはでき、わかり易くデスクトップ上に展開したのですが、
その後、「setup」というアイコンをクリ...続きを読む

Aベストアンサー

>いろいろ調べた結果、OSは32bit版で、CPUは64bit・32bitマシンともに
>対応ということがわかりました。

でしたら、ダウンロードするものが違います。

>(「X64実行可能ファイル」という項目がありそこからダウンロードしました)

ここで、「x86実行可能ファイル」を選んでください。

QSQL2000サーバーのテーブル容量を確認したい

SQL2000サーバーの各テーブルの容量(~メガバイト等)を確認する方法は、タスクパッドから確認する以外にありますか?出来れば一度にすべてのテーブル容量を、一覧で取得出来るコマンドなどがあれば良いのですが・・・。

Aベストアンサー

補足です。早い話が、
「sp_spaceused テーブル名」
でテーブル単位の容量を確認することができますってことです。
前回提示したサンプルは、DB内にあるすべてのテーブルの
容量を1つずつ表示しているというサンプルになります。
ご参考までに。

QSQL:テーブル結合で該当レコードがない場合

SELECT TableA.ID,SUM(TableA.量),TableB.金額
FROM TableA,TableB
WHERE TableA.ID = TableB.ID
GROUP BY TableA.ID,TableA.量,TableB.金額

こんな感じのSQLなんですが
TableAをメインテーブルとして
↓のような結果を得るように作り変えれないか考えています
■TableBとの結合レコードあり(金額登録あり)
1,50,1500
■TableBとの結合レコードあり(金額登録なし)
1,50,(NULLかスペース)

考えているんですが思いつかないのでヒントいただけたらと思います。宜しくお願いします。

Aベストアンサー

ヒント:外部結合

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

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

Aベストアンサー

通常SQL Serverの権限はデータベース/ユーザ単位につけるもので、個別のテーブルに権限をつけることは極めて稀です。
また、SQL Serverにはテーブル単位で読み取り専用にする機能もありません。
実際に更新権限をはずしても、表示されるメッセージは異なります。
ということで、ずいぶん悩みましたが、可能性が1つありました。

そのテーブルには主キーがなく、しかも、主キーを指定しないままリンクしたのではありませんか?
主キーのないリンクテーブルは更新できません(ODBCドライバの仕様上)。
その点を確認してみていただけますか?


このQ&Aを見た人がよく見るQ&A

おすすめ情報