delete 大表后kill session是否会recover?

今天是2013-10-15,论坛有个朋友提这个问题:

简单介绍下情景: DELETE 一张大表数据,未执行完,就把session 杀掉了。
kill session 后。smon占CPU 仍然超过60%,难道是在回滚数据?

我的测试过程:

session 1:
SQL> select count(*) from amy;

COUNT(*)
----------
1047140

SQL> select * from v$mystat where rownum<2;

SID STATISTIC# VALUE
---------- ---------- ----------
46 0 0
session 2:
SQL> select sid,serial#,username from v$session where username is not null;

SID SERIAL# USERNAME
---------- ---------- ------------------------------
37 127 SYS
46 15 RHYS
48 11 SYS
50 23 SYS
然后再rhys下删除amy表:
SQL> delete from amy;
delete from amy
*
ERROR at line 1:
ORA-00028: your session has been killed
ORA-00028: your session has been killed


SQL>
在session 2 然后kill 该session:
SQL> alter system kill session '46,15';

System altered.

SQL> select usn,xacts,latch,extents,gets,waits,hwmsize,status,curext,curblk from v$rollstat where xacts>0;

USN XACTS LATCH EXTENTS GETS WAITS HWMSIZE STATUS CUREXT CURBLK
---------- ---------- ---------- ---------- ---------- ---------- ---------- --------------- ---------- ----------
3 1 0 106 82251 10 402776064 ONLINE 102 393

SQL>
select usn,xid,slt,state,undoblocksdone,undoblockstotal,cputime,parentslt,rcvserSQL> vers from v$fast_start_transactions;

USN XID SLT STATE UNDOBLOCKSDONE UNDOBLOCKSTOTAL CPUTIME PARENTSLT RCVSERVERS
---------- ---------------- ---------- ---------------- -------------- --------------- ---------- ---------- ----------
3 0300000068050000 0 RECOVERING 4479 14624 16 0 1
3 03001F0065050000 31 RECOVERED 3953 3953 58 1

SQL> r
1* select usn,xid,slt,state,undoblocksdone,undoblockstotal,cputime,parentslt,rcvservers from v$fast_start_transactions

USN XID SLT STATE UNDOBLOCKSDONE UNDOBLOCKSTOTAL CPUTIME PARENTSLT RCVSERVERS
---------- ---------------- ---------- ---------------- -------------- --------------- ---------- ---------- ----------
3 0300000068050000 0 RECOVERING 4479 14624 17 0 1
3 03001F0065050000 31 RECOVERED 3953 3953 58 1
结论:没错,是需要回滚,有时候大的事务回滚导致很严重的性能问题,有时候为了加快速度,设置fast_start_parallel_rollback 为high

### 回答1: xfs_recover是一个用于修复XFS文件系统的工具。使用方法如下: 1. 以root用户身份登录系统 2. 将硬盘挂载到/mnt目录下 3. 运行xfs_repair -n /mnt/硬盘分区 4. 根据提示输入y确认修复或n取消修复。 注意:在运行xfs_repair之前,请确保硬盘分区没有被挂载,并且在修复过程中不要对硬盘分区进行操作。 ### 回答2: xfs_recover是XFS文件系统的一个命令,用于恢复XFS文件系统中由于异常情况导致的损坏或不一致的数据。下面是使用xfs_recover的步骤: 1. 首先,确保系统上已经安装了XFS工具包,否则需要先安装。 2. 打开终端窗口,并以管理员身份登录。 3. 输入以下命令以查看需要恢复的文件系统的状态: ```shell xfs_db -x /dev/xxx ``` 这里的`xxx`是需要恢复的文件系统的路径,比如`/dev/sda1`。 4. 在xfs_db命令提示下,输入以下命令来关闭文件系统,以便进行恢复操作: ```shell f ``` 5. 关闭文件系统后,可以使用xfs_recover进行恢复操作。输入以下命令: ```shell xfs_recover /dev/xxx ``` 这里的`xxx`是需要恢复的文件系统的路径。 6. 系统开始扫描文件系统,并尝试恢复损坏或不一致的数据。这个过程可能需要一些时间,具体时间取决于文件系统的大小和数据损坏的程度。 7. 当恢复过程完成后,您应该看到一条消息显示恢复操作已经成功完成。 8. 最后,重新挂载文件系统以使其可访问: ```shell mount -o rw /dev/xxx /mnt/xxx ``` 这里的`xxx`是需要恢复的文件系统的路径,`/mnt/xxx`是文件系统重新挂载的目标路径。 请注意,在进行恢复操作之前,请务必备份文件系统中的重要数据,以防止数据丢失。此外,如果您对使用xfs_recover不确定或不熟悉,请咨询专业人员的建议。 ### 回答3: xfs_recover是一个用于恢复XFS文件系统的命令行工具。它用于修复文件系统损坏、不一致或丢失的数据,并在可能的情况下尽可能地恢复文件系统的正常状态。 使用xfs_recover需要在root用户下执行以下步骤: 1. 首先,确认文件系统是否已经挂载。如果已挂载,则需要卸载文件系统。可以使用umount命令来卸载文件系统。 例如:umount /dev/sda1 2. 使用以下命令执行文件系统恢复操作: xfs_recover /dev/sda1 这里的/dev/sda1是要恢复的文件系统所在的设备。 3. 在恢复过程中,xfs_recover扫描文件系统的元数据,找到损坏的区域并尝试修复它们。恢复过程可能需要一段时间,取决于文件系统的大小和损坏的程度。在恢复过程中,xfs_recover输出一些日志信息,以告知用户当前的恢复进度。 4. 完成恢复后,可以重新挂载文件系统,并查看其状态是否恢复正常。可以使用mount命令来重新挂载文件系统。 例如:mount /dev/sda1 /mnt 需要注意的是,xfs_recover可以修复大多数常见的文件系统损坏问题,但并不能保证100%的恢复成功。在执行之前,建议先备份重要的数据。 总结起来,xfs_recover是一个用于修复损坏的XFS文件系统的命令行工具,通过简单的几个步骤,可以尝试恢复文件系统的正常状态。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值