標題の別サーバーの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
    • 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に関連する人気のQ&A

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

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

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

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

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

Qテーブル構造を支える脚の材料と太さの計算方法

テーブル構造を支える脚の材料と太さの計算方法

こんにちは。テーブル構造を支える脚の材料と太さの計算方法と材料を教えて頂きたいです。

条件は:
条件1中央の脚一本でテーブル板を支える
条件2テーブル板の重量は決定済み、M=6kg
条件3脚の下の固定は別途設計するので、倒れることは考えなくても良い
条件4脚とテーブル板の固定は別途設計するので、倒れることは考えなくても良い
条件5テーブルは携帯式なので、脚を出来るだけ細くできればよい
と考えています。

質問1十分な強度を得られ、しかも軽量な材質は何でしょうか?
質問2そのときの脚の太さの計算方法は?

条件3と4で述べたとおり固定方法も考える必要もあるのですが、とりあえず脚が決まってからの方が良いと思いましたので、質問させていただいている次第です。

ご教授ありがとうございます。

Aベストアンサー

計算式
(耐荷重+固定荷重)÷木材の許容圧縮応力度÷脚本数=必要断面積(cm2)
上記計算式でテーブル脚をルート断面積で正方形の脚の寸法が求められます。
耐荷重とは、貴方がテーブルに上げる最大重量です。(kg又はN)
木材の許容圧縮応力度は、材料強度です。
建築基準法同施行令に参考になる材料強度表が書かれています。
材種を決めて計算する事が大事です。
ご参考まで

QSQLServer2005上の別DBからテーブルを読みたい

SQLServer2005で2つの異なるデータベース(ADB、BDB)が存在します。
ADBでBDBにあるテーブルを取得して検索をかけたいのですが、どのようにすれば実現できるのでしょうか。
BDBのVIEWを作成するイメージなんですが、リンクテーブルを設定するとかが必要になるのですか。
もしそうだとしたら、どうリンクテーブルを設定するのか教えてください。

Aベストアンサー

その2つのデータベースは同じインスタンスにいますか?
同じインスタンスにいるなら、
SELECT * FROM BDB.dbo.テーブル名
などで検索できます。

インスタンス自体が別ならリンクサーバを設定します。
サーバのリンク
http://msdn.microsoft.com/ja-jp/library/ms188279(SQL.90).aspx

もしくはアドホックリモートクエリを使う方法もあります。
ただし、OPENROWSETを使う場合は「SQL Server のセキュリティ構成」で利用を許可しないといけませんのでご留意ください。

QDIYテーブルの折りたたみ脚について

天版を蝶番で付けて真ん中を繰り抜き、七輪テーブルを作成しました。
現状は、余っているキャンプ用テーブルの脚をガムテープで固定しています。
ユニフレームの焚き火テーブルと同じ高さの折りたたみ脚を付けたいと思ってますが良いアイデアもしくは脚の販売先はありますでしょうか?
焚き火テーブルの高さは37cm、七輪テーブルの天版の厚さは約1.5cmなので、最低でも35cmの脚が必要になるかと思います。30cmの脚は結構見かけるのですが・・・。

Aベストアンサー

市販品にこだわらず、木などで作れば高さ自由ですよ。

1)別板を2枚クロスさせて天板を置く
2)蝶番つけて折りたたみ足にする
3)ナット埋めてねじ込みにする
4)テーブルを箱型にして、七輪+火種のケースとしてもそのまま使う

↑これらは高さの微調整にはアジャスタフットなりが必要ですが、
こういうの↓はアジャスタ機能もってますね

5)パイプの入れ子構造にして、内パイプは外パイプとねじ止めする。
 または外側の先端に割りをいれておいてクランプやホースバンドなどで締めて内パイプを固定する
6)天板の下にハの字形に広がるように左右脚をつけて、間をロープでつないで開き具合を調節する


ま、私なら4か6にしますね。
6のみ、簡単に絵にしておきます。

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

SQL Server2005 Express Edition を使っています。
異なるDB間(同じコンピュータ内)で、テーブルをコピーしたいの
ですが・・・
コピー元DB名:DB_A
コピー元テーブル名:dbo.顧客
コピー先DB名:DB_B

テーブルのコピーは select * into ・・・ from ・・・ を使えばできそうですが、別DBの場合の方法がわかりません。
お教えいただければ幸いです。
よろしくお願いいたします。

Aベストアンサー

別のDBでも同じインスタンス内ならば同じです。

SELECT * INTO DB_B.dbo.顧客 FROM DB_A.dbo.顧客

Qテーブルの脚を取り換えたい

ローテーブルの脚を取り換えて、脚の長いダイニングテーブルにしたいです。
幕板付きなので幕板はそのままで、脚だけを取り換えようと思ってます。

テーブルの画像を添付しました。
左画像はテーブルの正面から右側の脚にかけて、右画像は同じ部分をテーブル裏側から撮影してます。

1本の脚付近には、3本のネジがあります。
そのうち2本(銀色のネジ)は、幕板を天板にとりつける為のものだと思います。
あとの1本が脚と幕板を固定してるものだと思います。

このテーブルを組み立てた時の様子は忘れたのですが
ホゾ(?)みたいに凹凸で組まれていてネジは補強なのだと思います。
でも私にはそんな技術はありませんので
ネジで幕板と脚を固定するつもりです。

幕板は飾りとして
脚と天板の接する部分にそれぞれ金物をつけて取り付ける。

これで大丈夫でしょうか?
結構な重量のあるテーブルですので
高さのある脚にした時の強度が心配です。
他に何かよい方法はありますか?

また、家具のリメイクをしてるお店に頼む場合、
今ある幕板の凹凸に合わせて脚をつくってもらってホゾ組にしてもらうとしたら
どれくらいの値段がするのでしょう?
1万円で済むなら頼んだ方が良いと思ってますが
そんなお安くないですよね?
運送費だけでも相当な事になりそうで、現実的ではない気はしてるのですが・・・

ローテーブルの脚を取り換えて、脚の長いダイニングテーブルにしたいです。
幕板付きなので幕板はそのままで、脚だけを取り換えようと思ってます。

テーブルの画像を添付しました。
左画像はテーブルの正面から右側の脚にかけて、右画像は同じ部分をテーブル裏側から撮影してます。

1本の脚付近には、3本のネジがあります。
そのうち2本(銀色のネジ)は、幕板を天板にとりつける為のものだと思います。
あとの1本が脚と幕板を固定してるものだと思います。

このテーブルを組み立てた時の様子は忘れたので...続きを読む

Aベストアンサー

プロに依頼は 費用的に 全く無理ですから

ご自身で ホ-ムセンタ-で角脚も 丸い脚も

座金も 販売されていますので

取り付けられれば 1万で済むでしょう。

写真の幕板は無視することに成ります。

幕板を利用して脚を固定する方法は 様々ありますが

隅木 又は 隅金具でボルト締めが簡単です。

プロに依頼は其れなりの費用が掛かります。

QSQLServerのDBのうちテーブルを参照できる人を制限するには?

Windows2000
SQLServer2000 を使用しています。

ABCというデータ-ベースがあって、
このデータ-ベースに(1)、(2)、(3)、(4)、(5)
というテーブルがあるとします。

データ-ベースにログインするユーザーによって
Aさんは(1)~(5)のすべてにアクセス参照・更新
できるけれど
Bさんは(1)しか参照(のみ)できないという風に
ログインユーザーで制限させることは可能
でしょうか?

可能ならば詳細な方法をどなたかご教授
願えませんでしょうか・・・。
すみません、よろしくお願い致します。

Aベストアンサー

比較的簡単な方法では、
Enterprise Managerでテーブルのプロパティを開いて
対象ユーザのSELECT権限を無効にするとか。
このあたりが参考になるかな?

http://www.microsoft.com/japan/msdn/sqlserver/columns/mcdba/mcdba5.asp
(「データベースでの権限の設定」の項)

参考URL:http://www.microsoft.com/japan/msdn/sqlserver/columns/mcdba/mcdba5.asp

Q無垢テーブル固定のねじが使用半年で折れ落ちたり、脚がとれたりするものですか?

無垢のダイニングテーブルを半年前に購入しました。素材はナラだったと思います。3日前にいすの上に折れたねじがあり、よく見るとテーブルのねじが折れて落ちたものでした。購入店に連絡すると、このようにねじが折れ落ちることはよくあるといわれました。修理にこられ、折れた場所の斜めにねじ固定されました。よく見るとほかのねじも数本抜けていました。修理のときにテーブルの脚も緩んでいたのでしめてもらいましたが、翌日テーブルと脚に隙間がある事に気づき再度締めようとしたら脚がとれました。再度修理してもらいましたが、このように半年でねじが折れたり、ぬけおちたり、脚が取れたりするものでしょうか?

Aベストアンサー

購入から半年では ねじが折れ落ちることは通常ありません。

よくあるなんていうのは 言い逃れです。

欠陥品ですね。商品の取替え交渉です。

Q既存テーブルから別テーブルへのデータコピー時、発番を行いたい

お世話になります。

テーブルからテーブルへのデータコピーをしたいのです。
たとえば、
ワークテーブルから売上テーブルへ
データをコピーするとします。

売上テーブルには、主キーとなる「売上NO」(10桁)という項目があります。
ワークテーブルには売上NOはないので、データ移行時に売上NOを作成してやらないといけません。


一文だけで片付けようとすればどう書けば良いのでしょう?というか一文では無理なのでしょうか?

insert into 売上テーブル
(売上NO,販売単価......)
select (select right('0000000000' + (convert(nvarchar,max(売上NO) + 1)),10) from 売上テーブル) ,販売単価.....
from ワークテーブル

とやってみましたが、ダメでした。一括でデータ追加に行くので主キー重複エラーとなりました。

どなたかご教授ください。お願いします。

Aベストアンサー

現在SQL Serverで試験できないので、AccessでテストしたSQL文です。テーブルは単純化し
・売上テーブル
売上NO:Pkey
品名
販売単価
・ワークテーブル
id:Pkey
品名
販売単価

です。
まず一次試験として

SELECT (SELECT COUNT(*)+1 FROM ワークテーブル WHERE (ワークテーブル.品名<S.品名) OR ((ワークテーブル.品名=S.品名) AND (ワークテーブル.id>S.id))) AS [No], S.品名, S.販売単価
FROM ワークテーブル AS S
ORDER BY S.品名;

このSQL文はいかがでしょうか?品名順に連番が振られるようであれば

INSERT INTO 売上テーブル ( 売上NO, 品名, 販売単価 )
SELECT (SELECT COUNT(*)+1 FROM ワークテーブル WHERE (ワークテーブル.品名<S.品名) OR ((ワークテーブル.品名=S.品名) AND (ワークテーブル.id>S.id))) AS [No], S.品名, S.販売単価
FROM ワークテーブル AS S;

これで売り上げテーブルに「主キー重複エラー」なしにINSERT出来ます。
勿論、最終的にお望みのものにするためには
right('0000000000' + (convert(nvarchar,max(売上NO)
ここら辺の処理が必要なわけですが。

蛇足かもしれませんが、ワークテーブルに id を置いたのはともかく重複しない Pkey が必要だからで、それがないと連番が崩れます。

現在SQL Serverで試験できないので、AccessでテストしたSQL文です。テーブルは単純化し
・売上テーブル
売上NO:Pkey
品名
販売単価
・ワークテーブル
id:Pkey
品名
販売単価

です。
まず一次試験として

SELECT (SELECT COUNT(*)+1 FROM ワークテーブル WHERE (ワークテーブル.品名<S.品名) OR ((ワークテーブル.品名=S.品名) AND (ワークテーブル.id>S.id))) AS [No], S.品名, S.販売単価
FROM ワークテーブル AS S
ORDER BY S.品名;

このSQL文はいかがでしょうか?品名順に連番が振られるよ...続きを読む

Qテーブルの別売りの脚について

もうじき引っ越す予定です。
現在は脚の短いテーブルで座布団での生活ですが、
新しい場所がフローリングのLDKのためダイニング
のセット(椅子とテーブル)にしようかな、と
考えました。

しかし、現在のテーブルも捨てがたく、できれば
このテーブルの脚だけ長いものに交換できないか
と考えています。(脚にはネジが、テーブルには
ネジ穴があるタイプです。)

どこかで、テーブルの脚を別売りしてくれるお店
などありませんでしょうか?

ネットでもリアルでもかまいませんが、リアルの
場合、首都圏で紹介していただけると助かります。

よろしくお願いします。

Aベストアンサー

東急ハンズ渋谷店、
http://shibuya.tokyu-hands.co.jp/guideonfloor_back.html

4Aの家具 組立家具で各種取り揃えていますよ。

QSQLServer 2008のインスタンス間DBコピーの方法を探してい

SQLServer 2008のインスタンス間DBコピーの方法を探しています。

インスタンス1とインスタンス2に同じテーブル構造(名称も同じ)のDBを用意しています。
インスタンス1のDB(以下、DB1)をインスタンス2のDB(以下、DB2)に
コピーする方法を模索しています。

SQLServerのバージョンは2008で、Standardです。

できればDB1を止めることなく、DB2にコピーできるよう考えています。

ご存じの情報がありましたら、教えていただければと思います。
よろしくお願いします。

Aベストアンサー

DELETE FROM DB2.dbo.table1
INSERT INTO DB2.dbo.table1 SELECT * FROM DB1.dbo.table1

膨大な行数であれば、DB2.dbo.table1のインデックスを一時的に削除するとよい。


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

人気Q&Aランキング

おすすめ情報