远程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. 实用程序指南

 


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

不含聚簇索引的表

如果在 Adaptive Server 上创建表,但不创建聚簇索引,该表将存储为堆 表,这意味着不按任何特定顺序存储数据行。本节介绍当没有 “有用” 索引可帮助检索数据时,如何对堆表执行 selectinsertdelete update 操作。

堆表用途很少。多数应用程序在表上存在聚簇索引时会执行得更好。不 过,对于仅使用少量页的小表和很少更改的表,堆表则是理想选择。

对于不要求以下项的表,堆表很有用:

直接访问单个随机行

对结果集进行排序 对于针对必须返回表行子集的多数大表进行的查询,堆表效果不理想。

在频繁执行大批量插入 (此时不接受删除和创建聚簇索引的开销)的 应用中,分区的堆表很有用。

顺序磁盘访问效率高,在使用大 I/O 和异步预取时更是如此。但必须始 终扫描整个表以查找相关值,这对数据高速缓存和其它查询可能会产生 很大影响。

批量插入还可执行有效的顺序 I/O。但如果多个进程尝试同时插入数据, 则最后一页中可能出现瓶颈。

有时,索引位于 where 子句中指定的列中,但优化程序确定使用索引会 比执行表扫描产生更高开销。

当选择表中所有行时,始终使用表扫描。唯一的例外情况是查询只包括 那些在非聚簇索引中为键的列。

有关详细信息,请参见 Performance and Tuning Series: Locking and Concurrency Control (《性能和调优系列:锁定和并发控制》)中的第 5 章 “Indexes”(索引)。


锁定方案


APL 表中的数据页通过每页上的指针链接为页列表。 DOL 锁定表中的 页不能链接成页链。

在所有页锁定表中,每页存储一个指向页链中下一页和前一页的指针。 在插入新页时,两个相邻页上的指针将更改为指向新页。Adaptive Server 在扫描所有页锁定表时,会跟随这些页指针按顺序读取页。


在所有页锁定表的每个索引级和 DOL 锁定表的索引叶级,页也是双重 链接的。如果所有页锁定表已分区,则每个分区有一个页链。

与所有页锁定表不同, DOL 锁定表除了在您刚创建聚簇索引后维护页 链,其它时间通常不进行维护。但是,当您第一次在表上发出命令时, 此页链将中断。

Adaptive Server 在扫描 DOL 锁定表时使用存储在 OAM 页中的信息。请 参见 23 页的 “对象分配映射页

所有页锁定表与 DOL 锁定表间的另一个区别是后者使用固定的行 ID。 这意味着在正常查询处理期间,行 ID (页号与页上行号的组合)在 DOL 锁定表中不发生改变。

只有在执行要求复制数据行的某项操作时,行 ID 才发生更改,例如, 在 reorg rebuild 期间或在创建聚簇索引时。

有关固定行 ID 如何影响堆操作的信息,请参见 37 页的 “从 data- only-locked 堆表删除 38 页的 “ data-only-locked 堆表


对堆表执行选择操作

当对堆表发出 select 查询,并且没有有用的索引时, Adaptive Server 必 须扫描表中的每个数据页,以查找满足查询条件的所有行。可能存在一 个或多个匹配行,或者没有匹配行。


所有页锁定堆表


对于所有页锁定表, Adaptive Server 会读取该表 syspartitions 中的 firstpage 列,将第一页读入高速缓存中,然后跟随下一页的指针继续操 作,直至找到表的最后一页。


Data-only locked 堆表

DOL 锁定表的各页未链接为页链,因此对 DOL 锁定堆表的 select 查询 会使用表的 OAM 和分配页来定位表中的所有行。OAM 页指向分配页, 这些分配页指向表的扩充和页。


将数据插入到所有页锁定堆表中

将数据插入无聚簇索引的所有页锁定堆表中时,会始终将数据行添加到 表的最后一页。如果表中没有聚簇索引,并且表未分区,则堆表的 syspartitions.root 条目将存储指向堆表最后一页的指针,以指示应在其中 插入数据的页。

如果最后一页已满,则在当前扩充中分配新页,并将其链接到链上。如 果扩充已满, Adaptive Server 将在该表正在使用的其它扩充上查找空页。 如果没有可用页,就给表分配新扩充。

对使用所有页锁定的堆表的一项严格的性能限制是,当向某页添加行时, 该页必须锁定,且在事务完成前始终保持锁定状态。如果有许多用户同 时尝试对所有页锁定堆表执行插入操作,则每项插入操作必须等待前一 个事务完成后才能进行。

出现以下情况时堆表的最后一页将出现冲突问题:

插入单行

使用 select into insert...select,或在批处理中使用多个 insert 语句插 入多行

批量复制到表中 要消除堆表最后一页中的冲突,可尝试以下方法:

切换到数据页或数据行锁定

创建聚簇索引,将插入操作引导到其它页上

将表分区,为该表创建多个插入点,在所有页锁定表中提供多个 “最后页”

对于可能出现锁定冲突的所有事务,还可以:

保持事务简短

事务获取锁后,尽可能避免网络活动和用户交互


将数据插入到 data-only-locked 堆表中

用户将数据插入 DOL 锁定堆表时,Adaptive Server 会跟踪最近执行插入 操作的页码,并保留页码作为一个提示,供以后需要空间的任务使用。随 后将对表的插入操作引导到这些页中的一个。如果该页已满, Adaptive Server 会分配一个新页,并用新页码替换原来的提示。

在向 DOL 锁定堆表执行插入操作的过程中,许多用户同时插入数据时 发生的阻塞现象要比 APL 表少很多。如果确实发生阻塞, Adaptive Server 会分配少量空页,并使用这些新分配的页作为提示,来将新插入 操作引导到这些页。

对于数据行锁定表,只有在写入对数据页的实际更改时才会发生阻塞现 象;尽管在事务执行期间事务会持有行锁,但仍可在页上插入其它行。 行级锁允许多个事务在页上持有锁。

DOL 锁定表上可能会发生少量阻塞,因为 Adaptive Server 允许在刚 分配完大量页后发生少量阻塞,这样就可在新分配的页填满后再分配其 它页。

对于 DOL 锁定表,向堆表执行插入操作期间的冲突量已大大减少,但 仍会发生冲突。如果这些冲突影响到插入速度,请尝试以下方法:

切换到数据行锁定 (如果表采用数据页锁定方案)

使用聚簇索引分布数据插入

对表进行分区,这会提供其它提示,当发生阻塞时允许在每个分区 上分配新页


删除堆表上的数据


当从无有用索引的堆表中删除行时, Adaptive Server 将扫描该表中的数 据行以查找要删除的行。如果不对每一行进行检查,就无法知道有多少 行符合查询条件。


从所有页锁定堆表删除

从所有页锁定表中的某页中删除数据行时,该页上位于此行之后的行将 上移,从而使该页上的数据保持连续,避免页内出现分段。


data-only-locked 堆表删除

data-only-locked 堆表删除行时,如果没有有用的索引,则需要进行表 扫描。使用 OAM 和分配页来定位这些页。

页上的空间不会立即恢复。 DOL 锁定表中的行必须保持固定的行 ID, 如果事务被回退,则必须将这些行重新插回原来的位置。

删除事务完成后,下列进程之一可将页上的行移位,以使空间的使用保 持连续:

管家垃圾收集进程

需要在页上找到空间的插入

reorg reclaim_space 命令


删除页上最后一行


如果删除页上的最后一行,该页就被释放。如果表仍使用该扩充上的其 它页,当需要页时,表还可再次使用该页。

如果扩充上的所有其它页均为空,则整个扩充被释放。它可被分配给数 据库中的其它对象。表或索引的第一个数据页始终不会被释放。


更新堆表上的数据


与对堆表执行的其它操作一样,在对在 where 子句中的各列上没有有用 索引的表执行 update 时,需要执行表扫描以查找要更改的行。


所有页锁定堆表


可采用以下几种方法对所有页锁定堆表执行更新:

如果行的长度不改变,更新的行就会替换现有行,并且页上不发生 数据移动。

如果行的长度发生改变,并且页上有足够的可用空间,则该行在页 上仍处于原来位置,但其它行向上或向下移动,使这些行在页上保 持连续。

页尾处的行偏移指针被调整为指向变化后的行位置。

如果行超出页范围,将从当前页中删除该行,然后再在表的最后一页 将其作为新行插入。这种更新可能导致堆表的最后一页上出现冲突。


data-only-locked 堆表

DOL 锁定表的要求之一是数据行的行 ID 始终不能改变(欲重建表的 情况除外)。因此,只要行不超出页的范围,就可按上述前两个方法对 DOL 锁定表进行更新。

但如果在更新 DOL 锁定表时某行超出了页范围, row forwarding 进程 将执行下列步骤:

1 该行被插入到另一页,且

2 在该行的初始位置存储一个指向新页上行 ID 的指针。 转移行时不需要修改索引。所有索引仍指向原始的行 ID

如果必须再次转移行,将更新初始位置,以指向新页 — 转移的行与其 初始位置之间不能有一个以上的跳转。

在执行更新操作期间,由于不必更新索引,因此行转移增加了并发性。 但这会减慢数据检索速度,因为任务必须在原始位置读取该页,然后读 取存储该转移数据的页。

使用 reorg 命令可从表中清除转移的行。

请参见 《性能和调优系列:查询处理和抽象计划》的第 1 章 “了解查 询处理”。


Adaptive Server 如何为堆操作执行 I/O

当查询需要数据页时, Adaptive Server 先检查该页是否在数据高速缓存 中。如果不在其中,则必须从磁盘读取它。新安装且逻辑页为 2K Adaptive Server 具有一个配置为 2K I/O 的数据高速缓存。每个 I/O 操作 均读取或写入一个 Adaptive Server 数据页。系统管理员可以:

配置多个高速缓存

将表、索引或文本链绑定到高速缓存

将数据高速缓存配置成以页大小的倍数 (最多个数据页,即一个扩 充)执行 I/O 操作

为了最有效地利用这些高速缓存并减少 I/O 操作, Adaptive Server 优化 程序可以执行以下操作:

选择每次预取最多八个数据页

选择不同的高速缓存策略


顺序预取,或大 I/O


维护堆表


Adaptive Server 数据高速缓存可以配置为允许使用大 I/O。如果高速缓存 允许使用大 I/OAdaptive Server 便可以预取数据页。

高速缓存包含由逻辑页大小决定容量的缓冲池,使 Adaptive Server 能够 在单个 I/O 操作中最多读取整个扩充 (八个数据页)。

由于执行 I/O 操作所需的大部分时间都用在了搜索和定位上,因此,以 16K I/O 中读取八页的时间几乎与以 2K I/O 读取单页所需的时间相同。 使用八个 2K I/O 读取八页的开销几乎是使用单个 16K I/O 读取八页的开 销的八倍。使用大 I/O 时执行表扫描操作更加理想。

当使用一个 I/O 将多个页读入高速缓存时,这些页将被视为一个单元: 这些页在高速缓存中一起老化,并且如果单元中的任何一页已在缓冲区 位于高速缓存中时发生更改,则所有页将作为一个单元写入磁盘。

请参见 《性能和调优系列:基础知识》的第 5 章 “内存使用和性能”。


image

注释 对大 I/O 的引用位于一台逻辑页大小为 2K 的服务器上。如果服 务器的逻辑页大小为 8K,则用于 I/O 的基本单位为 8K。如果服务器的 逻辑页大小为 16K,则用于 I/O 的基本单位为 16K

image


随着时间的推移,当存储变得分散时,堆表上的 I/O 效率会变低。删除 和更新操作可导致:

很多被部分填充的页

I/O 的效率低下,因为扩充可能包含很多空页

• DOL 锁定表中的转移行 在堆表内回收空间:

使用 reorg rebuild 命令 (仅限 DOL 锁定表)

创建并删除聚簇索引

使用 bcp (批量复制实用程序)和 truncate table


使用 reorg rebuild 回收空间

reorg rebuild 可将所有数据行复制到新页,并对堆表重建所有索引。可以 只对 DOL 锁定表使用 reorg rebuild


通过创建聚簇索引回收空间

要创建聚簇索引,数据库中必须至少有相当于表大小 120% 的可用空间。 请参见 104 页的 “确定维护活动的可用空间


使用 bcp 回收空间


要使用 bcp 回收空间:

1 使用 bcp 可将表复制到文件。

2 使用 truncate table 可截断表,以回收未使用的空间。

3 再次使用 bcp 将表复制回来。

有关使用分区表的详细信息,请参见 《Transact-SQL 用户指南》的 第 10 章 “对表和索引进行分区”。

有关 bcp 的详细信息,请参见 《实用程序指南》。


事务日志:一种特殊的堆表

Adaptive Server事务日志是一种特殊的堆表,用于存储数据库中有关数 据修改的信息。事务日志始终为堆表;每个新的事务记录被附加到日志 的结尾。事务日志不含索引。

将日志放置在与数据页和索引页不同的物理设备上。由于日志是有顺序 的,因此日志设备上的磁头很少需要执行搜索操作,日志可保持高的 I/O 率。

事务日志的写操作经常发生。不要让它们与数据库中其它的 I/O 出现争 用,这种争用通常发生在数据页上分散的位置处。

除恢复操作外,以下操作也可读取事务日志:

在延迟模式下执行的任何数据修改。

包含对插入表和删除表的引用的触发器。当查询表时,从事务日志 记录建立这些表。

事务回退。


多数情况下,当 Adaptive Server 需要读取这些查询的事务日志页时,这 些页仍位于数据高速缓存中,且不需要磁盘 I/O

有关如何提高事务日志性能的信息,请参见 5 页的 “将事务日志保存 在单独的磁盘上


堆表的异步预取和 I/O

必须执行物理 I/O 的所有任务在等待 I/O 完成的过程中都将释放服务器 的引擎 (CPU)。如果表扫描必须读取 1000 页,并且其中的任何页都不在 高速缓存中,则执行不进行异步预取的 2K I/O 意味着该任务需要在引擎 上执行 1000 次循环,然后进入休眠状态等待 I/O。使用 16K I/O 则只需 进行 125 次循环。

异步预取有助于提高用于执行表扫描的查询的性能。当任务从属于表的 分配单元上读取第一页时,异步预取可请求该分配单元上的所有页。如 果 1000 页表驻留在正好 4 个分配单元中,则任务需要很少的执行和休眠 循环的周期性循环。

image

image

I/O 的类型 循环 每个循环中的步骤

2K I/O

不预取


image

16K I/O

不预取

1000 1 请求一页。

2 休眠直至从磁盘读出该页。

3 请求一页。

4 等待在 Adaptive Server 引擎 (CPU) 上运行的时机。

5 读取页上的行。

125 1 请求一个扩充。

2 休眠直至从磁盘读出该扩充。

3 等待在 Adaptive Server 引擎 (CPU) 上运行的时机。

4 读取 8 页上的行。

image

预取 4 1 请求分配单元中的所有页。

2 休眠直至从磁盘读出第一页。

3 等待在 Adaptive Server 引擎 (CPU) 上运行的时机。

4 读取高速缓存中所有页上的所有行。

image


实际性能取决于高速缓存的大小和数据高速缓存中的其它活动。 请参见 《性能和调优系列:基础知识》的第 6 章 “调优异步预取”。




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从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等等。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------