데이터 베이스 Oracle oracle 뷰 잠금 및 세션 실행 sql(요약 공유)

oracle 뷰 잠금 및 세션 실행 sql(요약 공유)

Jul 01, 2022 pm 12:23 PM
oracle

이 글은 Oracle에 대한 관련 지식을 제공하며, 세션 실행 시 잠금 및 SQL 확인과 관련된 문제를 주로 소개합니다. 모두에게 도움이 되기를 바랍니다.

oracle 뷰 잠금 및 세션 실행 sql(요약 공유)

추천 튜토리얼: "Oracle Video Tutorial"

이 글의 테스트 데이터를 위한 데이터베이스 환경: Oracle 11g

왜 세션 실행 중에 sql이라고 하는 것 같나요? 특정 세션의 기록을 얻을 수 없다는 블로그 게시물도 많이 읽었습니다. 인터넷에서 많은 사람들이 sql_id를 v$active_session_history 및 v$ 뷰와 연결하여 특정 세션의 SQL 실행 기록을 쿼리할 수 있다고 말했습니다. sqlarea.실습해본 결과 불가능하다는 것을 확인했습니다.(dba_hist_active_sess_history 테이블을 통해 시도해봐도 작동하지 않습니다.) 일부 sql의 sql_id가 v$active_session_history에 전혀 기록되지 않고 있습니다. : control_management_pack_access 권한이 없는 것으로 확인되었습니다. 그리고 확인해 보니 매개변수 값이 정상이고 매개변수 데이터베이스가 열려 있는 것으로 나타났습니다. Oracle V$ACTIVE_SESSION_HISTORY 쿼리에 데이터가 없습니다. - wazz_s - 블로그를 참조하세요. 박

​ v$sqlarea 뷰를 통해 sql의 실행기록을 조회할 수 있는데, sql을 실행하는 sessionid를 찾을 수 없다면, 누가 실행했는지 알 수 있으면 좋겠습니다. sql.

테이블을 잠그게 만든 SQL을 쿼리하려면 인터넷에 있는 대부분의 블로그 게시물에서 v$session 뷰를 쿼리하여 해당 prev_sql_addr 필드 값을 얻고 이를 A 값으로 기록한 다음 이를 가르칩니다. A 값을 v$sqlarea 뷰에 있는 주소 필드의 쿼리 조건 값으로 사용하면 해당 SQL 레코드를 쿼리할 수 있습니다. 연습 테스트로 잠금 테이블을 찾는 SQL을 찾을 수 있지만 대부분의 경우 일반적인 프로덕션 환경에서는 얻을 수 없습니다. 이유는 무엇입니까?

이 기사에서는 탐색적 접근 방식을 사용하여 데이터의 정확성을 보장하기 위해 세션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 session1의 세션 ID를 확인합니다

 select userenv('sid') from dual;
로그인 후 복사

세션 ID가 2546

3인 것을 확인할 수 있습니다. session1에서 한 행을 잠급니다.

 select * from zxy_table where zxy_name='zxy1' for update;
로그인 후 복사

4 session2에서 세션 ID가 2189인지 쿼리합니다.

그런 다음 session2에서 다음과 같이 session2의 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;
로그인 후 복사

You Lock 테이블이 발생한 원인을 알 수 있습니다. Session id는 이전 Session 1인 2546이고, object_id는 110154입니다. 물론 생성 환경에서는 반드시 1개 이상의 레코드를 여러 번 실행해야 합니다. . n번 실행한 후에도 해당 레코드를 볼 수 있습니다. , 이 레코드가 잠금 테이블의 레코드임을 증명하세요

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_sq l_addr 값은 000000012E045E28을 얻은 다음, 얻은 값을 통해 v$sqlarea

select * from v$sqlarea where address='000000012E045E28';
로그인 후 복사

뷰를 쿼리합니다. , 테이블 잠금을 일으킨 문을 볼 수 있는데 많은 블로그 게시물이 이 단계에서 끝나기 때문에 쿼리는 정말 신뢰할 수 있습니까? 대답은 신뢰할 수 없습니다. 다음과 같이 session1로 돌아가서 원하는 대로 SQL을 실행할 수 있습니다.

 select * from zxy_table;
로그인 후 복사

그런 다음 session3에서 실행할 수 있습니다.

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 중국어 웹사이트의 기타 관련 기사를 참조하세요!

본 웹사이트의 성명
본 글의 내용은 네티즌들의 자발적인 기여로 작성되었으며, 저작권은 원저작자에게 있습니다. 본 사이트는 이에 상응하는 법적 책임을 지지 않습니다. 표절이나 침해가 의심되는 콘텐츠를 발견한 경우 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 Hentai를 무료로 생성하십시오.

인기 기사

R.E.P.O. 에너지 결정과 그들이하는 일 (노란색 크리스탈)
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 최고의 그래픽 설정
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌
R.E.P.O. 아무도들을 수없는 경우 오디오를 수정하는 방법
3 몇 주 전 By 尊渡假赌尊渡假赌尊渡假赌

뜨거운 도구

메모장++7.3.1

메모장++7.3.1

사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전

SublimeText3 중국어 버전

중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기

스튜디오 13.0.1 보내기

강력한 PHP 통합 개발 환경

드림위버 CS6

드림위버 CS6

시각적 웹 개발 도구

SublimeText3 Mac 버전

SublimeText3 Mac 버전

신 수준의 코드 편집 소프트웨어(SublimeText3)

오라클에서 두 날짜 사이의 일수를 계산하는 함수 오라클에서 두 날짜 사이의 일수를 계산하는 함수 May 08, 2024 pm 07:45 PM

두 날짜 사이의 일수를 계산하는 Oracle의 함수는 DATEDIFF()입니다. 구체적인 사용법은 다음과 같습니다. 시간 간격 단위 지정: 간격(예: 일, 월, 연도) 두 날짜 값 지정: date1 및 date2DATEDIFF(interval, date1, date2) 일 차이를 반환합니다.

Oracle 데이터베이스 로그는 얼마나 오래 보관됩니까? Oracle 데이터베이스 로그는 얼마나 오래 보관됩니까? May 10, 2024 am 03:27 AM

Oracle 데이터베이스 로그의 보존 기간은 다음을 포함한 로그 유형 및 구성에 따라 다릅니다. 재실행 로그: "LOG_ARCHIVE_DEST" 매개변수로 구성된 최대 크기에 의해 결정됩니다. 보관된 리두 로그: "DB_RECOVERY_FILE_DEST_SIZE" 매개변수로 구성된 최대 크기에 따라 결정됩니다. 온라인 리두 로그: 보관되지 않고 데이터베이스를 다시 시작하면 손실되며 보존 기간은 인스턴스 실행 시간과 일치합니다. 감사 로그: "AUDIT_TRAIL" 매개변수로 구성되며 기본적으로 30일 동안 보관됩니다.

Oracle 데이터베이스 시작 단계의 순서는 다음과 같습니다. Oracle 데이터베이스 시작 단계의 순서는 다음과 같습니다. May 10, 2024 am 01:48 AM

Oracle 데이터베이스 시작 순서는 다음과 같습니다. 1. 전제 조건을 확인합니다. 3. 데이터베이스 인스턴스를 시작합니다. 5. 데이터베이스에 연결합니다. . 서비스를 활성화합니다(필요한 경우). 8. 연결을 테스트합니다.

오라클에서 간격을 사용하는 방법 오라클에서 간격을 사용하는 방법 May 08, 2024 pm 07:54 PM

Oracle의 INTERVAL 데이터 유형은 시간 간격을 나타내는 데 사용됩니다. 구문은 INTERVAL <precision> <unit>입니다. INTERVAL을 연산하기 위해 덧셈, 뺄셈, 곱셈 및 나눗셈 연산을 사용할 수 있으며 이는 시간 데이터 저장과 같은 시나리오에 적합합니다. 날짜 차이를 계산합니다.

오라클에는 얼마나 많은 메모리가 필요합니까? 오라클에는 얼마나 많은 메모리가 필요합니까? May 10, 2024 am 04:12 AM

Oracle에 필요한 메모리 양은 데이터베이스 크기, 활동 수준 및 필요한 성능 수준(데이터 버퍼 저장, 인덱스 버퍼, SQL 문 실행 및 데이터 사전 캐시 관리에 필요)에 따라 다릅니다. 정확한 양은 데이터베이스 크기, 활동 수준 및 필요한 성능 수준에 따라 달라집니다. 모범 사례에는 적절한 SGA 크기 설정, SGA 구성 요소 크기 조정, AMM 사용 및 메모리 사용량 모니터링이 포함됩니다.

Oracle에서 특정 문자의 발생 횟수를 확인하는 방법 Oracle에서 특정 문자의 발생 횟수를 확인하는 방법 May 09, 2024 pm 09:33 PM

Oracle에서 문자 발생 횟수를 찾으려면 다음 단계를 수행하십시오. 문자열의 전체 길이를 얻습니다. 문자가 나타나는 부분 문자열의 길이를 얻습니다. 부분 문자열 길이를 빼서 문자 발생 횟수를 계산합니다. 전체 길이에서.

오라클에서 문자열을 바꾸는 방법 오라클에서 문자열을 바꾸는 방법 May 08, 2024 pm 07:24 PM

Oracle에서 문자열을 바꾸는 방법은 REPLACE 함수를 사용하는 것입니다. 이 함수의 구문은 REPLACE(string, search_string, replacement_string)입니다. 사용 단계: 1. 대체할 하위 문자열을 식별합니다. 2. 하위 문자열을 대체할 새 문자열을 결정합니다. 3. 대체할 REPLACE 함수를 사용합니다. 고급 사용법에는 여러 대체, 대소문자 구분, 특수 문자 대체 등이 포함됩니다.

Oracle 데이터베이스 서버 하드웨어 구성 요구 사항 Oracle 데이터베이스 서버 하드웨어 구성 요구 사항 May 10, 2024 am 04:00 AM

Oracle 데이터베이스 서버 하드웨어 구성 요구 사항: 프로세서: 기본 주파수가 2.5GHz 이상인 멀티 코어, 대규모 데이터베이스의 경우 32개 이상의 코어가 권장됩니다. 메모리: 소규모 데이터베이스의 경우 최소 8GB, 중간 크기의 경우 16~64GB, 대규모 데이터베이스 또는 과도한 작업 부하의 경우 최대 512GB 이상. 스토리지: SSD 또는 NVMe 디스크, 중복성 및 성능을 위한 RAID 어레이. 네트워크: 고속 네트워크(10GbE 이상), 전용 네트워크 카드, 지연 시간이 짧은 네트워크. 기타: 안정적인 전원 공급 장치, 이중 구성 요소, 호환 가능한 운영 체제 및 소프트웨어, 열 방출 및 냉각 시스템.

See all articles