Oracle数据库数据恢复、性能优化

找回密码
注册
搜索
热搜: 活动 交友 discuz
发新帖

0

积分

1

好友

2

主题
1#
发表于 2013-12-3 11:32:40 | 查看: 3992| 回复: 13
数据库版本10.2.0.4

online回滚段太多了,感觉十分奇怪。
SQL> select status,count(*) from dba_rollback_segs group by status;

STATUS             COUNT(*)
---------------- ----------
ONLINE                  614
OFFLINE                  10

SQL> select count(*) from v$session;

  COUNT(*)
----------
        43

SQL> select count(*) from v$transaction;

  COUNT(*)
----------
         0

SQL> show parameter undo

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

=============================================
dba_rollback_segs的个数只增不减。
用什么手段可以查出原因。现在没方向了。
2#
发表于 2013-12-3 11:34:33
日志当中没有报错,而且还是新的库

回复 只看该作者 道具 举报

3#
发表于 2013-12-3 12:38:58
_undo_autotune 是多少~

回复 只看该作者 道具 举报

4#
发表于 2013-12-3 12:39:31
SELECT   status,
         Count(* ),
         Sum(blocks) * 8096 / 1024 / 1024
FROM     dba_undo_extents
GROUP BY status;


回复 只看该作者 道具 举报

5#
发表于 2013-12-3 13:00:26
harryzhang 发表于 2013-12-3 12:38
_undo_autotune 是多少~

NAME
--------------------------------------------------------------------------------
VALUE
--------------------------------------------------------------------------------
DESCRIB
--------------------------------------------------------------------------------
_undo_autotune
TRUE
enable auto tuning of undo_retention


回复 只看该作者 道具 举报

6#
发表于 2013-12-3 13:01:54
harryzhang 发表于 2013-12-3 12:39
SELECT   status,
         Count(* ),
         Sum(blocks) * 8096 / 1024 / 1024

SQL> /

STATUS      COUNT(*) SUM(BLOCKS)*8096/1024/1024
--------- ---------- --------------------------
UNEXPIRED        109                 8.58569336
EXPIRED         4281                 574.685547
ACTIVE            11                 .679443359

SQL> select count(*),status from dba_rollback_segs group by status;

  COUNT(*) STATUS
---------- ----------------
       768 ONLINE
        10 OFFLINE

回复 只看该作者 道具 举报

7#
发表于 2013-12-3 13:14:25
http://www.askmaclean.com/archives/automatic-undo-management-common-analysis-diagnostic-scripts.html

回复 只看该作者 道具 举报

8#
发表于 2013-12-3 14:07:17
了解你所不知道的SMON功能(十一):OFFLINE UNDO SEGMENT http://www.askmaclean.com/archives/smon-offline-undo-segment.html

不offline 很正常

回复 只看该作者 道具 举报

9#
发表于 2013-12-3 14:07:30
dla001 发表于 2013-12-3 13:14
http://www.askmaclean.com/archives/automatic-undo-management-common-analysis-diagnostic-scripts.html

查过了,问题还是那样,为什么回滚段个数在不断上升,而且也没有自动清理掉。
我大胆猜测一下,会不会有个会话一直连着,没有关闭,而且不断有事务从这个会话中并发发起呢?

回复 只看该作者 道具 举报

10#
发表于 2013-12-3 16:49:56
Liu Maclean(刘相兵 发表于 2013-12-3 14:07
了解你所不知道的SMON功能(十一):OFFLINE UNDO SEGMENT http://www.askmaclean.com/archives/smon-offline- ...

看了一下,收获甚多,先谢谢。
回滚段个数在不断增加,到达32000多个时,会不会触发一个BUG导致数据库宕,这个是我比较担心的。

我之前10.2.0.4的版本就碰到了回滚段过多,然后宕机,打补丁重建库的操作。没想到现在仍然如此,现象复现。

我想可能要从应用上分析了。

对于数据库本身来讲,是怎样一个场景致使回滚段不断增加的。
process、session、transaction、DML SQL在增加时的状态又是怎样的?
基础比较差,回家准备查资料了。

回复 只看该作者 道具 举报

11#
发表于 2013-12-3 17:02:21
rollback_segments 可以控制回滚段数量,但是这个需要慎重,可能导致回滚段不够,从而出现事务终止

回复 只看该作者 道具 举报

12#
发表于 2013-12-4 17:54:32
Liu Maclean(刘相兵 发表于 2013-12-3 14:07
了解你所不知道的SMON功能(十一):OFFLINE UNDO SEGMENT http://www.askmaclean.com/archives/smon-offline- ...

刘大,现在查出来是CDC的PURGE()引起的回滚段个数的增长,5分钟一次,但是SMON没有自己清理,

回复 只看该作者 道具 举报

13#
发表于 2013-12-4 20:14:03
试试 _smu_debug_mode=33554432

回复 只看该作者 道具 举报

14#
发表于 2013-12-16 14:51:15
结下帖子,最终原因定位为dbms_cdc_publish.purge()中采用了并发处理机制,但是这个处理机制在这个数据库版本中存在BUG,使用并行度超过1时会重新申请回滚段,而不会去复用之前可利用的回滚段空间。最终导致每次执行函数,就会无限制增加会回滚段。
处理办法有两个:
1.执行前关闭并行度,设置参数并行参数为1
2.定期维护UNDO,重建或者手工管理,这个方法是我不太推荐的。

回复 只看该作者 道具 举报

您需要登录后才可以回帖 登录 | 注册

QQ|手机版|Archiver|Oracle数据库数据恢复、性能优化

GMT+8, 2024-12-21 10:15 , Processed in 0.060321 second(s), 20 queries .

Powered by Discuz! X2.5

© 2001-2012 Comsenz Inc.

回顶部
TEL/電話+86 13764045638
Email service@parnassusdata.com
QQ 47079569