- 浏览: 978988 次
- 性别:
- 来自: 杭州
文章分类
最新评论
-
孤星119:
好熟悉的数据库字段啊, 上家公司做的项目每天都跟这些字段打招呼 ...
Oracle exp compress参数引起的空间浪费 -
itspace:
quxiaoyong 写道遇到个问题,网上一搜,全他妈这篇文章 ...
数据库连接错误ORA-28547 -
quxiaoyong:
遇到个问题,网上一搜,全他妈这篇文章。你转来转去的有意思吗?
数据库连接错误ORA-28547 -
hctech:
关于version count过高的问题,不知博主是否看过ey ...
某客户数据库性能诊断报告 -
itspace:
invalid 写道写的不错,我根据这个来安装,有点理解错误了 ...
AIX 配置vncserver
某客户数据库的版本为11.2.0.3,如下所示:
SQL> select * from v$version;
BANNER
------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
数据库使用的UNDO表空间为UNDOTBS1,且为自动管理,如下所示:
SQL> show parameter undo_management
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
SQL> show parameter undo_tablespace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace string UNDOTBS1
某日,业务程序运行时突然出现ORA-1628错误,数据库警告日志如下所示:
Fri Jun 07 16:25:48 2013
ORA-1628: max # extents 32765 reached for rollback segment _SYSSMU985_640904372$
Fri Jun 07 16:58:14 2013
ORA-1628: max # extents 32765 reached for rollback segment _SYSSMU1496_3116906519$
进一步检查dba_undo_extents视图发现,_SYSSMU985_640904372$和_SYSSMU1496_3116906519$回滚段中的区数量确实已经达到了32765个,如下所示:
SQL> select SEGMENT_NAME,count(*) from dba_undo_extents where TABLESPACE_NAME='UNDOTBS1'
2 group by SEGMENT_NAME order by 2;
SEGMENT_NAME COUNT(*)
------------------------------ ----------
。。。。。。
_SYSSMU985_640904372$ 32765
_SYSSMU1496_3116906519$ 32765
检查_SYSSMU985_640904372回滚段中的每个区大小,发现每个区大小只有64k,这在区大小分配方式为系统分配下是极为不正常的,如下所示:
SQL> select EXTENT_MANAGEMENT,ALLOCATION_TYPE from dba_tablespaces where TABLESPACE_NAME='UNDOTBS1';
EXTENT_MAN ALLOCATIO
---------- ---------
LOCAL SYSTEM
SQL> select distinct BYTES from dba_undo_extents where SEGMENT_NAME='_SYSSMU985_640904372';
BYTES
----------
65536
由于回滚段_SYSSMU985_640904372$中每个区的大小只有64k,所以整个回滚段大小只有2G不到,如下所示:
SQL> select BYTES/1024/1024/1024 from dba_segments where SEGMENT_NAME='_SYSSMU985_640904372$';
BYTES/1024/1024/1024
--------------------
1.99981689
在回滚段中,当事务所使用的块从一个区延伸到下一个区时,就是一次WRAP。当事务所使用的块发生WARP时,如果下一个区有活动事务,那么即使下下个区有空闲块,
Oracle也不会跳过下一区去使用下下一区,此时就会发生区扩展(EXTEND),Oracle会从回滚段中分配出一个空闲区。
从v$rollstat视图中可以看出,在32765个区中,区扩展总共发生了32763次,这是不正常的,而且这极有可能是同一个事务导致的,如下所示:
SQL> select EXTENTS,EXTENDS,WRAPS,STATUS,CURBLK,CUREXT from v$rollstat where USN=985;
EXTENTS EXTENDS WRAPS STATUS CURBLK CUREXT
---------- ---------- ---------- --------------- ---------- ----------
32765 32763 0 ONLINE 3 0
由于发生ORA-1628时,事务已经回滚结束,所以不能从v$transaction视图中查到信息,于是dump回滚段头查看相关信息,如下所示:
SQL> select header_file,header_block from dba_segments where segment_name='_SYSSMU985_640904372$';
HEADER_FILE HEADER_BLOCK
----------- ------------
16 163393
SQL> oradebug setmypid
Statement processed.
SQL> alter system dump datafile 16 block 163393;
SQL> oradebug TRACEFILE_NAME
/oracle/app/diag/rdbms/orazw/orazw1/trace/orazw1_ora_5440100.trc
检查dump下来的跟踪文件,事务槽的uel列表示事务的当前区,scn表示事务开始时的SCN。
可以看到06号事务槽上的事务曾经使用过第32765个块,由于其state标记位9,这说明已经提交或回滚了。如下所示
Start dump data blocks tsn: 1 file#:25 minblk 524041 maxblk 524041
index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt
------------------------------------------------------------------------------------------------
0x00 9 0x00 0x0002 0x0001 0x0c32.ac6b6eed 0x0647ff0b 0x0000.000.00000000 0x00000001 0x00000000 1370402686
0x01 9 0x00 0x0002 0x0002 0x0c32.ac6c5183 0x00000000 0x0000.000.00000000 0x00000000 0x00000000 1370415835
0x02 9 0x00 0x0002 0x0003 0x0c32.ac6c62e0 0x0647ff0b 0x0000.000.00000000 0x00000001 0x00000000 1370415848
0x03 9 0x00 0x0002 0x0004 0x0c32.ac6c708c 0x00000000 0x0000.000.00000000 0x00000000 0x00000000 1370415857
0x04 9 0x00 0x0002 0x0005 0x0c33.6108d3f8 0x00000000 0x0000.000.00000000 0x00000000 0x0647ff0b 1370581497
0x05 9 0x00 0x0002 0x0007 0x0c33.724c35af 0x0647ff0c 0x0000.000.00000000 0x00000001 0x00000000 1370589582
0x06 9 0x00 0x0002 0xffff 0x0c33.7ceb4633 0x00000000 0x0000.000.00000000 0x00000000 0x0647ff0c 1370595925
0x07 9 0x00 0x0002 0x0006 0x0c33.7ceb44a7 0x00000000 0x0000.000.00000000 0x00000000 0x00000000 1370595900
利用scn_to_timestamp函数将将06号事务槽上的事务开始SCN转换成时间为2013年7月2号,11点45分11秒。这和发生故障的时间点相差了2天多,这说明这是一个长事务,如下所示:
SQL> select scn_to_timestamp(13415278659123) from dual;
SCN_TO_TIMESTAMP(13415278659123)
---------------------------------------------------------------------------
02-JUL-13 11.45.11.000000000 PM
由于发生ORA-1628错误时,事务已经回滚结束,所以使用ASH报告查看错误发生时刻的事务运行情况,获取ASH报告过程(仅仅采样错误发生时间点前后)如下所示:
SQL> @?/rdbms/admin/ashrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
1315204055 ORAZW 1 orazw1
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: text
Type Specified: text
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
* 1315204055 1 ORAZW orazw1 zwdb01
1315204055 1 ORAZW orazw zwdb01
1315204055 2 ORAZW orazw2 zwdb02
Defaults to current database
Using database id: 1315204055
Enter instance numbers. Enter 'ALL' for all instances in a
RAC cluster or explicitly specify list of instances (e.g., 1,2,3).
Defaults to current instance.
Using instance number(s): 1
ASH Samples in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oldest ASH sample available: 05-Jun-13 11:24:22 [ 3554 mins in the past]
Latest ASH sample available: 02-Jul-13 10:36:15 [ -35277 mins in the past]
Specify the timeframe to generate the ASH report
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter begin time for report:
-- Valid input formats:
-- To specify absolute begin time:
-- [MM/DD[/YY]] HH24:MI[:SS]
-- Examples: 02/23/03 14:30:15
-- 02/23 14:30:15
-- 14:30:15
-- 14:30
-- To specify relative begin time: (start with '-' sign)
-- -[HH24:]MI
-- Examples: -1:15 (SYSDATE - 1 Hr 15 Mins)
-- -25 (SYSDATE - 25 Mins)
Defaults to -15 mins
Enter value for begin_time: 16:24
Report begin time specified: 16:24
Enter duration in minutes starting from begin time:
Defaults to SYSDATE - begin_time
Press Enter to analyze till current time
Enter value for duration: 2
查看ASH报告,发现整个ASH报告只有1条insert语句,而且该条insert语句处理的数据量也不大,所以导致回滚段区数量不足的SQL很可能就是该条insert语句,如下所示:
ASH Report For ORAZW/orazw1
DB Name DB Id Instance Inst Num Release RAC Host
------------ ----------- ------------ -------- ----------- --- ------------
ORAZW 1315204055 orazw1 1 11.2.0.3.0 YES zwdb01
CPUs SGA Size Buffer Cache Shared Pool ASH Buffer Size
---- ------------------ ------------------ ------------------ ------------------
64 89,710M (100%) 75,776M (84.5%) 11,520M (12.8%) 128.0M (0.1%)
Analysis Begin Time: 07-Jun-13 16:24:00
Analysis End Time: 07-Jun-13 16:26:00
Elapsed Time: 2.0 (mins)
Begin Data Source: V$ACTIVE_SESSION_HISTORY
End Data Source: V$ACTIVE_SESSION_HISTORY
Sample Count: 30
Average Active Sessions: 0.25
Avg. Active Session per CPU: 0.00
Report Target: None specified
Top SQL with Top Row Sources DB/Inst: ORAZW/orazw1 (Jun 07 16:24 to 16:26)
Sampled #
SQL ID PlanHash of Executions % Activity
----------------------- -------------------- -------------------- --------------
Row Source % RwSrc Top Event % Event
---------------------------------------- ------- ----------------------- -------
0mg9654rs0wct 340535052 1 80.00
** Row Source Not Available ** 80.00 CPU + Wait for CPU 80.00
INSERT INTO "UCS_SUBS_FREEZE" ("SUBS_FREEZE_ID","SUBS_SCHEME_ID","SUBSCRIPTION_
ID","SERVICE_TYPE","FREEZE_ID","ACCOUNT_ID","SUBJECT_ID","ALLOT_CAL_MODE","ALLOT
_RUN_MODE","ORGINAL_AMOUNT","ALREADY_ALLOT_AMOUNT","ALREADY_ALLOT_MONTH","START_
ALLOT_MONTH","LAST_ALLOT_MONTH","ALLOT_STATUS","USESUBJECTID","LAST_PRESENT_DATE
通过sql id在v$sqltext视图中查看完成的SQL语句,如下所示:
SQL> select sql_text from v$sqltext where sql_id='0mg9654rs0wct' order by piece;
SQL_TEXT
----------------------------------------------------------------
INSERT INTO "UCS_SUBS_FREEZE" ("SUBS_FREEZE_ID","SUBS_SCHEME_ID
","SUBSCRIPTION_ID","SERVICE_TYPE","FREEZE_ID","ACCOUNT_ID","SUB
JECT_ID","ALLOT_CAL_MODE","ALLOT_RUN_MODE","ORGINAL_AMOUNT","ALR
EADY_ALLOT_AMOUNT","ALREADY_ALLOT_MONTH","START_ALLOT_MONTH","LA
ST_ALLOT_MONTH","ALLOT_STATUS","USESUBJECTID","LAST_PRESENT_DATE
","THAWFEE","THAWSCALE","MINUSEFEE","CREATE_TIME","ACTIVE_TIME",
"INACTIVE_TIME","REGION_ID","COUNTY_ID","OFFICE_ID","OPERATOR_ID
","TAKE_TYPE","EFFECT_DAYS","DELAY_FLAG","PAY_RULE_ID","ORG_ALLO
T_MONTH","DEAL_NO","DEAL_TIMEINFO","NEXT_PRESENT_DATE") VALUES (
:F1,:F2,:F3,:F4,:F5,:F6,:F7,:F8,:F9,:F10,:F11,:F12,:F13,:F14,:F1
5,:F16,:F17,:F18,:F19,:F20,SYSDATE@!,:F22,:F23,:F24,:F25,:F26,:F
27,:F28,:F29,:F30,:F31,:F32,:F33,:F34,:F35)
经过以上分析,本次回滚段出现区数量不足,从而导致出现ORA-1628错误是正常的,并不是Oracle bug。其理由如下:
1、事务只能在一个回滚段中运行,不能跨回滚段。
2、从事务开始到异常结束历时2天多,这是一个长事务,而长事务是有可能导致出现ORA-1628错误的。
3、观察引起ORA-1628错误的insert语句,发现单次insert的数据量不大,从而导致每次区扩展的区大小只有64k。
如果不改应用,那么Oracle端则做如下修改;
1、回滚段自动管理修改成手动管理
2、修改UNDO表空间数据块大小
SQL> select * from v$version;
BANNER
------------------------------------------------------------------------------
Oracle Database 11g Enterprise Edition Release 11.2.0.3.0 - 64bit Production
PL/SQL Release 11.2.0.3.0 - Production
CORE 11.2.0.3.0 Production
TNS for IBM/AIX RISC System/6000: Version 11.2.0.3.0 - Production
NLSRTL Version 11.2.0.3.0 - Production
数据库使用的UNDO表空间为UNDOTBS1,且为自动管理,如下所示:
SQL> show parameter undo_management
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_management string AUTO
SQL> show parameter undo_tablespace
NAME TYPE VALUE
------------------------------------ ----------- ------------------------------
undo_tablespace string UNDOTBS1
某日,业务程序运行时突然出现ORA-1628错误,数据库警告日志如下所示:
Fri Jun 07 16:25:48 2013
ORA-1628: max # extents 32765 reached for rollback segment _SYSSMU985_640904372$
Fri Jun 07 16:58:14 2013
ORA-1628: max # extents 32765 reached for rollback segment _SYSSMU1496_3116906519$
进一步检查dba_undo_extents视图发现,_SYSSMU985_640904372$和_SYSSMU1496_3116906519$回滚段中的区数量确实已经达到了32765个,如下所示:
SQL> select SEGMENT_NAME,count(*) from dba_undo_extents where TABLESPACE_NAME='UNDOTBS1'
2 group by SEGMENT_NAME order by 2;
SEGMENT_NAME COUNT(*)
------------------------------ ----------
。。。。。。
_SYSSMU985_640904372$ 32765
_SYSSMU1496_3116906519$ 32765
检查_SYSSMU985_640904372回滚段中的每个区大小,发现每个区大小只有64k,这在区大小分配方式为系统分配下是极为不正常的,如下所示:
SQL> select EXTENT_MANAGEMENT,ALLOCATION_TYPE from dba_tablespaces where TABLESPACE_NAME='UNDOTBS1';
EXTENT_MAN ALLOCATIO
---------- ---------
LOCAL SYSTEM
SQL> select distinct BYTES from dba_undo_extents where SEGMENT_NAME='_SYSSMU985_640904372';
BYTES
----------
65536
由于回滚段_SYSSMU985_640904372$中每个区的大小只有64k,所以整个回滚段大小只有2G不到,如下所示:
SQL> select BYTES/1024/1024/1024 from dba_segments where SEGMENT_NAME='_SYSSMU985_640904372$';
BYTES/1024/1024/1024
--------------------
1.99981689
在回滚段中,当事务所使用的块从一个区延伸到下一个区时,就是一次WRAP。当事务所使用的块发生WARP时,如果下一个区有活动事务,那么即使下下个区有空闲块,
Oracle也不会跳过下一区去使用下下一区,此时就会发生区扩展(EXTEND),Oracle会从回滚段中分配出一个空闲区。
从v$rollstat视图中可以看出,在32765个区中,区扩展总共发生了32763次,这是不正常的,而且这极有可能是同一个事务导致的,如下所示:
SQL> select EXTENTS,EXTENDS,WRAPS,STATUS,CURBLK,CUREXT from v$rollstat where USN=985;
EXTENTS EXTENDS WRAPS STATUS CURBLK CUREXT
---------- ---------- ---------- --------------- ---------- ----------
32765 32763 0 ONLINE 3 0
由于发生ORA-1628时,事务已经回滚结束,所以不能从v$transaction视图中查到信息,于是dump回滚段头查看相关信息,如下所示:
SQL> select header_file,header_block from dba_segments where segment_name='_SYSSMU985_640904372$';
HEADER_FILE HEADER_BLOCK
----------- ------------
16 163393
SQL> oradebug setmypid
Statement processed.
SQL> alter system dump datafile 16 block 163393;
SQL> oradebug TRACEFILE_NAME
/oracle/app/diag/rdbms/orazw/orazw1/trace/orazw1_ora_5440100.trc
检查dump下来的跟踪文件,事务槽的uel列表示事务的当前区,scn表示事务开始时的SCN。
可以看到06号事务槽上的事务曾经使用过第32765个块,由于其state标记位9,这说明已经提交或回滚了。如下所示
Start dump data blocks tsn: 1 file#:25 minblk 524041 maxblk 524041
index state cflags wrap# uel scn dba parent-xid nub stmt_num cmt
------------------------------------------------------------------------------------------------
0x00 9 0x00 0x0002 0x0001 0x0c32.ac6b6eed 0x0647ff0b 0x0000.000.00000000 0x00000001 0x00000000 1370402686
0x01 9 0x00 0x0002 0x0002 0x0c32.ac6c5183 0x00000000 0x0000.000.00000000 0x00000000 0x00000000 1370415835
0x02 9 0x00 0x0002 0x0003 0x0c32.ac6c62e0 0x0647ff0b 0x0000.000.00000000 0x00000001 0x00000000 1370415848
0x03 9 0x00 0x0002 0x0004 0x0c32.ac6c708c 0x00000000 0x0000.000.00000000 0x00000000 0x00000000 1370415857
0x04 9 0x00 0x0002 0x0005 0x0c33.6108d3f8 0x00000000 0x0000.000.00000000 0x00000000 0x0647ff0b 1370581497
0x05 9 0x00 0x0002 0x0007 0x0c33.724c35af 0x0647ff0c 0x0000.000.00000000 0x00000001 0x00000000 1370589582
0x06 9 0x00 0x0002 0xffff 0x0c33.7ceb4633 0x00000000 0x0000.000.00000000 0x00000000 0x0647ff0c 1370595925
0x07 9 0x00 0x0002 0x0006 0x0c33.7ceb44a7 0x00000000 0x0000.000.00000000 0x00000000 0x00000000 1370595900
利用scn_to_timestamp函数将将06号事务槽上的事务开始SCN转换成时间为2013年7月2号,11点45分11秒。这和发生故障的时间点相差了2天多,这说明这是一个长事务,如下所示:
SQL> select scn_to_timestamp(13415278659123) from dual;
SCN_TO_TIMESTAMP(13415278659123)
---------------------------------------------------------------------------
02-JUL-13 11.45.11.000000000 PM
由于发生ORA-1628错误时,事务已经回滚结束,所以使用ASH报告查看错误发生时刻的事务运行情况,获取ASH报告过程(仅仅采样错误发生时间点前后)如下所示:
SQL> @?/rdbms/admin/ashrpt.sql
Current Instance
~~~~~~~~~~~~~~~~
DB Id DB Name Inst Num Instance
----------- ------------ -------- ------------
1315204055 ORAZW 1 orazw1
Specify the Report Type
~~~~~~~~~~~~~~~~~~~~~~~
Enter 'html' for an HTML report, or 'text' for plain text
Defaults to 'html'
Enter value for report_type: text
Type Specified: text
Instances in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
DB Id Inst Num DB Name Instance Host
------------ -------- ------------ ------------ ------------
* 1315204055 1 ORAZW orazw1 zwdb01
1315204055 1 ORAZW orazw zwdb01
1315204055 2 ORAZW orazw2 zwdb02
Defaults to current database
Using database id: 1315204055
Enter instance numbers. Enter 'ALL' for all instances in a
RAC cluster or explicitly specify list of instances (e.g., 1,2,3).
Defaults to current instance.
Using instance number(s): 1
ASH Samples in this Workload Repository schema
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Oldest ASH sample available: 05-Jun-13 11:24:22 [ 3554 mins in the past]
Latest ASH sample available: 02-Jul-13 10:36:15 [ -35277 mins in the past]
Specify the timeframe to generate the ASH report
~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~
Enter begin time for report:
-- Valid input formats:
-- To specify absolute begin time:
-- [MM/DD[/YY]] HH24:MI[:SS]
-- Examples: 02/23/03 14:30:15
-- 02/23 14:30:15
-- 14:30:15
-- 14:30
-- To specify relative begin time: (start with '-' sign)
-- -[HH24:]MI
-- Examples: -1:15 (SYSDATE - 1 Hr 15 Mins)
-- -25 (SYSDATE - 25 Mins)
Defaults to -15 mins
Enter value for begin_time: 16:24
Report begin time specified: 16:24
Enter duration in minutes starting from begin time:
Defaults to SYSDATE - begin_time
Press Enter to analyze till current time
Enter value for duration: 2
查看ASH报告,发现整个ASH报告只有1条insert语句,而且该条insert语句处理的数据量也不大,所以导致回滚段区数量不足的SQL很可能就是该条insert语句,如下所示:
ASH Report For ORAZW/orazw1
DB Name DB Id Instance Inst Num Release RAC Host
------------ ----------- ------------ -------- ----------- --- ------------
ORAZW 1315204055 orazw1 1 11.2.0.3.0 YES zwdb01
CPUs SGA Size Buffer Cache Shared Pool ASH Buffer Size
---- ------------------ ------------------ ------------------ ------------------
64 89,710M (100%) 75,776M (84.5%) 11,520M (12.8%) 128.0M (0.1%)
Analysis Begin Time: 07-Jun-13 16:24:00
Analysis End Time: 07-Jun-13 16:26:00
Elapsed Time: 2.0 (mins)
Begin Data Source: V$ACTIVE_SESSION_HISTORY
End Data Source: V$ACTIVE_SESSION_HISTORY
Sample Count: 30
Average Active Sessions: 0.25
Avg. Active Session per CPU: 0.00
Report Target: None specified
Top SQL with Top Row Sources DB/Inst: ORAZW/orazw1 (Jun 07 16:24 to 16:26)
Sampled #
SQL ID PlanHash of Executions % Activity
----------------------- -------------------- -------------------- --------------
Row Source % RwSrc Top Event % Event
---------------------------------------- ------- ----------------------- -------
0mg9654rs0wct 340535052 1 80.00
** Row Source Not Available ** 80.00 CPU + Wait for CPU 80.00
INSERT INTO "UCS_SUBS_FREEZE" ("SUBS_FREEZE_ID","SUBS_SCHEME_ID","SUBSCRIPTION_
ID","SERVICE_TYPE","FREEZE_ID","ACCOUNT_ID","SUBJECT_ID","ALLOT_CAL_MODE","ALLOT
_RUN_MODE","ORGINAL_AMOUNT","ALREADY_ALLOT_AMOUNT","ALREADY_ALLOT_MONTH","START_
ALLOT_MONTH","LAST_ALLOT_MONTH","ALLOT_STATUS","USESUBJECTID","LAST_PRESENT_DATE
通过sql id在v$sqltext视图中查看完成的SQL语句,如下所示:
SQL> select sql_text from v$sqltext where sql_id='0mg9654rs0wct' order by piece;
SQL_TEXT
----------------------------------------------------------------
INSERT INTO "UCS_SUBS_FREEZE" ("SUBS_FREEZE_ID","SUBS_SCHEME_ID
","SUBSCRIPTION_ID","SERVICE_TYPE","FREEZE_ID","ACCOUNT_ID","SUB
JECT_ID","ALLOT_CAL_MODE","ALLOT_RUN_MODE","ORGINAL_AMOUNT","ALR
EADY_ALLOT_AMOUNT","ALREADY_ALLOT_MONTH","START_ALLOT_MONTH","LA
ST_ALLOT_MONTH","ALLOT_STATUS","USESUBJECTID","LAST_PRESENT_DATE
","THAWFEE","THAWSCALE","MINUSEFEE","CREATE_TIME","ACTIVE_TIME",
"INACTIVE_TIME","REGION_ID","COUNTY_ID","OFFICE_ID","OPERATOR_ID
","TAKE_TYPE","EFFECT_DAYS","DELAY_FLAG","PAY_RULE_ID","ORG_ALLO
T_MONTH","DEAL_NO","DEAL_TIMEINFO","NEXT_PRESENT_DATE") VALUES (
:F1,:F2,:F3,:F4,:F5,:F6,:F7,:F8,:F9,:F10,:F11,:F12,:F13,:F14,:F1
5,:F16,:F17,:F18,:F19,:F20,SYSDATE@!,:F22,:F23,:F24,:F25,:F26,:F
27,:F28,:F29,:F30,:F31,:F32,:F33,:F34,:F35)
经过以上分析,本次回滚段出现区数量不足,从而导致出现ORA-1628错误是正常的,并不是Oracle bug。其理由如下:
1、事务只能在一个回滚段中运行,不能跨回滚段。
2、从事务开始到异常结束历时2天多,这是一个长事务,而长事务是有可能导致出现ORA-1628错误的。
3、观察引起ORA-1628错误的insert语句,发现单次insert的数据量不大,从而导致每次区扩展的区大小只有64k。
如果不改应用,那么Oracle端则做如下修改;
1、回滚段自动管理修改成手动管理
2、修改UNDO表空间数据块大小
发表评论
-
buffer cache 的内部结构
2020-03-18 14:21 579BUFFER CACHE作为数据块的 ... -
Oracle OMC介绍
2020-03-18 13:19 487Oracle管理云服务(OMC)的大数据平台,自动收集的企业 ... -
参加Oracle勒索病毒防范专题培训会议
2019-09-27 17:15 5132019年7月22日,受邀参加Oracle勒索病毒防范专题培训 ... -
记一次内存换IO的Oracle优化
2019-09-27 16:50 828某客户数据库从P595物理 ... -
如何定位Oracle SQL执行计划变化的原因
2019-07-03 14:49 1460性能优化最难的是能够 ... -
如何定位Oracle SQL执行计划变化的原因
2018-10-30 09:24 1185性能优化最难的是能够 ... -
数据库性能优化目标
2018-10-08 10:59 520从数据库性能优化的场 ... -
数据库无法打开的原因及解决办法
2018-10-05 20:45 2121数据库的启动是一个相当复杂的过程。比如,Oracle在启动之前 ... -
怎么样彻底删除数据库?
2018-09-18 11:10 600Oracle提供了drop database命令用来删除数据库 ... -
Oracle减少日志量的方法
2018-09-10 10:17 867LGWR进程将LOG BUFFER中的 ... -
如何快速关闭数据库
2018-09-09 13:14 1233“一朝被蛇咬,十年怕井绳”。在没被“蛇”咬之前,很多DBA喜欢 ... -
关于《如何落地智能化运维》PPT
2018-05-17 10:19 1130在DTCC 2018发表《如何落地智能化运维》演讲,主要内容如 ... -
记录在redhat5.8平台安装oracle11.2容易忽视的几个问题
2018-05-11 19:58 579问题一:ping不通问题 在虚拟机上安装好linux系统后, ... -
《Oracle DBA实战攻略》第一章
2018-05-11 10:42 947即日起,不定期更新《OracleDBA实战攻略》一书电子版,请 ... -
Oracle 12c新特性
2018-05-11 10:33 900查询所有pdb [oracle@gj4 ~]$ sqlplu ... -
关于修改memory_target的值后数据库无法启动的问题
2017-02-28 12:24 3983操作系统:RHEL6.5 数据库版本:11.2.0.4 ... -
10g rac安装error while loading shared libraries libpthread.so.0 问题
2017-02-28 12:22 69611g rac安装在二节点跑脚本一般会报此错误: 解决这个问 ... -
记一次Oracle会话共享模式故障处理过程
2017-02-27 19:16 801故障简述 XXX第八人民医院HIS数据库7月13日11点左右从 ... -
RESMGR:cpu quantum等待事件处理过程
2017-02-27 18:23 2615由于数据库上线过程中出现大量的RESMGR:cpu quant ... -
谈谈log file sync
2014-03-19 14:18 1761数据库中的log file sync等待事件指的是,当user ...
相关推荐
2. 事务恢复:当事务正在处理的时候,例程失败,回滚段的信息保存在重做日志文件中,Oracle 将在下次打开数据库时利用回滚来恢复未提交的数据。 3. 读一致性:当一个会话正在修改数据时,其他的会话将看不到该会话...
3. **DEFERED回滚段**:在表空间离线时自动创建,上线时自动删除,用于处理离线期间的回滚信息。 从9i版本开始,Oracle引入了自动管理回滚段(Automatic Rollback Segmentation),DBA不再需要手动创建、修改或删除...
在上述情况中,数据库管理员发现了一个名为"undotbs1"的回滚表空间的数据文件达到了23GB,这可能表明存在大量的回滚活动或者回滚段管理不当,导致了空间的浪费。 1. **回滚段的检查**: 通过执行SQL查询,我们可以...
此外,在事务处理过程中如果遇到实例失败(例如服务器故障),回滚段中记录的信息会被保存在重做日志文件中。在数据库重启时,系统会利用这部分信息来进行未提交数据的恢复,确保数据的一致性和完整性。 #### 读...
如果回滚段出现故障,轻则使数据处理无法执行、用户无法读写数据,重则导致数据库不能正常启动或关闭,导致数据库瘫痪。若能将回滚段的故障排除,一般来说是不会影响用户的实际数据。实际上绝大多数的回滚段故障都是...
2. **回滚段争用**:通过增加回滚段的数量或优化事务处理逻辑来减少争用情况。 3. **性能下降**:分析事务处理模式,优化数据库配置以提高性能。 #### 八、总结 回滚段是Oracle数据库中一个非常重要的组成部分,...
- **回滚段空间不足**:这通常发生在回滚段的最大扩展数已经达到的情况下。此时可以通过增加最大扩展数或创建新的回滚段来解决。 - **回滚段冲突**:当多个事务同时访问同一回滚段时,可能会出现资源竞争的情况。...
2. **事务恢复**:如果在事务处理过程中发生例程失败,Oracle会在下次打开数据库时利用重做日志文件中的回滚段信息来恢复未提交的数据。 3. **读一致性**:回滚段确保了在并发环境中,不同的会话看到的数据是一致的...
在Oracle数据库管理中,回滚段(Rollback Segment)是一个重要的组成部分,主要用于存储事务处理的回滚信息。当系统遇到回滚段灾难,如回滚段损坏或异常,导致数据库无法正常启动时,进行有效的灾难恢复是至关重要的...
- 区扩展:当事务需要更多空间时,回滚段会在所有区用完后扩展至新的区,直到达到MAXEXTENTS参数设定的最大区数。 回滚段的回收与OPTIMAL参数: - 回收:当回滚段不再需要时,Oracle会尝试回收空间,避免浪费。 - ...
回滚段管理是Oracle数据库管理的关键组成部分,主要负责处理事务的回滚、恢复以及提供读一致性,确保数据库的完整性和一致性。以下是对回滚段及其管理的深入解析: ### 回滚段工作原理 #### System回滚段与用户...
系统回滚段用于处理涉及系统的 CATALOG 事务,位于 SYSTEM 表空间中。PUBLIC 回滚段对于数据库的所有实例都是可用的,而 PRIVATE 回滚段是指对于数据库的某个实例是私有的。 需要注意的是,系统回滚段应放在 SYSTEM...
Oracle回滚段管理知识 Oracle 回滚段管理是数据库管理系统中的一项重要功能,它用于管理事务的回退和恢复。下面是 Oracle 回滚段管理的知识点总结: 一、回滚段简介 回滚段是 Oracle 数据库中的一种特殊类型的表...
回滚段,正如其名,是用来存放事务处理过程中增、删、改数据的历史信息,确保在事务回滚或数据库恢复时能正确操作。在Oracle 8i Release 8.1.7版本中,默认创建了24个回滚段,但它们初始大小较小,可能不足以应对...
数据库在归档模式下处理回滚段故障是一个关键的数据库管理任务,因为它直接影响到数据库的稳定性和可用性。回滚段是Oracle数据库的核心组件之一,它们存储了事务撤销操作的信息,确保了数据库的一致性和可恢复性。...
在Oracle数据库系统中,回滚段(Rollback Segment)扮演着至关重要的角色,它们存储了事务处理(Transaction)的回滚信息,确保了数据读的一致性(read consistency)以及数据恢复(Database Recovery)的可能性。...
通过上述内容,我们可以清楚地看到Oracle数据库中事务处理过程中涉及的关键组件:数据缓冲区、回滚段、重做日志以及这些组件之间的交互作用。这些机制共同确保了数据库的一致性、可靠性和高可用性。
Oracle回滚表空间数据文件误删除处理是一个严重的问题,因为它涉及到数据库的核心组件——回滚段。回滚段在Oracle数据库中扮演着至关重要的角色,它们记录了事务的修改历史,确保了数据库的一致性,同时也为数据库...