Chinaunix首页 | 论坛 | 博客
  • 博客访问: 248458
  • 博文数量: 115
  • 博客积分: 10
  • 博客等级: 民兵
  • 技术积分: 930
  • 用 户 组: 普通用户
  • 注册时间: 2010-12-30 05:27
文章分类

全部博文(115)

文章存档

2011年(10)

2010年(21)

2009年(19)

2008年(65)

我的朋友

分类: DB2/Informix

2011-08-08 10:40:24

“alter fragment”操作需要对表进行独占访问,如果应用程序对表的访问非常频繁的话,管理员很难获得该表的独占访问。在很多情况下,管理员不得不申请维护时间,停止应用,来进行“alter fragment”的操作。因此对于7*24小时的业务环境,需要提供一种有效的方法来解决“alter fragment”操作在有大量应用对表的访问情况下,很难获得表的独占访问的问题。

现在IDS11.50FC6版本提供了增强的“alter fragment”支持,可以让DBA拥有较高的权限,如果其他session在指定时间内不能退出对该表的访问,则这些访问该表的session将被强行终止并回滚,使当前的“alter fragment”能够顺利完成。具体使用方法和说明如下:

1.执行SQL:

  1. SET ENVIRONMENT FORCE_DDL_EXEC “60”;
设置FORCE_DDL_EXEC环境设置,表示当前session拥有高优先级,并且指定如果当前session在60秒内无法获得独占锁,则当前“alter fragment”操作失败。

2.执行SQL:

  1. SET LOCK MODE TO WAIT 10;
设置锁等待为10秒,表示当前session首先等待10秒,允许访问该表的其他session继续执行10秒,使其尽量执行完成。

3.执行SQL

  1. BEGIN WORK;
  2. ALTER FRAGMENT ON TABLE sales ATTACH sales_Q3 as sales_date between ‘2009-07-01’ and ‘2009-09-30’;
  3. ALTER FRAGMENT ON TABLE sales ATTACH sales_Q4 as sales_date between ‘2009-10-01’ and ‘2009-12-31’;
  4. COMMIT;
开始执行“alter fragment”操作,首先等待10秒,10秒后如果还发现有其他session正在访问sales表,则这些session将被强行终止并回滚,回滚的session会返回“-458 Long transaction aborted”的错误号。

4.执行SQL:

  1. SET ENVIRONMENT FORCE_DDL_EXEC “OFF”;
最后关闭FORCE_DDL_EXEC环境设置

限制;
1. 该特性只对有日志的数据库生效。
2. FORCE_DDL_EXEC设置只能由informix用户或拥有DBA权限的管理员执行。
3. 目前FORCE_DDL_EXEC设置只支持“alter fragment”操作。
4. 如果设置lock mode为无限等待的话(如set lock mode to wait;),则该特性不生效。
5. 当前不能有其他session在对该表执行DDL操作,否则“alter fragment”操作会失败并报错。

阅读(589) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~