设为首页 加入收藏 网站搜索 繁體中文 中国建站网 — 站长资源分享平台

修复identity 类型字段数据的跳跃

来源:本站整理 作者:佚名 时间:2006-09-17 14:59:52

修复identity 类型字段数据的跳跃(译)
 
内容提要

1、引言
2、dbcc object_atts 
3、下载'sp_identity' 存储过程
4、使用sp_identity显示使用identity 类型字段的表
5  使用sp_identity显示当前表的 identity 数字
6、使用sp_identity 修改表的 identity数字

1引言
在sybase 中,有一个使用未公开的dbcc 命令 ,即 dbcc object_atts 快速修复identity 跳跃的方法,因为 dbcc 

object_atts 比较难于使用,而存储过程 sp_identity 更容易完成你的问题
警告:本文的方法没有出现在sybase 发布的文档中,并且没有被 sybase 支持,使用与否取决定你自己,如果出现问题,不能从
sybase 技术支持那里得到帮助



2、dbcc object_atts
dbcc object_atts 命令提供了 一个访问 OAM 页的后门,在 OMA 中,保存了表的 identity 计数器。
不幸的是,这个命令在文档中几乎没有任何说明,并且很难使用,其语法如下:
  dbcc object_atts (table_name, 0, subcommand, [ new_value ] )
第一个参数 :表名,第二个参数 0,
第三个参数:   get  ---显示 保存在 OMA 中的 identity 值
           或put  ---设置 OMA 中的 identity 值,设置的具体数据为 第四个参数数据
第四个参数 :新设置的数

主要的问题是 dbcc object_atts 显示的数据为 16字节的 16进制字符,你必须自己解释为10进制,并且,如何解释依赖于 

identity 列的长度,同样,设置它也是。在实际环境中,很少作为首选。
幸运的是,有一个存储过程 sp_identity 能够处理编码与解码, 并且给出所有含 identity 列的表的情况

下载 'sp_identity'
sp_identity 只支持 11。0 以后版本,下载文件中包含两个版本,一个用于 ASE 11.9/11.5/11.0 的叫  

,sp_identity.119.sql,另外一个用于ASE 12.0及以后版本(sp_identity.120.sql)

4、使用sp_identity显示使用identity 类型字段的表
sp_identity 有几个不同的功能,不带任何参数运行,只显示当前数据库中 包含 identity 列的表,
以及最大可能的 identity 跳跃

1> sp_identity
2> go
Tables with an identity column in database '':

Owner.Table.Column datatype     Maximum Identity Gap
------------------------------- -------------------------------
dbo.invoices.inv_nr numeric(18) 500000000000000 (burn)
dbo.small_gap_tab.a numeric(30) 10 (identity_gap)
dbo.my_table.n numeric(6)       500 (burn)


(burn) 表示 identity列的 一次取数由系统参数"identity burning set factor" 决定,而
(identity_gap) 表示 该表有自定义的identity_gap 属性


5  使用sp_identity显示当前表的 identity 数字
确定当前特定表的  OAM 页的identity 值,必须按照以下三步过程:
  首先 打开跟踪标志 3604 (运行 dbcc traceon(3604) )
  运行 指定特定表名运行 sp_identity 

  1> sp_identity invoices
  2> go
  Table             = invoices (id=1804533462)
  Identity column   = a numeric(18)
  Max. Identity Gap = 500000000000000
         ("identity burning set factor" = 5000 = 0.05%)

  Reading identity value from OAM page... 
  object_atts:get:return value=1
  0207E20C: 0001c6bf 52634001 00000000 00000000 ....Rc@.........
  0207E21C: .
  DBCC execution completed. If DBCC printed error messages, 
  contact a user with System Administrator (SA) role.
  
  这个 16字节的 16进制字符串是 OAM 中保存的 identity 值 (0001c6bf 52634001 00000000 00000000)

  再次运行 sp_identity ,并且 指定这个字符串参数

  1> sp_identity invoices, "0001c6bf 52634001 00000000 0000000"
  2> go
  Table             = invoices (id=1804533462)
  Identity column   = a numeric(18)
  Max. Identity Gap = 500000000000000

[1] [2] [3] [4] [5] [6] [7] [8] [9]  下一页

Tags:

  • 好的评价 如果您觉得好,就请您
      0%(0)
  • 差的评价 如果您觉得差,就请您
      0%(0)
  • 相关文章
    广告赞助

    文章随便看看 设计素材 建站学院 网页模板 视频教程

    网友评论

    共有 0 位网友发表了评论,得分 0 分,平均 0 分    查看完整评论

    用户名: 查看更多评论

    分 值:100分 85分 70分 55分 40分 25分 10分 1分

    内 容:

             通知管理员 验证码: