>  기사  >  데이터 베이스  >  오라클 실행 취소 분석

오라클 실행 취소 분석

尚
앞으로
2020-05-12 13:10:542659검색

오라클 실행 취소 분석

실행 취소는 무엇에 사용되나요? N u u UNDO를 소개하기 전에 또 다른 이야기를 해보자. 거래를 진행하는 과정에서 많은 자원을 신청해야 하며, 복잡한 거래 역시 완료하기 위해 많은 단계를 거쳐야 합니다. 그러면 복잡한 트랜잭션에는 성공 또는 실패라는 두 가지 결과만 있습니다(이는 결코 발생하지 않는 것과 같습니다).

아주 일반적인 예인 은행 송금에는 실제로 두 단계가 필요합니다. 첫 번째 단계는 계좌에 있는 금액을 차감하는 것이고, 두 번째 단계는 이체된 계좌에 금액을 추가하는 것입니다.

중간 실행되어 돈이 줄어들고 이체 계좌의 돈이 추가되지 않으면 이때 거래가 롤백되어 원래 상태로 롤백됩니다. 즉, 돈을 이체하기 전에 귀하와 이체 계좌에 금액을 기록해야 합니다. 이렇게 하면 트랜잭션이 실패할 경우 트랜잭션이 발생하기 전 상태로 롤백됩니다.

거래의 독창성과 무결성을 보장하기 위해 실행 취소의 개념이 도입되었습니다. Undo는 트랜잭션 작업 중 데이터를 기록하고 저장하는 데 사용됩니다. 트랜잭션에 오류가 발생하면 이전 데이터로 채울 수 있습니다.

Undo Segment Undo Segment:

위의 보기에서 테이블(테이블)의 데이터를 수정하려는 것을 분명히 볼 수 있습니다. 수정하기 전에 먼저 이전 이미지(이전 이미지)를 변경하세요. 끄르다. 그런 다음 테이블에 새 이미지를 넣으십시오. 오라클 실행 취소 분석

프로세스가 실패하면 실행 취소를 통해 이전 이미지를 되돌려 원래 위치에 놓아 전혀 일어나지 않은 것처럼 보이게 할 수도 있습니다.

실행 취소 세그먼트는 테이블 공간에 저장됩니다. Undo의 크기는 고정되어 있으며, 고정되어 있으므로 제한됩니다. 저장된 기록이 너무 많으면 꽉 차서 새로 녹음된 데이터가 가장 오래된 데이터를 덮어쓰게 됩니다.

그래서 원형 접시를 이용하면 더욱 생생하게 표현할 수 있어요. 데이터는 원이 채워지면 가장 먼저 작성된 데이터를 덮어씁니다.

실행 취소로 무엇을 할 수 있나요? 트랜잭션 롤백 트랜잭션 롤백 트랜잭션 복구 트랜잭션 복구. 거래 역전과 거래 회복의 효과는 동일합니다. 거래 역전은 사람들이 주도적으로 하는 일인데, 사람들은 작업 중에 후회합니다. 이는 제가 문서를 작성할 때 Ctrl+Z를 누르는 것과 같습니다. 예를 들어 Jianpin이 트랜잭션 중에 갑자기 전원이 꺼지면 시스템은 다음에 서비스가 다시 시작된 후 자동으로 롤백됩니다.

읽기 일관성 읽기 및 실행. 다중 사용자 작업에서는 읽기 일관성이 매우 중요합니다. 다중 사용자 개발에서 버전 관리 도구(gitcvssvn)를 사용해 본 적이 있다면 다음 개념을 쉽게 이해할 수 있을 것입니다.致OraCle 읽기 일관성 개념 Oracle에서는 수백만 개의 레코드를 쿼리하는 작업을 수행할 때 여러 사용자가 데이터베이스를 작동할 수 있도록 허용한다는 것을 알고 있습니다. 이 과정에서 다른 사용자가 귀하가 쿼리한 데이터를 수정했습니다. 여기서 쿼리 결과가 수정되기 전에 확인해야 합니다.

여기서 명확한 개념은 트랜잭션이 끝날 때 (업데이트, 수정, 삭제) 문을 실행할 때 트랜잭션이 시작되고 커밋 작업이 수행되어야 한다는 것입니다(커밋 또는 롤백 명령 실행)

오라클 실행 취소 분석

Oracle이 읽기 일관성을 보장하는 방법을 이해하기 위해 위 프로세스 그림부터 시작해 보겠습니다.

트랜잭션을 실행할 때 오라클은 SCN 번호를 할당하며 이 번호는 점점 증가하고 있습니다. 다음 거래의 수는 현재 거래의 수보다 커야 합니다.

위 그림에서 첫 번째 실행된 트랜잭션에 할당된 번호는 10023입니다. 이 트랜잭션이 실행되는 동안 다른 트랜잭션이 SCN 번호 10008 및 10021로 데이터 블록을 수정했습니다. 교체에 사용된 데이터 블록의 SCN 번호는 10024이며, 교체된 데이터 블록은 Undo를 위해 저장됩니다.

첫 번째 트랜잭션에서 수정된 데이터 블록을 실행하면 10024가 10023보다 큰 것을 발견합니다. 이때 자신의 SCN 번호보다 작은 데이터 블록을 찾아 읽기 위해 Undo 세그먼트로 이동하므로 이를 찾습니다. SCN 번호는 10008과 10021의 두 블록이 있습니다. 이는 읽기 일관성을 효과적으로 보장합니다.

물론 특별한 상황이 있을 겁니다. 즉, 실행 취소 세그먼트가 너무 작아 최대 100개의 데이터를 배치할 수 있지만 120개의 데이터가 한꺼번에 들어오므로 처음 20개는 작성된 데이터는 마지막으로 작성된 20개의 데이터로 덮어쓰기됩니다. 이때 오류가 보고되므로 데이터를 조정해야 합니다.

다시 실행 또는 실행 취소                                                              거래 로그를 기록하고 온라인으로 나누어 보관합니다. 회복을 목적으로.

예를 들어, 기계의 전원이 꺼지면 다시 시작한 후 시스템을 오류 지점으로 복원하기 위해 온라인 재실행 로그가 필요합니다.

예를 들어 디스크가 손상된 경우 보관된 Redo 로그와 온라인 Redo 로그 영역을 사용하여 데이터를 복구해야 합니다.

Undo란 무엇입니까

Redo는 작업을 다시 실행하는 것이고, Undo는 반대로 수행한 작업을 취소하는 것입니다. 실행 취소는 이전 단계를 실행 취소하는 데 일반적으로 사용되는 Ctrl+Z와 비슷합니다. Redo는 실행 취소 작업도 기록합니다.

데이터를 삽입하면 먼저 작업이 다시 실행 로그에 기록되고 작업도 실행 취소에 기록됩니다. 실행 취소 작업 자체도 다시 실행 로그에 기록됩니다. 데이터를 삽입하면 인덱스가 변경되고 인덱스 변경 사항도 리두 로그에 기록됩니다. Redo는 작업과 관련된 모든 정보를 기록하므로 장면을 완벽하게 재현할 수 있습니다.

위의 다이어그램에서 Undo와 Redo는 모두 메모리에 기록되며 전원이 차단되면 모든 정보가 사라집니다. 정전으로 인해 디스크에 기록된 정보만 손실되지는 않습니다.

리두 로그 정보는 가장 포괄적인 정보를 갖고 있고 장면 재현을 완벽하게 보장할 수 있기 때문에 디스크에 먼저 기록됩니다. 3초마다 쓰기, 1MB보다 큰 리두 로그 파일 쓰기 등 다양한 메커니즘을 통해 디스크에 대한 리두 쓰기를 제어할 수 있습니다. 오라클 실행 취소 분석

실행 취소를 구성하고 사용하는 방법은 무엇입니까? 실행 취소 테이블 공간은 여러 개 생성할 수 있지만 실행 취소 테이블 공간은 하나만 사용할 수 있습니다.

Undo 구성 정보 보기:

SQL> show parameter undo

NAME                           TYPE                VALUE
------------------------------------ ----------------------------------------------------
undo_management                 string            AUTO   
undo_retention                   integer           900
undo_tablespace                  string           UNDOTBS1

Undo 구성 매개변수 의미

-DNDO_MANAGEMENT Undo 관리 모드는 자동과 수동으로 구분됩니다. -UNDO_TABLESPACE 현재 사용 중인 Undo 테이블

-UNDO_RETENTION은 데이터를 보관할 수 없는 기간을 지정합니다. 덮여 있습니다.

AUTO는 실행 취소가 자동 관리 모드에 있음을 의미합니다.

900은 실행 취소에 대한 데이터를 900초 이내에 덮어쓸 수 없다는 의미입니다.

UNDOTBS1은 현재 사용중인 실행 취소 테이블스페이스입니다.

실행 취소 테이블스페이스 생성은 일반 테이블스페이스 생성과 유사합니다. 명령은 다음과 같습니다.

SQL> create undo tablespace myundotbs
  2  datafile '/ora10/product/oradata/ora10/myundotbs1.dbf' size 10M;

Tablespace created.

새로 생성된 실행 취소 테이블스페이스 보기

SQL>  select tablespace_name,contents from dba_tablespaces;

TABLESPACE_NAME                    CONTENTS
------------------------------------------------------------ ------------------
SYSTEM                                 PERMANENT
UNDOTBS1                               UNDO     //老的undo表空间
SYSAUX                                 PERMANENT
TEMP                                    TEMPORARY
USERS                                  PERMANENT
PAUL                                   PERMANENT
MYUNDOTBS                              UNDO   // 新创建的undo表空间

SQL> show parameter undo      再次查看当前使用的表空间

NAME                           TYPE          VALUE
------------------------------------ ----------------------------------------------------
undo_management                 string            AUTO   
undo_retention                   integer             900
undo_tablespace                  string           UNDOTBS1

실행 취소 테이블스페이스 전환:

SQL> alter system set undo_tablespace=myundotbs;

System altered.
SQL> show parameter undo   再次查看当前使用的表空间

NAME                           TYPE               VALUE
------------------------------------ ----------------------------------------------------
undo_management                 string            AUTO   
undo_retention                   integer          900
undo_tablespace                  string           MYUNDOTBS    //已经切换的了undo表空间

실행 취소 테이블스페이스 삭제:

SQL> drop tablespace myundotbs;
Tablespace dropped.

실행 취소 취소 테이블스페이스가 생성된 후에도 여전히 디스크에 존재합니다. 운영 체제 수준을 통해 파일을 삭제하려면 rm 명령을 사용해야 합니다.

생각하기:

테이블스페이스 전환 및 삭제 명령은 매우 간단하지만 여기서는 실제 전환 시나리오에 대해 생각해 볼 필요가 있습니다. 트랜잭션을 실행할 때 트랜잭션 실행의 절반이 아직 커밋되지 않은 상태입니다. 이때 언두 테이블스페이스를 성공적으로 전환할 수 있나요?

이론적으로 언두 테이블스페이스가 사용 중이므로 전환이 허용되지 않습니다. 하지만 실제로 언두 테이블스페이스는 사용 중에 전환이 가능하지만, 전환 후 즉시 삭제하면 시스템에서 오류 메시지가 표시됩니다. 트랜잭션을 커밋한 다음 삭제한 후에도 시스템에서 여전히 오류 메시지가 표시됩니다. 여기서, 교체된 언두 테이블스페이스는 사용상태에서 버려진 상태로 전환되어야만 삭제가 가능하다.

Hando

의 설정은 당사의 실제 생산 시스템에 따라 다릅니다. 보다 합리적으로 작동하도록 실행 취소를 설정하려면 어떻게 해야 합니까?

Undo 테이블 공간 크기:

Undo 테이블 공간을 생성할 때 크기를 지정합니다. 한번 생성되면 이 크기를 변경할 수 없습니다. 너무 크게 설정하는 것은 낭비이며 너무 작게 설정하는 경우, 예를 들어 100만 개의 레코드를 삭제하면 삭제된 레코드가 Undo 테이블 공간에 일시적으로 저장되므로 100만 개의 레코드를 저장할 수 없으면 문제가 발생합니다. .

실행 취소 데이터 저장 시간:

也就是undo_retention 参数所对应的时间,undo上有数据存放时间与undo大小的密切关系。存放时间越长,需要的表空间越大。就像理发师的数量与理发师的效率的关系一样。理发师效率很高,一秒钟解决一个客户,那么就不需要太多的理发师傅。

Undo表空间的历史信息:

如何合理设置undo表空间的大小和存放时间呢?那么就需要参考历史记录

오라클 실행 취소 분석

这个数据每隔10分钟采集一次,结束时间减去开始时间,在这段时间内使用了多少个undo数据块。

计算每秒钟使用数据块的多少?

求最大值:

SQL> select max(undoblks / ((end_time-begin_time)*24*3600)) from v$undostat;

MAX(UNDOBLKS/((END_TIME-BEGIN_TIME)*24*3600))
---------------------------------------------
                                   14.15833333

求平均值:
SQL>  select sum(undoblks)/sum((end_time - begin_time)*24*3600) from v$undostat;

SUM(UNDOBLKS)/SUM((END_TIME-BEGIN_TIME)*24*3600)
------------------------------------------------
                                      4.122282389

위 내용은 오라클 실행 취소 분석의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!

성명:
이 기사는 cnblogs.com에서 복제됩니다. 침해가 있는 경우 admin@php.cn으로 문의하시기 바랍니다. 삭제