远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


< 上一个 | 内容 | 下一步 >

非聚簇索引


B 树处理非聚簇索引的方式与处理聚簇索引的方式非常相似,但其间也 有不同之处。在非聚簇索引中:

叶页与数据页不同。

叶级在表中存储每一行的一个键 - 指针对。

叶级页存储索引键、数据页码,以及该索引行指向的数据行的行号。 页码和行偏移编号这一组合称为 ID

根级和中间级存储着索引键和指向其它索引页的页指针。它们还存 储键的数据行的行 ID

键大小相同时,非聚簇索引与聚簇索引相比需要更多空间。


重新访问的叶页


索引的叶页是索引的最低级别,其中索引的所有键均按排序顺序显示。

在所有页锁定表的聚簇索引中,数据行以索引键的顺序存储,因此按照 定义,该数据级为叶级。聚簇索引的其它级别均不包含一个索引行与每 个数据行相对应的关系。所有页锁定表的聚簇索引均为稀疏索引。

数据以上的级别包含一个与每个数据页而不是数据行相对应的指针。

DOL 锁定表的非聚簇索引和聚簇索引中,紧接着数据的上一级为叶 级:它包含对应于每一数据行的键 / 指针对。这些索引为密集索引。在 数据的以上级别中,它们均包含与每个数据行相对应的一个索引行。


非聚簇索引结构


5-7 中的表显示了 lname 的一个非聚簇索引。由于该列有聚簇索引, 因此最右侧的数据行按 employee_id 的升序 (101112 等等)显示页。

根和中间页存储:

键值

ID

指向索引下一级别的指针 叶级存储:

键值

ID


在索引的更高级中,行 ID 用于允许重复键的索引。如果数据修改更改 了索引键或删除了行,则行 ID 必定会在所有级别标识键的所有事件。

1242

10

O’Leary

11

Ringer

12

White

13

Jenkins

1242

10

O’Leary

11

Ringer

12

White

13

Jenkins

RowID

RowID

指针

指针

指针

指针

5-7:非聚簇索引结构


1132

Bennet

1421,1

Chan

1129,3

Dull

1409,1

Edwards

1018,5


image

image

image

image

1007

Bennet

1421,1

1132

Greane

1307,4

1133

Hunter

1307,1

1127

1007

Bennet

1421,1

1132

Greane

1307,4

1133

Hunter

1307,1

1127

1307

14

Hunter

15

Smith

16

Ringer

17

Greane

1307

14

Hunter

15

Smith

16

Ringer

17

Greane

1133

Greane Green Greene

1307,4

1421,2

1409,2

1133

Greane Green Greene

1307,4

1421,2

1409,2

RowID

RowID

指针

指针

1001

Bennet 1421,1 1007

Karsen 1411,3 1009

1009

Karsen

1411,3

1315

1009

Karsen

1411,3

1315

1421

18

19

20

Bennet

Green Yokomoto

1421

18

19

20

Bennet

Green Yokomoto

Smith 1307,2 1062


1127

Hunter Jenkins

1307,1

1242,4


根页 中间

1409

21

22

23

Dull

Greene White

1409

21

22

23

Dull

Greene White

叶页 数据页


非聚簇索引和选择操作

当使用非聚簇索引选择行时,搜索在根级开始。 syspartitions 存储非聚 簇索引的根页的页码 (在低于 15.0 版的 Adaptive Server 中,存储在 sysindexes 中)。

5- 8 中,“Green”大于 “Bennet”但小于 “Karsen”,因此接下来 使用了指向页 1007 的指针。

Green”大于 “Greane”但小于 “Hunter”,因此接下来应使用指向页 1133 的指针。页 1133 为叶级页,表明 “Green”所在的行是页 1421 中 的第 2 行。将读取此页,检查偏移表中的字节 “2”,并从数据页的该 字节位置返回该行。



select *

RowID

RowID

指针

指针

from employee where lname = "Green"

1242

Ray

OLeary

Ron

Ringer

Lisa

White

Bob

Jenkins

1242

Ray

OLeary

Ron

Ringer

Lisa

White

Bob

Jenkins

RowID

RowID

指针

指针

5-8:使用非聚簇索引选择行


image


image

image

1132

Bennet

1421,1

Chan

1129,3

Dull

1409,1

Edwards

1018,5

1132

Bennet

1421,1

Chan

1129,3

Dull

1409,1

Edwards

1018,5

1007

Bennet 1421,1 1132

Greane

1307,4

1133

Hunter

1307,1

1127

1007

Bennet 1421,1 1132

Greane

1307,4

1133

Hunter

1307,1

1127

1307

Tim

Hunter

Liv

Smith

Ann

Ringer

Jo

Greane

1307

Tim

Hunter

Liv

Smith

Ann

Ringer

Jo

Greane

1001

Bennet

Karsen

1421,1

1411,3

1007

1009

Smith

1307,2

1062

1001

Bennet

Karsen

1421,1

1411,3

1007

1009

Smith

1307,2

1062

1133

Greane

1307,4

Greene

1409,2

1133

Greane

1307,4

Greene

1409,2

1421

Ian

Bennet

Andy

Les

Green

Yokomoto

1421

Ian

Bennet

Andy

Les

Green

Yokomoto

指针

指针

Green 1421,2


1009

Karsen

1411,3

1315


1409

Chad

Dull

Eddy

Greene

Gabe

White

Kip

Greco


根页 中间 叶页

1127

Hunter

Jenkins

1307,1

1242,4

1127

Hunter

Jenkins

1307,1

1242,4

数据页


非聚簇索引性能


5-8 中的查询需要对以下各项都进行一次读取:

根级页

中间级页

叶级页

数据页

如果应用程序经常使用特定的非聚簇索引,根和中间页可能位于高速缓 存中,因此可能仅需执行一次或两次物理磁盘 I/O 操作。


非聚簇索引和插入操作

当将行插入到带有非聚簇索引而无聚簇索引的堆中时,行将会插入到表 的最后一页。

如果堆已分区,则插入部分转到其中一个分区的最后一页。然后,非聚 簇索引进行更新以包括新行。

如果表带有一个聚簇索引,则该聚簇索引可用于查找行位置。聚簇索引 被更新,必要时每个非聚簇索引都要进行更新以包含新行。

5-9 显示对带有非聚簇索引堆表的插入操作。该行被放置在表的末尾。 包含新键值和行 ID 的行也被插入到非聚簇索引的叶级。

5-9:对带有非聚簇索引堆表的插入操作


1242

Ray

O’Leary

Ron

Ringer

Lisa

White

Bob

Jenkins

1242

Ray

O’Leary

Ron

Ringer

Lisa

White

Bob

Jenkins

1132

Bennet

1421,1

Chan

1129,3

Dull

1409,1

Edwards

1018,5

1132

Bennet

1421,1

Chan

1129,3

Dull

1409,1

Edwards

1018,5

1007

Bennet

1421,1

1132

Greane

1307,4

1133

Hunter

1307,1

1127

1007

Bennet

1421,1

1132

Greane

1307,4

1133

Hunter

1307,1

1127

1307

Tim

Hunter

Liv

Smith

Ann

Ringer

Jo

Greane

1307

Tim

Hunter

Liv

Smith

Ann

Ringer

Jo

Greane

1133

Greane

1307,4

Greco

Green

1409,4

1421,2

Greene

1409,2

1133

Greane

1307,4

Greco

Green

1409,4

1421,2

Greene

1409,2

RowID

RowID

指针

指针

RowID

RowID

指针

指针

指针

指针

insert employees (empid, lname) values(24, "Greco")


1001

Bennet

1421,1

1007

Karsen

1411,3

1009

Smith

1307,2

1062


1127

Hunter

Jenkins

1307,1

1242,4


根页 中间 叶页

image

1421

Ian Andy Les

Bennet Green Yokomoto

1421

Ian Andy Les

Bennet Green Yokomoto

1009

Karsen

1411,3

1315

1009

Karsen

1411,3

1315

1409

Chad Edi Gabe Kip

Dull Greene White Greco

1409

Chad Edi Gabe Kip

Dull Greene White Greco

数据页


非聚簇索引和删除操作

当从表中删除行时,在 where 子句中,查询可使用列的非聚簇索引来定 位要删除的数据行,如 5-10 所示。

在非聚簇索引的叶级中指向数据行的行也被删除。如果表中还有其它非 聚簇索引,这些索引叶级上的行也将被删除。

5-10:从带有非聚簇索引的表中删除行

1242

Ray

O’Leary

Ron

Ringer

Lisa

White

Bob

Jenkins

1242

Ray

O’Leary

Ron

Ringer

Lisa

White

Bob

Jenkins

指针

指针

delete employees where lname = "Green"



RowID

RowID

指针

指针

1001

Bennet 1421,1 1007

Karsen 1411,3 1009

Smith 1307,2 1062


RowID

RowID

指针

指针

1007

Bennet 1421,1 1132

Greane 1307,4 1133

Hunter 1307,1 1127

image

1132

Bennet 1421,1

Chan 1129,3

Dull 1409,1

Edwards 1018,5


1133

Greane 1307,4

Greco 1409,4

Green 1421,2

Greene 1409,2


1307

Tim

Hunter

Liv

Smith

Ann

Ringer

Jo

Greane


1421

Ian Bennet

Andy Green

Les Yokomoto


1009

Karsen

1411,3

1315

1009

Karsen

1411,3

1315

1127

Hunter 1307,1

Jenkins 1242,4


1409

Chad Dull

Eddy Greene

Gabe White

Green

Green

Kip Greco


根页 中间 叶页

数据页


如果删除操作删除了数据页的最后一行,该页将重新分配并且相邻页的 指针也将在所有页锁定表中进行调整。该页的所有引用也将在索引的较 高级别中删除。

如果删除操作在索引中间页只留下一个单行,索引页可能被合并,如同 聚簇索引一样。

请参见 91 页的 “索引页合并

数据页上不存在自动页合并,所以如果应用程序进行了许多随机删除, 则数据页中可能一页上只有一行或几行。


DOL 锁定表的聚簇索引

DOL 锁定表的聚簇索引采用与非聚簇索引相似的结构。在数据页上层 有叶级。叶级中包含表中每一行的键值和行 ID

与所有页锁定表的聚簇索引不同, DOL 锁定表中的数据行不必维持键 的精确顺序。而是用索引来指示行在页 (该页有相邻或邻近键)上的 放置情况。

当某一行插入到带聚簇索引的 DOL 锁定表时,插入操作仅在要插入的 值之前使用聚簇索引键。索引指针用于查找该页,如果该页有空间,行 即被插入。如果没有空间,行将被插入到相同分配单元中的某页或该表 使用的另一分配单元中。

在对 DOL 锁定表进行插入和更新操作期间,为了向维护数据聚簇提供 邻近空间,可设置空间管理属性以在页上 (使用 fillfactor exp_row_size) 或分配单元上 (使用 reservepagegap)提供空间。

请参见 Performance and Tuning Series: Physical Database Tuning (《性能 和调优系列:物理数据库调优》)中的 “设置空间管理属性”。




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复Sybase SQL Anywhere的工具在国内应该算首创。

ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具

  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

本工具的应用场景:

1.因为物理磁盘故障、操作系统、系统软件方面或者掉电等等原因导致的Sybase SQL Anywhere数据库无法打开的情况;
2.误操作,包括truncate table,drop table,不正确的where条件导致的误删除等;
Sybase SQL Anywhere无法打开时,比较常见的错误是:Assertion failed。
如:
1、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Checkpoint log: invalid bitmap page -- transaction rolled back
2、Internal database error *** ERROR *** Assertion failed:201819 (8.0.1.2600) Page number on page does not match page requested -- transaction rolled back
3、Internal database error *** ERROR *** Assertion failed:200502 (9.0.2.2451) Checksum failure on page 23 -- transaction rolled back
4、File is shorter than expected
5、Internal database error *** ERROR *** Assertion failed: 201116 Invalid free list index page found while processing checkpoint log -- transaction rolled back
6、*** ERROR *** Assertion failed: 51901 Page for requested record not a table page or record not present on page等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------