免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 3968 | 回复: 3
打印 上一主题 下一主题

ASE字符集顺序调整流程及其相关! [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2011-01-23 12:06 |只看该作者 |倒序浏览
关键字: SYBAS, 字符集,索引suspect ,"default sort order" ,sp_indsuspect,dbcc checkdb



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



修改过程如下:

dbcc 检查各用户数据库;
dump备份master,用户数据库;
bcp备份,用户数据库;(后来证明,非常重要);
备份cfg文件;
修改字符集顺序 ,sp_configure “default sortorder id” xx ;
重启数据库;(需要重启两次)
查看数据库日志,是否有报错信息?
检查修改是否生效。一是使用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 命令可以查询出那些索引被suspect;4,索引被挂起,用,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备份导回来。

(同发本人blog)

论坛徽章:
6
水瓶座
日期:2014-06-04 03:34:37水瓶座
日期:2014-06-17 13:20:31数据库技术版块每日发帖之星
日期:2016-07-09 06:20:00数据库技术版块每日发帖之星
日期:2016-07-17 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-04 06:20:00
2 [报告]
发表于 2011-01-23 20:50 |只看该作者
后来和SYBASE工程师起得联系,他们好像也没遇到过,只是说根据提示,对该表进行重建索引好了。
--------------------------------------------------------------------------------------------------------------
你咨询的是售前吧。

第二步:2, bcp备份数据库。
我觉得同时做一个全库dump备份和对每张表bcp备份都可以搞一下。以免出现问题后可以load回去。

个人感觉sp_configure "default sortorder id" 修改字符集collate顺序之后,除syscolumns,sysindexes,sysobjects这3张系统表的索引被重建了, 其他系统表和用户表的索引都没被改动,可能仅仅把sysobjects中status位置于可疑状态了。

索引需要重建,drop + create index 或者dbcc reindex 我感觉应该都可以。
另外,表中text类型字段的信息最好rebuild一下,用dbcc rebuild_text

ps:和调整字符集差不多,都需要关注索引和text类型的值

论坛徽章:
7
数据库技术版块每日发帖之星
日期:2015-08-09 06:20:00数据库技术版块每日发帖之星
日期:2015-11-03 06:20:00数据库技术版块每日发帖之星
日期:2016-02-20 06:20:00数据库技术版块每日发帖之星
日期:2016-07-13 06:20:00数据库技术版块每日发帖之星
日期:2016-07-31 06:20:00数据库技术版块每日发帖之星
日期:2016-08-01 06:20:00数据库技术版块每日发帖之星
日期:2016-08-18 06:20:00
3 [报告]
发表于 2011-01-24 09:02 |只看该作者
字符集不是随便调整的,牵涉到len()函数返回结果大小的问题。这个问题相当致命。
所以一般只能在同一个语系范围内的字符集相互调整例如eucgb-cp936-gb18030,而一旦用了iso_1的话就很难调整成其他的了。至于sort id,这个东西因为会影响order by 的返回顺序,所以index和primary key一定要重建过。

论坛徽章:
0
4 [报告]
发表于 2011-03-04 17:34 |只看该作者
dbcc reindex是肯定要重新做的。。同意2楼说的,售前太菜了。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP