ホームページ データベース Oracle Oracle ビューのロックとセッション実行 SQL (概要共有)

Oracle ビューのロックとセッション実行 SQL (概要共有)

Jul 01, 2022 pm 12:23 PM
oracle

この記事では、Oracle に関する関連知識を提供し、セッション実行時のロックと SQL のチェックに関する問題を中心に紹介します。一緒に見ていきましょう。皆様のお役に立てれば幸いです。 。

Oracle ビューのロックとセッション実行 SQL (概要共有)

推奨チュートリアル: 「Oracle ビデオ チュートリアル

この記事のテスト データのデータベース環境: Oracle 11g

セッション実行中の SQL というのはなぜでしょうか? あるセッションの SQL 実行記録が取得できないようです。ブログ記事もよく読みました。インターネット上では多くの人が書いています。 sql_id がビュー v$active_session_history と v$sqlarea に関連付けられているとします。特定のセッションの SQL 実行記録をクエリできます。 練習後、機能しないことがわかりました (テーブル dba_hist_active_sess_history も機能しません) 、一部の SQL の sql_id が v$active_session_history にまったく記録されていないため、パラメータ control_management_pack_access を変更しようとしましたが、権限がないことがわかりました。パラメータ値が正常であり、パラメータ データベースが開いていることがわかりました。ブログ投稿を参照してください: Oracle V$ACTIVE_SESSION_HISTORY Query No Data - wazz_s - Blog Park

SQL の実行記録をクエリできますv$sqlarea ビューを使用しましたが、SQL を実行したセッション ID が見つかりません。このセッション ID があれば、誰が SQL を実行したかを確認できると便利です。

テーブルをロックする原因となった SQL をクエリしたい場合、インターネット上のほとんどのブログ投稿で、ビュー v$ をクエリして、対応する prev_sql_addr フィールドの値を取得することが説明されています。これは値 A として記録され、値 A をビュー v$sqlarea フィールド アドレスのクエリ条件値として使用すると、対応する SQL レコードをクエリできるようになります。模擬テストとして、ロック テーブルを検索する SQL を見つけることができますが、通常の運用環境ではほとんどの場合、それを取得できないのはなぜですか? 以下の概要を参照してください。

この記事では、探索的アプローチを使用して研究しています。データの正確性を確保するために、3 つのデータベース セッションを開き、それぞれセッション 1、セッション 2、セッション 3 として記録しました。具体的な手順

1 セッションで新しいテスト テーブルとテスト データを作成します。 session1

--新建测试表
create table zxy_table(zxy_id int,zxy_name varchar2(20));
--插入数据
insert into zxy_table(zxy_id,zxy_name) values(1,'zxy1');
insert into zxy_table(zxy_id,zxy_name) values(2,'zxy2');
insert into zxy_table(zxy_id,zxy_name) values(3,'zxy3');
insert into zxy_table(zxy_id,zxy_name) values(4,'zxy4');
commit;
ログイン後にコピー

2 のセッション ID を表示します。 session1

 select userenv('sid') from dual;
ログイン後にコピー

セッション ID が 2546

3 であることがわかります。 session1 では、次のように、更新用の選択を通じてテーブル zxy_table の行をロックします。 :

 select * from zxy_table where zxy_name='zxy1' for update;
ログイン後にコピー

4 session2 で、セッション ID が 2189 であることをクエリします。

次に、テーブル zxy_table の行を値 zxy_name='zxy1 で更新します。

update zxy_table set zxy_name='zxy1_modify' where zxy_name='zxy1';
ログイン後にコピー

次に、以下に示すように、SQL がブロックされていることがわかります:

5 次に、セッション 3 に進みます。ロック テーブルの状況を表示するには

まずテーブル v$locked_object を確認します

select * from v$locked_object;
ログイン後にコピー

ロック テーブルの原因となったセッション ID が 2546 であることがわかります。これは前の session1 で、object_id は 110154 です。もちろん、生成環境では、必ず複数のレコードが表示されます。これを数回実行する必要があります。n 回実行した後でも、レコードは表示されます。これは、このレコードがロック テーブルのレコードであることを証明します。

Pass object_id :110154 dba4_objects テーブルをクエリして、詳細なロック テーブル情報をクエリします

select object_name as 被锁的表名称,obj.* from dba_objects obj where object_id='110154';
ログイン後にコピー

## sessionid: 2546

## を通じてビュー v$session

select 
       s.prev_sql_addr,
       module as 客户端工具名称,
       s.user# as 数据库账号名,
       s.osuser as 连接数据库客户端对应的window账号名称,
       s.machine as 连接数据库客户端对应的计算机名称,
       s.* 
from v$session s where sid='2546';
ログイン後にコピー
ログイン後にコピー
# をクエリします。 prev_sql_addr: 000000012E045E28 の値を取得し、ビュー v$sqlarea をクエリします。
select * from v$sqlarea where address='000000012E045E28';
ログイン後にコピー

上の図からわかるように、結果は「テーブルをロックするステートメントがありますが、多くのブログ投稿はこのステップで終了しています。このクエリは本当に信頼できますか?」になります。答えは信頼できません。次のように、セッション 1 に戻って SQL を自由に実行できます:

 select * from zxy_table;
ログイン後にコピー

その後、セッション 3 に移動して

select 
       s.prev_sql_addr,
       module as 客户端工具名称,
       s.user# as 数据库账号名,
       s.osuser as 连接数据库客户端对应的window账号名称,
       s.machine as 连接数据库客户端对应的计算机名称,
       s.* 
from v$session s where sid='2546';
ログイン後にコピー
ログイン後にコピー

を実行できます。

 再看看prev_sql_addr是不是变了,从000000012E045E28变为了00000001FB03CEC0,再通过00000001FB03CEC0查询视图v$sqlarea

select * from v$sqlarea where address='00000001FB03CEC0';
ログイン後にコピー

得到的sql_text是select * from zxy_table,你敢说这条sql导致了锁表吗?所有只能说是session1当前执行的sql,而且你很难保证session1执行完锁表的sql: select * from zxy_table where zxy_name='zxy1' for update且在提交前不再执行别的sql,这就是前文提出的问题的答案。

推荐教程:《Oracle视频教程

以上がOracle ビューのロックとセッション実行 SQL (概要共有)の詳細内容です。詳細については、PHP 中国語 Web サイトの他の関連記事を参照してください。

このウェブサイトの声明
この記事の内容はネチズンが自主的に寄稿したものであり、著作権は原著者に帰属します。このサイトは、それに相当する法的責任を負いません。盗作または侵害の疑いのあるコンテンツを見つけた場合は、admin@php.cn までご連絡ください。

ホットAIツール

Undresser.AI Undress

Undresser.AI Undress

リアルなヌード写真を作成する AI 搭載アプリ

AI Clothes Remover

AI Clothes Remover

写真から衣服を削除するオンライン AI ツール。

Undress AI Tool

Undress AI Tool

脱衣画像を無料で

Clothoff.io

Clothoff.io

AI衣類リムーバー

AI Hentai Generator

AI Hentai Generator

AIヘンタイを無料で生成します。

ホットツール

メモ帳++7.3.1

メモ帳++7.3.1

使いやすく無料のコードエディター

SublimeText3 中国語版

SublimeText3 中国語版

中国語版、とても使いやすい

ゼンドスタジオ 13.0.1

ゼンドスタジオ 13.0.1

強力な PHP 統合開発環境

ドリームウィーバー CS6

ドリームウィーバー CS6

ビジュアル Web 開発ツール

SublimeText3 Mac版

SublimeText3 Mac版

神レベルのコード編集ソフト(SublimeText3)

Oracle データベースのログはどのくらいの期間保存されますか? Oracle データベースのログはどのくらいの期間保存されますか? May 10, 2024 am 03:27 AM

Oracle データベース ログの保存期間は、次のようなログのタイプと構成によって異なります。 REDO ログ: 「LOG_ARCHIVE_DEST」パラメータで構成された最大サイズによって決定されます。アーカイブ REDO ログ: 「DB_RECOVERY_FILE_DEST_SIZE」パラメータで構成された最大サイズによって決まります。オンライン REDO ログ: アーカイブされず、データベースの再起動時に失われます。保持期間はインスタンスの実行時間と一致します。監査ログ: 「AUDIT_TRAIL」パラメータによって構成され、デフォルトで 30 日間保持されます。

Oracle データベースの起動手順の順序は次のとおりです。 Oracle データベースの起動手順の順序は次のとおりです。 May 10, 2024 am 01:48 AM

Oracle データベースの起動シーケンスは次のとおりです。 1. 前提条件を確認します。 3. データベース インスタンスを起動します。 5. データベースに接続します。サービスを有効にします (必要な場合)。 8. 接続をテストします。

Oracle にはどれくらいのメモリが必要ですか? Oracle にはどれくらいのメモリが必要ですか? May 10, 2024 am 04:12 AM

Oracle が必要とするメモリーの量は、データベースのサイズ、アクティビティー・レベル、および必要なパフォーマンス・レベル (データ・バッファー、索引バッファーの保管、SQL ステートメントの実行、およびデータ・ディクショナリー・キャッシュの管理) によって異なります。正確な量は、データベースのサイズ、アクティビティ レベル、および必要なパフォーマンス レベルによって影響されます。ベスト プラクティスには、適切な SGA サイズの設定、SGA コンポーネントのサイズ設定、AMM の使用、メモリ使用量の監視などが含まれます。

Oracle で特定の文字の出現数を確認する方法 Oracle で特定の文字の出現数を確認する方法 May 09, 2024 pm 09:33 PM

Oracle で文字の出現数を確認するには、次の手順を実行します。 文字列の全長を取得します。 文字が出現する部分文字列の長さを取得します。 部分文字列の長さを減算して、文字の出現数をカウントします。全長から。

Oracle データベース サーバーのハードウェア構成要件 Oracle データベース サーバーのハードウェア構成要件 May 10, 2024 am 04:00 AM

Oracle データベース サーバーのハードウェア構成要件: プロセッサ: マルチコア、少なくとも 2.5 GHz のメイン周波数 大規模なデータベースの場合は、32 コア以上が推奨されます。メモリ: 小規模データベースの場合は少なくとも 8 GB、中規模のデータベースの場合は 16 ~ 64 GB、大規模なデータベースまたは重いワークロードの場合は最大 512 GB 以上。ストレージ: SSD または NVMe ディスク、冗長性とパフォーマンスのための RAID アレイ。ネットワーク: 高速ネットワーク (10GbE 以上)、専用ネットワーク カード、低遅延ネットワーク。その他: 安定した電源、冗長コンポーネント、互換性のあるオペレーティング システムとソフトウェア、放熱と冷却システム。

Oracleでdbfファイルを読み取る方法 Oracleでdbfファイルを読み取る方法 May 10, 2024 am 01:27 AM

Oracle は、次の手順で dbf ファイルを読み取ることができます。外部テーブルを作成し、その dbf ファイルを参照し、データを Oracle テーブルにインポートします。

Oracle データベースを使用するために必要なメモリの量 Oracle データベースを使用するために必要なメモリの量 May 10, 2024 am 03:42 AM

Oracle データベースに必要なメモリの量は、データベースのサイズ、ワークロードの種類、同時ユーザーの数によって異なります。一般的な推奨事項: 小規模データベース: 16 ~ 32 GB、中規模データベース: 32 ~ 64 GB、大規模データベース: 64 GB 以上。考慮すべきその他の要素には、データベースのバージョン、メモリ最適化オプション、仮想化、ベスト プラクティス (メモリ使用量の監視、割り当ての調整) などがあります。

Oracle のスケジュールされたタスクは、作成ステップを 1 日に 1 回実行します。 Oracle のスケジュールされたタスクは、作成ステップを 1 日に 1 回実行します。 May 10, 2024 am 03:03 AM

Oracle で 1 日に 1 回実行されるスケジュールされたタスクを作成するには、次の 3 つの手順を実行する必要があります。 ジョブを作成します。ジョブにサブジョブを追加し、そのスケジュール式を「INTERVAL 1 DAY」に設定します。ジョブを有効にします。

See all articles