Chinaunix首页 | 论坛 | 博客
  • 博客访问: 1620736
  • 博文数量: 201
  • 博客积分: 2812
  • 博客等级: 少校
  • 技术积分: 3029
  • 用 户 组: 普通用户
  • 注册时间: 2011-01-18 18:28
个人简介

从事数据库工作多年,目前看好分布式NeSQL/HTAP数据库在企业客户市场的发展。未来的主要方向是——致力于 NewSQL/HTAP 数据库的推广普及。

文章存档

2016年(1)

2015年(8)

2014年(23)

2013年(50)

2012年(32)

2011年(87)

分类: Sybase

2011-03-09 09:39:04

1. 说明
   如果存放用户数据的dbspace发生损坏,那么IQ在启动时可以把这个损坏的dbspace标识为Offline状态,IQ Server仍然能够启动(如果IQ_SYSTEM_MAIN发生损坏,IQ 将不能启动)。在启动之后,其它完好的dbspaces仍然可以被用户访问。
   如果损坏的dbspace不能修复、需要重建的话,那么需要先删除它。如果损坏的dbspace上有用户数据,那么需要把存放在这个dbspace中的所有对象删除之后才能删除它。
   删除损坏dbspace中的表不能采用通常的方法,因为dbspace已损坏不能简单的执行drop table语句。下面将介绍删除的步骤(切记不是万不得已的话千万不要这样做!)
 
2. 删除步骤
(1) 重启服务器
    例如:
       start_asiq -gm 1 -gd dba @mp2.cfg mp2.db
    在这个命令行中,-gm 1仅仅允许一个用户做连接,-gd只允许DBA访问。当强制删除对象时,必须禁止其他用户连接。
 
(2) 打开临时选项FORCE_DROP为ON:
    set temporary option FORCE_DROP = 'ON'
 
(3) 强制删除表(假设损坏的dbspace是MP2_MAIN_CURR)
    使用DROP TABLE强制删除损坏的表。在重新启动服务器之前不要执行任何其他的DDL或者DML命令!
查看MP2_MAIN_CURR的表可以使用:
      sp_iqdbspaceinfo MP2_MAIN_CURR --表多的时候很慢
      或者
select creator,tname from SYSCATALOG where dbspacename = 'MP2_MAIN_CURR' and tabletype='TABLE';
 
    为了生成删除所有表的语句,可以使用如下语句:

select 'drop table ' || '"' || creator || '"' || '.' || '"' || tname || '"' || ';' from SYSCATALOG where dbspacename = 'iq_main' and tabletype='TABLE';

(4) 重新启动服务器
    例如: start_asiq -gm 1 -gd dba @mp2.cfg  mp2.db
 
(5) 运行sp_iqcheckdb
    sp_iqcheckdb 'dropleaks dbspace MP2_MAIN_CURR'
 
(6) 发出一个checkpoint
   即执行checkpoint语句
 
(7) 使用正常方式停止服务器
 
(8) 使用正常方式启动服务器,启动后即可进行正常操作。
 
(9) 执行 select DBSpaceName, OkToDrop from sp_iqdbspace('MP2_MAIN_CURR')
    如果OkToDrop显示为Y,则可以执行如下命令删除dbspace
    drop dbspace MP2_MAIN_CURR
    checkpoint

(10) 重新创建CAS_MAIN_CURR
阅读(3487) | 评论(0) | 转发(0) |
给主人留下些什么吧!~~