- ベストアンサー
排他方法
- 排他方法の実施について質問します。環境はWindowsXP、Oracle9i、VB6.0です。マスタメンテナンス画面の開発中で、UPDATEやDELETE処理の前に排他処理を行いたいです。DbCreateDynasetの引数を実施する必要があるのですが、排他ロックは正しく行われているのかわかりません。
- マスタメンテナンス画面の開発中、LOWのUPDATEやDELETE処理の前に排他処理を行いたいです。DbCreateDynasetの引数を使用していますが、正しく排他ロックが行われているのか確認できません。
- WindowsXP、Oracle9i、VB6.0の環境でマスタメンテナンス画面の開発を行っています。LOWのUPDATEやDELETE処理の前に排他処理を行いたいですが、DbCreateDynasetの引数の実施方法がわかりません。マニュアルがなくて困っています。
- みんなの回答 (3)
- 専門家の回答
質問者が選んだベストアンサー
その他の回答 (2)
- taka451213
- ベストアンサー率47% (436/922)
- taka451213
- ベストアンサー率47% (436/922)
関連するQ&A
- 1台のServerで複数のコンピューター名でソフトを同時起動する方法?
リモートデスクトップ系のソフトを使用してサーバーにてソフトウェアを同時起動するに際しての質問です。 ServerOS WINDOWS2003server DB Microsoft SQL Server2000 ClientOS Windows2000 or xp 自社で開発したDB系ソフトを同時起動するのに、排他処理をコンピュータ名で判断させている為に同時に起動すると排他処理が効かずデータが壊れてしまいます。 そこで設計からやり直すと、2ヶ月程度の工数が発生してしまう為、OS側でコンピューター名を切り替えながらソフトを同時起動させる方法が無いかと調査しているのですが、なかなかたどり着けません。 もし、そのような方法があればお教えいただければと思います。 宜しくお願いします。
- ベストアンサー
- Windows系OS
- Accessの排他制御をどのように行うべきか
いつもお世話になっております。 Windows2000 Access2002、またはAccess2000にて、 複数のPCで、サーバにおいてあるmdbファイルを使用するシステムを開発する場合、 (例えば、スタンドアロンで使用していたシステムを複数のPCで使用することになったと仮定します。 また予算の都合上、Oracle、SQL Serverなどは使えないものとし、各PCにAccessがインストールされます。 ) 排他制御を行うために、Accessで排他モードで開いて使用するという対応というのは、問題ないのでしょうか。 データが破損する可能性があるということをよく耳にするのですが、 過去に上記の対応を行われた方がいらっしゃいましたら、その後の運用で問題は発生しなかったか(ファイルが壊れる事はないのか)、 過去に壊れた事象をお持ちの方がいらっしゃいましたら、どのように対応されたのか、 別の対応方法をとられていらっしゃる方は、その対応方法を ご教授いただけないでしょうか。 プログラムでデータの破損を退避できるのであれば、上の対応と併せて開発できそうな気はするのですが、、 ご回答、よろしくお願いいたします。
- ベストアンサー
- オフィス系ソフト
- DELETE文のWHERE条件にSUBSTRを使いたい <DB2+Java1.4>
DB2+eclipse2.1で開発しています。 テーブルのデータ削除に条件を付け加えたいのですが、 strSql = "DELETE FROM スキーマ名.テーブル名 WHERE substr(ABC,1,6) < " + "200404"; というように、SQL文を書くと、 ------------------------------------ [IBM][CLI Driver][DB2/NT] SQL0440N 互換引き数を持つタイプ "FUNCTION" の名前 "SUBSTR" の許可ルーチンが見つかりませんでした。 SQLSTATE=42884 ------------------------------------ 上記エラーが出ます。 DB2でSUBSTRって使えると思うのですが。 ご存知の方いましたら、教えてください。 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- 単純ですが、意外と穴?なデータベースリソースの鮮度
よろしくお願い致します。 環境PHP5.2.5 / SQLite3 /*---------------------------------------- * インサート -----------------------------------------*/ $sql_1 = 'INSERTなんたら~(id = 25 を作成)'; $db_pass = 'db_hoge.sqlite'; $db_res = sqlite_open($db_pass); //★タイム(1) $result = sqlite_query($db_res,$sql_1); : ~ INSERT処理($sql_1)をしてます ~ : //sqlite_close($db_res) ここではクローズせず : : /*---------------------------------------- * デリート -----------------------------------------*/ $sql_2 = 'DELETEなんたら~(id = 25 を削除)'; //省略しちゃうわけです。$db_pass = 'db_hoge.sqlite'; //省略しちゃうわけです。$db_res = sqlite_open($db_pass); //★タイム(2) $result = sqlite_query($db_res,$sql_2); : ~ DELETE処理($sql_2)をしてます ~ : /*---------------------------------------- * /処理完了 -----------------------------------------*/ //ここで、ようやく、クローズ sqlite_close($db_res); //============================================== 何が疑問かと言いますと、 ★タイム(1)と、★タイム(2)の時点では、 $db_res の中身の鮮度が違うのでは?と思うわけです。 つまり、 ★タイム(1)の時点では、id=25のデータは作成されていません。 ★タイム(2)の時点では、id=25のデータは作成済みです。 id=25が作成されていない状態のDBリソースを、 ★タイム(2)の所で、使用しています。 言い換えると、 id=25が存在していないDBのリソースを、 タイム(2)の時点で使用し、 そのリソースをもとに、 id=25のデータを消そう(DELETEしよう)としているわけです。 「//省略しちゃうわけです。」 という所で、省略する場合と、しない場合とでは、 結果はやはり異なるのでしょうか? 検査対象がリソースだけに、調べにくいなと思い、 質問させて頂きました。 どなたか、この辺りの正式な作法も含めて、 教えて頂けてませんでしょうか。 上記の「//省略しちゃうんです。」の方法で、 問題ないですよ、 ということであれば、今後も、省略しちゃう方向で、 コーディングしていこうと思います。笑
- ベストアンサー
- PHP
- 排他ロックしたレコードが、別トランザクションから参照されてしまい困っています。
SQL Server2000を使用し、 あるトランザクションで排他ロック(XLOCK)をかけたレコードが 他のトランザクションから共有ロックを使用し参照できてしまう状態は存在するのでしょうか? 排他ロックをかけたレコードが 他のトランザクションから参照できてしまい困っています。 現在、下記の環境で開発を行っております。 ・サーバ側 Windows Server2003 SQL Server2000(sp4) ・クライアント側 Windows Xp(sp3) jdk6.0 jdbc 3.0 Type4 以下が具体的な状況となります。 前提として、 ・二つのトランザクション(以下A、Bと表記します)が存在する。 ・AとBは別のユーザでコネクションを張っている。 ・autoCommitはfalseに設定している。 ・テーブルにプライマリキーやインデックスは張っていない。 ・レコードは10件。 ・分離レベルはREAD COMMITED (1)Aから、「SELECT * FROM TEST_TABLE WITH(XLOCK) 」を発行 (2)Bから、「SELECT * FROM TEST_TABLE」を発行 このような状況で、(1)、(2)の順で処理を行った場合に 私の認識では、(2)の検索時にタイムアウト等が発生するという認識です。 しかし、(2)のSQLは正常に終了し、(1)と同じデータが取得されてしまいます。 ◆その他、確認したこと ・(1)の処理直後に処理を停止し、Enterprise Managerでロックが取得されているか確認したところ、トランザクションAがすべてのレコードを排他ロック(X)していた。 ・(2)の処理直後にロックの状態を確認しても、やはりトランザクションAが、排他ロック(X)していた。 ・CSEを使いODBC経由で同様の操作を行った場合も同じ動作がおこる。 ・(1)WITH(XLOCK, TABLOCK)とすると(2)でデータが取得できなくなる。 ・(2)のSQLを「SELECT * FROM TEST_TABLE WHERE COLUMN01 > 0」のように指定するとタイムアウトする(期待通りの動き) ・(2)のSQLを「SELECT COLUMN01 FROM TEST_TABLE WHERE COLUMN01 > 0」のように指定すると、今度は、なぜか取得出来てしまう。 ・(1)と(2)の間にトランザクションAでUPDATEなどを行うと(COMMITはしない)(2)のSQLのWHERE句や取得するカラムに関係なく、(2)のSQLはタイムアウトする(当り前か。。。) いろいろ書きましたが、排他ロックされたレコードに 共有ロックはかけれないという認識なのですが、 そうではないのでしょうか? また、そうではない場合どういった場合に、 共有ロックが可能となるのでしょうか? SQL Serverの排他制御に詳しい方や 同じような現象に陥った方がいましたら、ご教授お願いします。
- ベストアンサー
- SQL Server
- SQLのIN句について
DB:Oracle9i SQLのIN句のカッコ内は、何個まで書けるなど、制限はあるのでしょうか? PRO_KEY = IN (no1, no2, no3・・・)など、カッコ内が可変で、数百個、もしくは数千個ある場合、IN句を使用しデータを一度に取得するのではなく、PRO_KEY = no1のSELECT処理を発行、PRO_KEY = no2のSELECT処理を発行・・・し、ARRAYに検索結果を1つずつ詰めていく方が良いのでしょうか? 初心者で恐縮ですが、どなたかご教授ください。
- ベストアンサー
- Oracle
- SQL*PLUSでファイルからDELETE文
お世話になります、 Oracle8のSQL*PLUSを使用方法についての質問です。 ローカルにファイル(delete.sql)を作成して SQL*PLUSからそのファイルを流してファイルの中身の処理を実行するという方法をご存知の方が いらっしゃったらおしえてください。 --delete.sqlの中身--------- delete from table_a delete from table_b delete from table_c delete from table_d delete from table_e 以下省略 よろしくお願いします。
- ベストアンサー
- その他(データベース)
- oracle8iの使用経験のある方お願いします。
今度、社内のシステムでolacle8iを使うことになりました。 それで、今までお使いになったことがある方に、使用しての感想、気になったことなどのご意見をお聞きしたいと思います。 特に開発者、またはDB管理者のご経験がある方なら、更にうれしく思います。 私はこれまで、oracle5、postgreSQLの経験はありますが、oracle8iははじめて使います。ですのでSQLに関してはそこそこ使えると思うのですが・・・。 小さなことでも結構ですので、よろしくお願いします。
- 締切済み
- その他(データベース)
補足
了解致しました。 お手数お掛けしてしまい申し訳ございません。 ちなみにLOOP中のEDITメソッドでかかるロックとは DbCreateDynasetの関数が実行中の際にだけロックがかかっている といった事なのでしょうか?