首页 > 其他分享 >28、undo_1_2(undo参数、undo段、事务)

28、undo_1_2(undo参数、undo段、事务)

时间:2024-11-22 10:42:56浏览次数:1  
标签:1024 28 undo 参数 CHANGE SQL 日志 select

关于undo的几个参数:

1、undo_management:
undo段的管理方式(AUTO)
2、undo_retention:
一个事务提交以后,事务所对应的undo数据尽量保留900秒

查询参数:

SQL> show parameter undo
NAME	             			     TYPE    	 VALUE
------------------------------------ ----------- -----------
undo_management 	             	     string	        AUTO   -- undo段是自动管理的
undo_retention		        	     integer	   900   -- 一个事务提交以后,事务所对应的undu数据,尽量保证在900秒以内不被覆盖,这个参数我们经常会改为24小时
undo_tablespace 	             	     string	     UNDOTBS1

undo_retention:
这个参数改了以后,还不能保证它确确实实能够把一个事务提交以后,事务所对应的undo数据保留900秒;如果要确认能保留的话,还需要做几件事:
1、查询undo表空间,里面有一个参数 RETENTION 必须是:GUARANTEE

select * from dba_tablespaces where tablespace_name='UNDOTBS1';

修改retention参数:

SQL> alter tablespace UNDOTBS1 retention guarantee;
Tablespace altered.
select * from dba_tablespaces where tablespace_name='UNDOTBS1';

2、还要确认UNDOTBS1表空间,所对应的数据文件是可以自动扩展的:

select * from dba_data_files;

查询undo表空间里面的undo段(默认11个undo段):

select * from v$rollname;

随着事务越来越繁忙,undo段会自己增加(这是因为段的自动管理方式)

或者(这个信息更多一些):

select * from dba_rollback_segs

查询一个undo段里面的区的组成:

select * from dba_extents where segment_name='_SYSSMU1_3724004606$'

使用EM,看一下undo相关的一些维护:







undo表空间大小的影响因素:
1、undo数据的生成速度
2、最大select的执行时间

一个事务的开始和结束(挖掘日志分析:DDL、commit、rollback):

SQL> create user u1 identified by u1 default tablespace testtb1;
User created.

SQL> grant connect,resource,dba to u1;
Grant succeeded.

SQL> connect u1/u1
Connected.

SQL> select sid from v$mystat where rownum=1;
       SID
----------
       932

SQL> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
	   1 CURRENT
	   2 INACTIVE
	   3 INACTIVE

切换一下日志(希望所有的操作都在同一个日志里面):

SQL> alter system switch logfile;
System altered.

SQL> alter system flush buffer_cache;  -- 清空buffer cache里面的脏块(也就是将所有脏块写入到磁盘)
System altered.

现在系统用2号redo log日志:

SQL> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
	   1 INACTIVE
	   2 CURRENT
	   3 INACTIVE

然后建一个表t1,插入一行数据:

SQL> create table t1(id int,name varchar2(20));
Table created.

SQL> insert into t1 values(1,'zyr');
1 row created.

SQL> commit;
Commit complete.

SQL> update t1 set id=2 where id=1;
1 row updated.

SQL> rollback;
Rollback complete.

SQL> update t1 set id=2 where id=1;
1 row updated.

SQL> create table t2(id int);
Table created.

查看日志状态:

SQL> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
	   1 INACTIVE
	   2 CURRENT  -- 还是2号日志
	   3 INACTIVE

切换日志,让刚才的这些操作都在2号日志里,方便查看:

SQL> alter system switch logfile;
System altered.

SQL> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
  	   1 INACTIVE
	   2 ACTIVE
	   3 CURRENT

挖掘日志,查看2号日志的内容:






启用日志的追加功能,挖掘的信息就会多一些了

模拟一个事务(大事务)没有提交,数据库突然崩溃,数据库重新启动,select访问这个表,查看日志、以及执行时统计信息

查看日志状态:

SQL> select group#,status from v$log;
    GROUP# STATUS
---------- ----------------
	 1 INACTIVE
	 2 INACTIVE
	 3 CURRENT

SQL> select GROUP#,BYTES/1024/1024,FIRST_CHANGE#,NEXT_CHANGE# from v$log;
    GROUP# BYTES/1024/1024 FIRST_CHANGE# NEXT_CHANGE#
---------- --------------- ------------- ------------
	 1	              	50	     1295995      1314696
	 2	            	50	     1314696      1318831
	 3             		50	     1318831   2.8147E+14

添加日志组:


查询日志状态:

SQL> select GROUP#,BYTES/1024/1024,FIRST_CHANGE#,NEXT_CHANGE# from v$log;
    GROUP# BYTES/1024/1024 FIRST_CHANGE# NEXT_CHANGE#
---------- --------------- ------------- ------------
	 1	             	50	     1295995      1314696
	 2	            	50	     1314696      1318831
	 3	             	50	     1318831   2.8147E+14
	 4	                 100	           0	      0
	 5	                 100	           0	      0

建一个表:

SQL> show user;
USER is "U1"

SQL> create table t3 as select a.* from dba_objects a,dba_objects b where rownum<=1000000;   -- 创建了t3表,有1000000行Table created.

再次查询日志状态:

SQL> select GROUP#,BYTES/1024/1024,FIRST_CHANGE#,NEXT_CHANGE# from v$log;
    GROUP# BYTES/1024/1024 FIRST_CHANGE# NEXT_CHANGE#
---------- --------------- ------------- ------------
	 1	             	50	     1295995      1314696
	 2	            	50	     1314696      1318831
	 3	             	50	     1318831      1321928
	 4	                 100	     1321928   2.8147E+14  -- 现在用第四组日志了
	 5	                 100	           0	      0

删除t3表(相当于一个大事务,t3表有1000000行):

SQL> delete from t3;
1000000 rows deleted.

这时候,事务没有提交

查看日志状态:

SQL> select GROUP#,BYTES/1024/1024,FIRST_CHANGE#,NEXT_CHANGE# from v$log;
    GROUP# BYTES/1024/1024 FIRST_CHANGE# NEXT_CHANGE#
---------- --------------- ------------- ------------
	 1	              	50	     1322555      1322591
	 2	            	50	     1322591      1322624
	 3	             	50	     1322624      1322661
	 4	                 100	     1322661   2.8147E+14
	 5	                 100	     1322473      1322555

5组日志已经循环使用了一遍

SQL> select GROUP#,BYTES/1024/1024,FIRST_CHANGE#,NEXT_CHANGE# from v$log;
    GROUP# BYTES/1024/1024 FIRST_CHANGE# NEXT_CHANGE#
---------- --------------- ------------- ------------
	 1	              	50	     1322555      1322591
	 2	            	50	     1322591      1322624
	 3	            	50	     1322624      1322661
	 4	                 100	     1322661      1322755
	 5	                 100	     1322755   2.8147E+14

现在日志又切换到第5组了

关闭数据库(模拟一个事务未提交,数据库崩溃了):

SQL> shutdown abort;
ORACLE instance shut down.

重新启动数据库,速度会有点慢,因为要进行大量的前滚和回滚(之前数据库有事务未提交,数据库崩溃了):

SQL> startup
ORACLE instance started.

Total System Global Area 1603411968 bytes
Fixed Size		          2253664 bytes
Variable Size		 1375734944 bytes
Database Buffers	        218103808 bytes
Redo Buffers		    7319552 bytes
Database mounted.
Database opened.

查询日志状态:

SQL> select GROUP#,SEQUENCE#,FIRST_CHANGE#,NEXT_CHANGE#,STATUS from v$log;
    GROUP#  SEQUENCE# FIRST_CHANGE# NEXT_CHANGE# STATUS
---------- ---------- ------------- ------------ ----------------
	 1	          14	    1343262	     1343624 INACTIVE
	 2	          15	    1343624	     1343714 INACTIVE
	 3	          16	    1343714	     1343766 ACTIVE
	 4	          17	    1343766	     1343859 ACTIVE
	 5	          18	    1343859   2.8147E+14 CURRENT

数据库重启过程中,产生了好多日志,redo log又被循环使用了一遍

================================================================================================================
undo表空间全新认识:
1、undo段、undo extent、undo表空间最佳实践、undo表空间监控(EM)
2、rollback、commit
3、事务的开始和结束、挖掘日志分析
DDL、commit、rollback
4、模拟一个事务没有提交,数据库突然崩溃,数据库重新启动,select访问这个表,查看日志、以及执行时统计信息
5、dump undo段头块分析事务表、dump表的数据库分析事务槽(整个操作在一个事务模拟中分析)
6、分析xid、v$transaction
7、模拟ORA-01555错误及MOS解决方案
8、模拟insert、update、delete对资源的消耗

标签:1024,28,undo,参数,CHANGE,SQL,日志,select
From: https://www.cnblogs.com/xgq20210831/p/18562237

相关文章

  • 29、undo_2_1(事务槽、延迟块清除、构造CR块、ora-01555)
    事务槽(不同于事务表里面的槽位(这个事务槽在数据块的头部))图解:一个事务开始,要做的事情:第一,事务表里面找槽位(undo段的段头块里有事务表,事务表有槽位,每一个槽位记录一个事务);事务表里的槽位里记录的信息有:1、xid(事务ID):(undo段的段号,段里面的第几个槽(槽号),覆盖数);2、cflag(commitf......
  • LOJ2818 循环排序
    题目传送门首先考虑排列怎么做,排序时显然是可以将1移到下标为1的位置,然后把下标为1的位置移到它所应到的位置……直到点应到的位置为1原来的位置,就可以操作一次,使得这些点都归位。于是建图\(G=\langleV,E\rangle,V=\{i\|\1\lei\len\},E=\{(i,a_i)\|\1\le......
  • 【Python】0基础学Python——函数参数传递、函数细分、类的信息、元类、自定义元类、p
    0基础学Python——函数参数传递、函数细分、类的信息、元类、自定义元类、pickle序列化、序列化升级函数参数传递参数传递类型标注函数细分task任务型函数consumer消费型函数functional功能型函数类的信息元类type作用自定义元类pickle序列化序列化反序列化序列化升......
  • 【hive优化】参数类优化总结
    1.算法类参数优化开启对count(distinct)的自动优化sethive.optimize.countdistinct=true开启自动mapjoinsethive.auto.convert.join=true;大表小表的阈值设置(默认25M一下认为是小表)sethive.mapjoin.smalltable.filesize=26214400;默认值是true,当选项设定为t......
  • 国标GB28181-2016平台LiteGBS国标GB28181公网直播接入设备端怎么配置GB28181参数
    LiteGBS国标GB28181公网直播是一款强大的基于国标GB28181协议的视频云服务平台,它支持多路设备同时接入,在安防领域发挥着重要作用。LiteGBS国标GB28181-2016平台可进行解码、处理、分发等服务,能将接入的视频流转换为多种格式,如RTSP、RTMP、FLV、HLS、WebRTC等,兼容全平台、全终端,满......
  • 国标GB28181软件LiteGBS国标GB28181公网平台在Android端实现设备接入的语音对讲
    在智能安防领域,GB28181协议已经成为一种广泛应用的通信标准。通过该协议,可以实现不同品牌和型号的安防设备之间的互联互通。而在Android平台上实现GB28181设备接入端的语音广播和语音对讲功能,对于提升安防监控系统的实时性和交互性具有重要意义。而在功能方面,LiteGBS国标GB28181......
  • 尝试:增加Chrome进程稳定性的参数
    https://www.bilibili.com/opus/832573985795342345 增加Chrome进程的稳定性的确切参数可能因Chrome版本和操作系统而异。然而,以下是一些常见的命令行参数,可以在启动Chrome时尝试以提高稳定性:--disable-extensions: 这将禁用所有插件和扩展,有时插件可能会引起稳定性问题。-......
  • GE ACC-5595-280 反射内存交换机 八口 单模 传输距离10km
    多模反射内存交换机:实现高速实时数据共享的关键设备在当今数字化、信息化的时代,数据的快速传输和实时共享对于许多领域的系统运行至关重要。多模反射内存交换机作为一种先进的网络设备,为满足这些需求提供了高效、可靠的解决方案。多模反射内存交换机是一种专门设计用于反射内存......
  • path()中的name参数
    在Django中,path("",views.index,name="index")中的name参数用于给这个URL路径定义一个唯一的命名空间名称,方便在代码中引用。以下是它的具体功能和使用场景:1.name的作用URL反向解析:在模板中或代码中,通过name可以生成对应的URL,而无需手动写死路径。如果某......
  • HarmonyOS Next加解密算法中的参数与模式详解
    本文旨在深入探讨华为鸿蒙HarmonyOSNext系统(截止目前API12)中加解密算法参数与模式的技术细节,基于实际开发实践进行总结。主要作为技术分享与交流载体,难免错漏,欢迎各位同仁提出宝贵意见和问题,以便共同进步。本文为原创内容,任何形式的转载必须注明出处及原作者。一、加解密参数......