Chinaunix首页 | 论坛 | 博客
  • 博客访问: 626341
  • 博文数量: 152
  • 博客积分: 3857
  • 博客等级: 中校
  • 技术积分: 1702
  • 用 户 组: 普通用户
  • 注册时间: 2005-07-29 18:14
文章分类

全部博文(152)

文章存档

2017年(1)

2016年(1)

2015年(8)

2014年(2)

2013年(5)

2012年(15)

2011年(12)

2010年(24)

2009年(18)

2008年(24)

2007年(24)

2006年(14)

2005年(4)

分类: Sybase

2011-01-23 10:07:01

关键字: SYBASE,字符集,索引suspect "default sort order" ,sp_indsuspect,dbcc checkdb

 

笔者最近做了一次sybase ASE的字符集顺序调整,是顺序调整,不是更改字符集(数据库启动最后default sort order 选项)。目的是,之前数据库建库时候的首先字符集,对大小写不敏感,影响使用,需要选择一个对大小写敏感的字符集。具体修改的参数命令为:sp_configure “default sortorder id”

 

修改过程如下:

  1. dbcc 检查各用户数据库;
  2. dump备份master,用户数据库;
  3. bcp备份,用户数据库;(后来证明,非常重要);
  4. 备份cfg文件;
  5. 修改字符集顺序 ,sp_configure “default sortorder id” xx
  6. 重启数据库;(需要重启两次)
  7. 查看数据库日志,是否有报错信息?
  8. 检查修改是否生效。一是使用sp_configure 查看“sortorder”是否已经修改;二是查看数据表,比如大小写是否已敏感。

更改完后,数据库无报错,表也正常。启运用的时候,发现应用有问题,启动不了。而且启动的非常慢。经过仔细查找应用日志,发现某些表是“read only”状态。最后对该表进行select into 的备份,发现该表索引已被“suspect”,该表只能读了。系统提示对该表进行“dbcc reindex”操作。后来和SYBASE工程师起得联系,他们好像也没遇到过,只是说根据提示,对该表进行重建索引好了。

问到一个资深的工程师,得到完美解答如下:

1, sybase一般不建议更改字符集的东西,除非must do

2, sp_configure “default sortorder id”修改后不一定能保证你的对象不会被损坏,一般这个对象指的就是索引。

3, 这个顺序修改后,系统会对一些特殊的系统表做reindex ,但不是所有的系统表;(查看日志,的确如此,比如各个数据库sysobjecs表)

4, 字符集顺序修改会,也会影响某些表的text字段;如果损坏,只能用之前的bcp备份来恢复。

5, 如果数据库有损坏,判断不了,dump备份是没有用的。只有bcp备份恢复回来才有用。

经过笔者进一步使用,发现:1,所有数据库的表,几乎都有索引suspect,包括,master等系统数据库。2,用dbcc checkdb()基本能检查出来并修复;3,用sp_indsuspect 命令可以查询出那些索引被suspect4,索引被挂起,用,dbcc reindex可以完美修复。

所以,以后要做字符集顺序修改,sp_configure “default sortorder id” xx时,标准流程是:

1, dbcc checkdb()

2, bcp备份数据库;

3, 备份 cfg文件;

4, sp_configure “default sortorder id” xx完成修改;

5, 重启数据库(会有两次)

6, 检查数据库日志;

7, dbccdb checkdb() 检查各个数据库,包括系统库。(很重要)

8, sp_indsuspect 检查各个数据库是否有索引被挂起;

9, 如果有,用dbcc reindex () 修复该表。

10,      检查数据库中包含text字段的数据库表是否正常?主要是text字段是否正常,如果有损坏,需要将之前的该表的bcp备份导回来。

 

另:非常感谢一位资深的SYBASE数据库先驱,虽然开了自己的公司,当了老总,不过还是那样平易近人,那样亲切。尤其是,可能因为思维过程相近,听他说技术上的东西,还真是一种享受。03年来过云南,他说,他对我有印象,还记得我,暗喜,心甚欢。

 

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