- 締切済み
異なるDBに存在するテーブル間のミラーリング
PHP5とMySQL5でショッピングサイトを作成しています。 サイトSとS'があり、それぞれがデータベースDBとDB'を使用しています。そして、DBとDB'にはそれぞれ顧客テーブルTとT'があります。 この状況で、Tに対して更新処理をしたときに、T'に対しても同じ更新処理を しなければなりません。逆の場合も同じです。つまり、TとT'の間でミラーリングのようなことを行いたいのです。 updateとdeleteの場合は、次のような処理の流れで問題が内容に思われます。 サイトS中のスレッドの場合 step1. DBに接続 step2. Tに対してupdate/deleteする step3. step2でupdate/deleteされた列の主キーを取得 step4. DB'に接続 step5. T'に対してstep3で取得した主キーを用いてupdate/deleteする しかし、insertの場合の処理の流れが思いつきません。一応次のような流れが思いついたのですが・・・ サイトS中のスレッドの場合 step1. DBに接続 step2. Tをロック step3. DB'に接続 step4. T'をロック step5. Tに対してinsert step6. T'に対してinsert step7. T'のロック解除 step8. Tのロック解除 しかし、これだとデッドロックが発生する可能性があると思うのですが、 どうしたらよいのでしょうか?
- みんなの回答 (3)
- 専門家の回答
関連するQ&A
- PEAR DBのupdateについて
PEAR DBにて複数のデータを一度にUPDATEにて更新しようと思っているのですが、うまくいきません。 foreach($data as $value){ $SQL = "update `table_name` set `id` = '" .addslashes($value). "';"; } $res = $this->db->query($SQL); まず、update分をデータ分foreachにて溜め込み、一気にクエリを投げております。insert文の場合はうまく処理してくれるのですが、updateの場合はエラーが返ってきてしまい、処理してくれません。updateの場合、PEAR DBでは不可能なのでしょうか? お分かりになる方、ご教授ください。よろしくお願いいたします。
- 締切済み
- PHP
- SQL Server上のDBにWin7でアクセス
SQL Server上のDBに、Win7のクライアントPCからSELECTのみ実行できるツールを探しています。(INSERT、DELETE、UPDATEは実行できないものがいいです。また、DBを直接編集もできては困ります) フリーソフトがベストです。どなたか、ご教授頂けますでしょうか。
- 締切済み
- SQL Server
- オラクルDBのデータ削除タイミング
お世話になります。 .NETとオラクルで作られた小さいシステムを引き継ぎました。 その中にメインになるDBがあり3ヶ月以前のデータは .NETの夜間削除処理APでDELETEしています。 そのメインDBにトリガーテーブルがあるのですが、1日分の データしか保存されていません。 しかし、どこで消えているのかが見つけられないでいます。 .NETの全APを検索してもないし、オラクルの機能であるような気が しているのですが、よくわかりません。 トリガーの条件は「INSERT」と「UPDATE」です。 どなたかヒントを下さい
- 締切済み
- Oracle
- LOCK TABLE
登録処理、更新処理、削除処理を行う際に 他ユーザからのアクセスを制限するために 登録、更新、削除処理を行う前にロック処理を行おうと思っています。 その際にテーブルのロックがすでにしている場合や テーブルのロックに成功した、テーブルのロックに失敗 した場合に戻り値を返すのでしょうか? お分かりになる方よろしくお願い致します。 一応イメージとして LOCK TABLE テーブル名称 IN SHARE ROW EXCLUSIVEの処理の後 UPDATE文や、INSERT、削除などを行おうと思っています。 よろしくお願い致します。
- ベストアンサー
- Oracle
- MysqlでのLOCK処理
Mysqlのwebリファレンスの http://dev.mysql.com/doc/refman/4.1/ja/lock-tables.htmlでは --->個々の UPDATE ステートメントでは、いずれも処理が原子的に行われるため、通常、テーブルをロックする必要はありません。現在実行中の SQL ステートメントが、他のスレッドによって妨害されることはまったくありません。しかし、次に示すように、テーブルをロックする必要が生じる場合もいくつかあります。 トランザクションをサポートしていないストレージエンジンを MySQL で使用している場合、SELECT と UPDATE の間に他のスレッドに割り込まれないようにするには、LOCK TABLES を使用する必要がある。次の例では、安全に処理を実行するために LOCK TABLES を発行する必要がある。<--- と説明がありますが、 (1)トランザクションをサポートしていないストレージエンジンでINSERT INTO,DELETE処理をするにはLOCKが必要になってくるのでしょうか? よろしくご教授おねがいします
- 締切済み
- MySQL
- DB参照&登録処理、どっちが高速?
30日分の売り上げを登録するシステムをつくっています。 登録先はDBで、日付を主キーとして1レコードずつ増えていく感じですが、既に登録があるものについてはレコード有無の判断をして上書きにする必要があります。 処理を考えたところ、2パターンのどちらが高速か負荷が少ないのかで迷っており、助言をいただきたいと思い投稿しました。 <1> (1)DB接続 (2)既に登録されている日付を把握するため、レコードから日付を全て取得(select all) (3)登録しようとしている1日目の日付とDBから取得した日付を全て照合し、同一があれば上書き(update)、なければ登録(insert)で処理をする。 (これを30日分繰り返す) (4)DB切断 <2> (1)DB接続 (2)登録しようとしている1日目の日付をキーにDBに同一日での登録がないか参照(select)し、同一があれば上書き(update)、なければ登録(insert)で処理をする。 (これを30日分繰り返す) (3)DB切断 <1>はDB参照が一度で終わるので高速かなと思うのですが、参照結果を一度格納し、再度1つづつを比較としてひっぱってくるためあまり効率が良くないのかと悩んでいます。 アドバイスお願いいたします。
- ベストアンサー
- PHP
- DB2でのシステム日付のinsert、updateについて。
質問です。 DB2で、システム日付のinsert、updateを行うSQLを作成したいのですが、どのようにしたら良いでしょうか? また、参考になるようなサイトなどありましたら教えてください。 どなたか宜しくお願いします。
- ベストアンサー
- その他(データベース)
- PHPでSQLサーバーのテーブルに対してIO
PHPでSQLサーバーのテーブルに対して Insert、Update、Deleteを行うサンプルコードを得られるサイトがあればご紹介下さい。
- 締切済み
- PHP
- ストアド。存在チェックをしてから登録したい。
SQLServer2005環境です。 同じ構造のテーブルA、Bがあり、AのデータをBにコピーしたいと思っています。 Aのデータは最新のデータ、Bの中にあるのは古いデータなので、もしキーが かぶるレコードがあれば、Updateをかけ、なければInsertをするような仕組みに したいと思っています。 更に可能であれば、Aに存在しないデータがBにあった場合は、Deleteしたいです。 一度BをDeleteしてInsertすれば話が早いのですが、そうもいかず、UpdateとInsertを 交え、小出しに更新するような形にしたいのです。 2008であれば、Merge文という便利なものがあるのですが、2005では上のような 動作をストアドで実現するのは難しいでしょうか。 サンプルコードですとか、解説しているサイトなどがありましたら、教えていただけますと 大変助かります。 宜しくお願いします。
- ベストアンサー
- SQL Server
- DB同時接続および更新処理結果確認について
お世話になります。 DB:Oracle11g OS:Linux5 上記環境のDBサーバへ、Aさん、BさんがTera Term接続して、 2名とも同じスキーマSSS(DBA付与)でsqlplusにてDB接続しました。 Aさんが、TTTテーブルに対してINSERT文を実行し、 1行追記されていることをSELECT文にて確認することができましたが、、 その後Bさんが同じSELECT文を実行しても、Aさんが追記した行が表示されません。 お恥ずかしい質問で恐縮ですが、 Bさんからも、AさんのINSERT実行結果を即時に確認できるようにするための Oracleの(?)設定がありましたら、ご教示ください。 ※目的はAさんが実行したINSERT、UPDATE、DELETEの結果を、 Bさんが開いているTera Termのコンソールからも確認したい。
- ベストアンサー
- Oracle
お礼
早速の回答ありがとうございます。 MeijiKさんの回答のとおりにしてみたら、うまくいきました。 ありがとうございました。 MySQLのインスタンスとは、MySQLサーバと解釈して良いのでしょうか? MySQLのレプリケーションは、マスターからスレーブへの一方向だけのようなので、今回のケースでは使えないようです。