• linkedu视频
  • 平面设计
  • 电脑入门
  • 操作系统
  • 办公应用
  • 电脑硬件
  • 动画设计
  • 3D设计
  • 网页设计
  • CAD设计
  • 影音处理
  • 数据库
  • 程序设计
  • 认证考试
  • 信息管理
  • 信息安全
菜单
linkedu.com
  • 网页制作
  • 数据库
  • 程序设计
  • 操作系统
  • CMS教程
  • 游戏攻略
  • 脚本语言
  • 平面设计
  • 软件教程
  • 网络安全
  • 电脑知识
  • 服务器
  • 视频教程
  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase
您的位置:首页 > 数据库 >sybase > 修复identity 类型字段数据的跳跃

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

作者:匿名 字体:[增加 减小] 来源:互联网 时间:2017-06-28

匿名通过本文主要向大家介绍了identity类型,identity,identity是什么意思,identity card,visual identity等相关知识,希望本文的分享对您有所帮助
</div>
修复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
     ("identity burning set factor" = 5000 = 0.05%)

 Decoded identity value on OAM page = 500000000000001
 (hex=0001c6bf52634001)

 现在,我们得到并解码了 OAM 中的 identity 值,但它意味着什么呢?
 首先,如果你用 "with nowait" 停止服务器,这个 identity 列将跳跃多少。而不是表中数据的下一个。
 而是保存在 OAM 中的数据加上 identity 种子设顶数(在 ASE 12.0, 为identity_gap 选项)
 另外,当你运行 ASE 12.0, 可以通过运行 dbcc listoam看到这个数据  

6、使用sp_identity 修改表的 identity数字
使用 sp_identity , OAM 中identity 的 数字可以被设置为任意数. 这个需要如下步骤:
1、确认你要设置的数据(查看表中identity 的数据应该到多少,比如 10033 )
2、正常停止服务器
3 重新启动服务器,以单用户模式,或者不让用户访问
4、 运行 sp_identity table_name, null, new_value ; 
 1> sp_identity invoices, null, 10032
 2> go
 Table       = invoices (id=1804533462)
 Identity column  = a numeric(18)
 Max. Identity Gap = 500000000000000
    ("identity burning set factor" = 5000 = 0.05%)

 object_atts:put:return value=1
 DBCC execution completed. If DBCC printed error messages, 
 contact a user with System Administrator (SA) role.

 Identity value on OAM page has been set to 10032
 (hex=0x00000000000027300000000000000000)
 You should now do a 'shutdown with nowait' immediately.
 After restarting the server, the value assigned to the 
 next row inserted into 'invoices' will be 10033.

5 然后立即运行 'shutdown with nowait' ,这样 表的下一个 identity 数字是 10033 
6 重新正常启动sybase 服务 


说明:如果你应用了 identity 数据类型,并且要求identity 列保持连续,并且数据量很大,那么,用这个方法需要的时间可能比较短
否则不推荐使用。




下面是SP_IDENTITY.120.SQL,用于 12.0 以后版本
/* 
 * SP_IDENTITY.120.SQL - version for ASE 12.0 or later
 * (when running ASE 11.9/11.5/11.0, install SP_IDENTITY.119.SQL instead)
 * 
 * Description
 * ===========
 * This file contains the stored procedure 'sp_identity', which performs some 
 * useful functions w.r.t. identity columns:
 *
 *  - displays all tables with an identity column in the current database
 *  - displays the identity value&
分享到:QQ空间新浪微博腾讯微博微信百度贴吧QQ好友复制网址打印

您可能想查找下面的文章:

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

相关文章

  • 2017-06-28DBCC
  • 2017-06-28教你学会怎样升级到SQL Anywhere 10(7)
  • 2017-06-28使用动态SQL(ASE12.0+)
  • 2017-06-28Sybase远程磁带备份的具体步骤
  • 2017-06-28在Sybase ASE中使用Passthrough
  • 2017-06-28临时数据库
  • 2017-06-28如何处理用jConnect连接Sybase数据库时中文乱码的问题
  • 2017-06-28Sybase数据库中分离日志与数据文件
  • 2017-06-28江苏GSM移动集中计费系统
  • 2017-06-28让SQL飞起来

文章分类

  • MsSql
  • Mysql
  • oracle
  • MariaDB
  • DB2
  • SQLite
  • PostgreSQL
  • MongoDB
  • Redis
  • Access
  • 数据库其它
  • sybase
  • HBase

最近更新的内容

    • 如何使用Sybase ASE数据库的扩展存储过程
    • 得克萨斯州劳动力委员会
    • 日志问题普及篇
    • 解决用jConnect连接Sybase数据库时中文乱码的问题
    • 如何将现有的Sybase逻辑卷改名
    • Sybase数据库备份方案
    • 了解Sybase IQ服务剑桥天文观测台
    • 数据库安全管理概述
    • 理解Sybase数据库角色
    • Sybase为电话网管值班

关于我们 - 联系我们 - 免责声明 - 网站地图

©2020-2025 All Rights Reserved. linkedu.com 版权所有