• ベストアンサー

SYBASE12.5の行ロック

TrickOrTreatの回答

  • ベストアンサー
回答No.1

SYBASEのロックは操作するテーブルに対して設定します。 allpages,datapages,datarows の3種類のタイプが あって、ローレベルのロックを適用するようにテーブルを 設定するには次のコマンドを行ってみてください。 alter table テーブル名 lock datarows テーブルのロックタイプはsp_help テーブル名で確認が できます。

osp
質問者

お礼

遅くなりましたが、テーブルのロックできました。 ありがとうございました。

関連するQ&A

  • 別サーバのSYBASEへアクセス

    現在、Sybaseを用いたCプログラミングを行っています。 そこで自マシン以外のSybaseへアクセスを行い たいのですが、良い方法をご存知の方いらっしゃいませんか? OpenClientのct_connectを 駆使すればどうにかなりますでしょうか?

  • SQLServerの行ロック

    VB6及びSQLServer2000で開発を行っているのですが 1つのテーブルに対して一度に複数の行ロックを 行う事が出来ずに困っています。 通常と違う方法が必要なのか、何か注意点があるのでしょうか? よろしくお願いします

  • 行ロックについて

    Web上のボタンをクリックしたとき 該当データを1件取得しそのデータにフラグをたてる ⇒フラグを管理するテーブルに投入する という処理をしており該当データは一人につき1件取得したいです。 BEGIN SELECT * FROM TABLE1 WHERE day = 今日 ORDER BY time LIMIT 1 FOR UPDATE UPDATE TABLE1 SET flag = 1 WHERE id = $id INSERT INTO TABLE2 (time , flag ) VALUES ($time , 1); COMMIT 現在の問題は同時にボタンを押したとき SELECTで取得したデータが重複してしまうことがあることです。 BEGINからCOMMITまでを一連の流れとし、 その間はSELECTもできないようにしたいです。 ドキュメントに FOR UPDATEだとUPDATE、DELETE、SELECT FOR UPDATEは拒否されます とありますのでSELECTは通ると解釈するとFOR UPDATEでは実現できないのでしょうか? テーブルのロックではなく行のロックで実現したいのですが どなたかご教授お願い致します。 ※バージョンはPostgreSQL 8.1.18 です。

  • 行ロックをかけたい

    DB環境:Oracle9i 9.2.0 言語 :VB6.0 ミドルウェア:oo4o VB初心者です。 VBアプリで参照したデータに行ロックをかけて次に参照した場合はエラーメッセージを出したいです。 その為にSELECT文で「FOR UPDATE NOWAIT」をかけるようにしました。すると次のコードで落ちてしまいます。 Set recSet = OraDatabase.CreateDynaset(ps_SQL, ORADYN_READONLY) 'レコードセットオープン エラーメッセージ「エラーコード54、リソースビジーです~」 とりあえずはエラーコードを返すようにできればOKだと思うのですが。。 「FOR UPDATE NOWAIT」を記述する場合のVBの記述方法やVBのロック管理の方法などいい方法がございましたらアドバイスお願い致します。

  • ORACLE9i  行ロック情報を取得する方法

    複数のクライアントから同一テーブルの同一レコードに対してselect for update nowaitで行ロックをした場合に先にロックした方が行をロックし後のロックはロック中のエラーにりますが、このとき、誰(マシン名etc)がどの位時間ロックしたままかわかる方法はないものでしょうか。

  • 行ロックされているROWID

    行ロックされているROWIDを見れるようなビューは存在するのでしょうか? また、V$LOCKビューのタイプがTXの行のID1、ID2は何を指しているのでしょうか? ご存知の方が見えましたら、ご教授願います。

  • エクセルで行のロックの仕方

    エクセルの表で1行だけロックさせる方法を教えて下さい。たとえば印刷プレビューを表示した時に毎ページごとに、ロックした行を表示させたい(通常画面ではロックした行は1行のみしか入力していない) お願いします。

  • SELECT時の行ロックの必要性について

    SELECT ~ FOR UPDATEやSELECT ~ LOCK IN SHARE MODEという行ロックがあり、この件について解説しているサイトをいろいろ見ているのですが、振る舞いが複雑だということはわかりました。 しかしそもそもなぜSELECTで行ロックするのか、運用上でどんなときに使うのかを解説しているサイトは見当たりませんでした。 私は、SELECTするときは単に SELECT * FROM tb_a WHERE id = 1; としか記述していません。 質問1. なぜSELECTするのにトランザクションが必要なのでしょうか?運用上でどんなときにSELECTでトランザクションを使うのでしょうか?よく解説サイトには、 BEGIN; SELECT * FROM tb_a WHERE id = 1 FOR UPDATE; COMMIT; と書いています。SELECTするのに行をロックする必要性がいまいちわからないです。 質問2. トランザクションを開始したときにロックがかかるのではないのでしょうか?つまりBEGIN;でロックがかかるわけではないのですか?SELECTのクエリーにFOR UPDATEと書くということはこのSELECTのコードが実行された時点でロックがかかるのでしょうか? 質問3. FOR UPDATEやLOCK IN SHARE MODEというのはSELECTにしか使えないのか、もしくはSELECTだから意味があるのでしょうか?UPDATEやDELETEは単にBEGINE;とCOMMIT;で囲えばいいだけですよね? 質問4. 以下のようなコードを解説しているサイトがあります。 BEGIN; SELECT * FROM tb_a WHERE id = 1; COMMIT; SELECT文にはFOR UPDATEも書いていないのですが、これは何を意味するのでしょうか?つまり、SELECTするのになぜトランザクションを実行するのでしょうか? 一番知りたいのは運用上どのような場合にSELECTでトランザクションを使って行ロックするのか、ということです。 どうぞよろしくお願い致します。

    • ベストアンサー
    • MySQL
  • PHPのストアドプロシージャ仕様

    初めまして、桜井ともうします。 PHP、Sybaseを用いた開発を行っております。 PHPからSybaseへのデータ取得には sybase_query()関数にストアドプロシージャを 用いて行いたいと思っています。 しかし、PHPの仕様ではストアドプロシージャを 用いた際、最初の1行しか取得できないようです。 今回、どうしてもストアドプロシージャにこだわら 無ければならない理由があるので、 sybase_query()関数を書き換えて(作り替えて) 複数行取得できるようにしようと試みました。 ですが、ct_fetch()が行われている部分で うまくfetchされていないようなのです。 PHP、Sybaseともに初めて扱うものなので、 行き詰まってしまっています。 どなたか、良いアイディアがありましたら、 教えていただけないでしょうか。

    • ベストアンサー
    • PHP
  • ADOで排他ロックがうまくいかない

    VB6.0+access98で開発してます。 ADOを使ったレコード単位の排他ロックについて教えてください。 rs.Open時に,adLockPessimisticを指定しても,ロックされません。 rs.Update のところで一瞬ロックされているようです。 あるレコードの編集中は登録またはキャンセルされるまで、 ずっとロックしていたいのです。 他端末からそのレコードにアクセスした際にエラーが返るように したいのです。 上手く出来る方法ありませんか?