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

 


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

Lava 查询执行引擎

Adaptive Server 中,所有查询计划都提交给过程执行引擎来执行。过 程执行引擎通过以下方式推动查询计划的执行:

直接执行诸如 setwhile goto 这类简单的 SQL 语句。

调用查询计划的实用程序模块,以执行 create tablecreate index 和 其它实用程序命令。

为存储过程和触发器设置上下文并推动其执行。

设置执行环境并调用查询执行引擎,以便为 selectinsertdelete

update 语句执行查询计划。

为游标 openfetch close 语句设置游标执行环境,并调用查询执 行引擎来执行这些语句。

进行事务处理和执行后清除。

为支持当今的应用需求, Adaptive Server 15.0 及更高版本的查询执行引 擎已被彻底重写。采用新的查询执行引擎和查询优化程序后, Adaptive Server 15.0 及更高版本中的过程执行引擎能够将新的查询优化程序生成 的所有查询计划都传送给 Lava 查询执行引擎。

Lava 查询执行引擎执行 Lava 查询计划。优化程序选取的所有查询计划 都编译到 Lava 查询计划中。但是,那些没有优化的 SQL 语句,例如 set create 将编译到如同 Adaptive Server 15.0 之前的版本中那样的查询计 划中,并且不由 Lava 查询执行引擎执行。非 Lava 查询计划由过程执行 引擎执行,或者由过程引擎调用的实用程序模块执行。 Adaptive Server 15.0 及更高版本具有两种独特的查询计划,可以在 showplan 输出中清楚 地看到这一点 (请参见 3 章 “显示查询优化策略和估计值 )。


Lava 查询引擎


Lava 运算符树颠倒过来,便成为 Lava 查询计划:顶 Lava 运算符可具 有一个或多个子运算符,子运算符又可具有一个或多个下一级子运算符, 依此类推,最终形成一个 “自下而上”的运算符树。树的确切形状及 其中的运算符由优化程序选择。

1-2 给出了以下查询的一个 Lava 查询计划示例:

Select o.id from sysobjects o, syscolumns c where o.id <= 1 and o.id < 2


image

1-2Lava 查询计划


Emit


NestedLoopJoin


image

IndexScan sysobjects(o)

image

IndexScan syscolumns(c)


该查询的 Lava 查询计划由四个 Lava 运算符组成。顶运算符为 Emit (也 叫 Root)运算符,它通过将行发送到客户端或通过为局部变量赋值来分 派查询执行结果。

Emit 的唯一子运算符是 NestedLoopJoin (NL Join) ,它使用嵌套循环连 接算法连接来自它的两个子运算符的行,这两个子运算符分别是: (1) sysobjects 扫描和 (2) syscolumns 扫描。

由于优化程序优化所有 selectinsertdelete update 语句,因此,它 们始终会被编译到 Lava 查询计划中,并由 Lava 查询引擎执行。

有些 SQL 语句编译到混合查询计划中。这类计划具有多个步骤,其中有 些步骤由 “实用程序”模块执行,而其最后一步是一个 Lava 查询计划。 例如 select into 语句; select into 被编译到一个总共两步的查询计划中:

create table 创建该语句的目标表。

一个 Lava 查询计划,用来将行插入目标表中。为执行该查询计划, 过程执行引擎调用 create table 实用程序来执行第一步,以创建表。

然后,过程引擎调用 Lava 查询执行引擎来执行 Lava 查询计划,以选择 行并将其插入目标表中。

另外两个生成混合查询计划的 SQL 语句是 alter table (仅在需要复制数 据时使用)和 reorg rebuild


同时还会生成和执行一个 Lava 查询计划以支持 bcpAdaptive Server 中 对 bcp 的支持始终存在于 bcp 实用程序中。如今,在 15.0 及更高版本 中, bcp 实用程序可生成一个 Lava 查询计划,并调用 Lava 查询执行引 擎来执行该计划。

有关 Lava 查询计划的更多示例,请参见第 2 章 “使用 showplan”。


Lava 运算符


Lava 查询计划由 Lava 运算符构成。每个 Lava 运算符都是一个独立的软 件对象,该对象可实现优化程序用来建立查询计划的某个基本物理操 作。每个 Lava 运算符包含五种方法,这些方法可被其父运算符调用。 这五种方法对应于查询执行的五个阶段:

Acquire

Open

Next

Close

Release

因为 Lava 运算符全都提供相同的方法 (即 API 相同),因此它们可以 互换,就像 Lava 查询计划中的构件块一样。例如,可以将 1-2 中的 NLJoin 运算符替换为 MergeJoin 运算符或 HashJoin 运算符,而不会对查 询计划中的任何其它三个运算符造成影响。

1-3 中列出了优化程序可选择用来建立 Lava 查询计划的 Lava 运算符:

1-3Lava 运算符

image

运算符 说明

BulkOp 执行在 Lava 查询引擎中完成的 bcp 处理部分。只能在 bcp 实用程序而非优化程 序创建的查询计划中找到。

CacheScanOp 读取内存中表中的行。

DelTextOp 作为 alter table drop 列处理的一部分,删除 text 页链。

DeleteOp 删除本地表中的行。

当整个 SQL 语句无法传送到远程服务器上时,删除代理表中的行。另请参见

RemoteScanOp

EmitOp (RootOp) 路由查询执行结果行。可发送结果到客户端,或将结果值赋给局部变量或 fetch into 变量。 EmitOp 始终是 Lava 查询计划中的顶运算符。

EmitExchangeOp 将并行执行的子计划的结果行路由到父计划片段中的 ExchangeOpEmitExchangeOp 总是直接出现在 ExchangeOp 下。请参见 5 章 “并行查询 处理

image


运算符 说明

GroupSortedOp (Aggregation)

当输入行已在 group-by 列上排序时,执行矢量集合 ( group by )。另请参见 HashVectorAggOp

GroupSorted (Distinct) 删除重复行。要求在所有列上排序输入行。另请参见 HashDistinctOp SortOp (Distinct)

HashVectorAggOp 执行矢量集合 (group by) 。使用 Hash 算法对输入行分组,因此,对输入行顺序 无要求。另请参见 GroupSortedOp (Aggregation)

HashDistinctOp 使用可查找重复行的散列算法删除重复行。另请参见 GroupSortedOp (Distinct)

SortOp (Distinct)

HashJoinOp 使用 HashJoin 算法执行两个输入行流的 join

HashUnionOp 使用可查找和消除重复行的散列算法执行两个或多个输入行流的 union 操作。 另请参见 MergeUnionOp UnionAllOp

InsScrollOp 实现所需的额外处理,以支持不敏感的可滚动游标。另请参见 SemiInsScrollOpInsertOp 将行插入本地表。

当整个 SQL 语句无法传送到远程服务器上时,在代理表中插入行。另请参见

RemoteScanOp

MergeJoinOp 使用 mergejoin 算法,对在连接列上排序的两个行流执行 join

MergeUnionOp 对两个或多个排序的输入流执行 union union all 操作。确保输出流保持输入流 的顺序。另请参见 HashUnionOp UnionAllOp

NestedLoopJoinOp 使用 NestedLoopJoin 算法执行两个输入流的连接。

NaryNestedLoopJoinOp 使用增强的 NestedLoopJoin 算法执行三个或更多输入流的连接。该运算符可取 代 NestedLoopJoin 运算符的深度左树,如果可以跳过某些输入流的行,则可显 著提高性能。

OrScanOp in or 值插入内存中的表,对这些值进行排序,并删除重复值。然后返回这些 值,一次一个。只用于以下 SQL 语句:在同一列上具有 in 子句或多个 or 子句。

PtnScanOp 通过表扫描或索引扫描来访问行,从而读取本地表 (不考虑是否分区)中的行。

RIDJoinOp 从其左侧的子运算符接收一个或多个行标识符 (RID),并调用其右侧的子运算符 ( PtnScanOp ) 来查找相应行。仅用于在同一表的不同列上具有 or 子句的 SQL 语句。

RIFilterOp (Direct) 推动子计划的执行,以强制实施可逐行检查的参照完整性约束。 只出现在对具有参照完整性约束的表的 insertdelete update 查询中。

RIFilterOp (Deferred) 推动子计划的执行,以强制实施只能在处理完受查询影响的所有行后才能检查 的参照完整性约束。

RemoteScanOp 访问代理表。 RemoteScanOp 可以:

从单个代理表读取行,以便通过本地主机上的 Lava 查询计划做进一步的处理。

将完整的 SQL 语句传递到远程主机以执行:insertdeleteupdate select 语 句。在这种情况下, Lava 查询计划由一个 EmitOp 组成,它将 RemoteScanOp 作为其唯一的子运算符。

将任意复杂查询计划片段传递到远程主机,以便执行并读取结果行 (函数 传递)。

RestrictOp 对表达式求值。


image

运算符 说明

SQFilterOp 推动子计划的执行,以执行一个或多个子查询。

ScalarAggOp 执行标量集合,例如没有 group by 的集合。

SemiInsScrollOp 执行额外处理,以支持半不敏感的可滚动游标。另请参见 InsScrollOp SequencerOp 强制查询计划中不同的子计划有序执行。

SortOp 基于指定键排序其输入行。

SortOp (Distinct) 对其输入进行排序并删除重复行。另请参见 HashDisitnctOp GroupSortedOp (Distinct)

StoreOp 创建并协调工作表填充,如果需要,在工作表上创建聚簇索引。 StoreOp 只能 有一个 InsertOp 作为子运算符; InsertOp 填充工作表。

UnionAllOp 对两个或更多输入流执行 union all 操作。另请参见 HashUnionOp MergeUnionOp UpdateOp 当无法将整个 update 语句发送到远程服务器时,更改本地表或代理表的行中的

列值。另请参见 RemoteScanOp

ExchangeOp 启用并协调 Lava 查询计划的并行执行。可在查询计划的几乎任何两个 Lava 运 算符之间插入 ExchangeOp ,以便将计划分成可并行执行的多个子计划。请参见 5 章 “并行查询处理


Lava 查询执行


可以分五个阶段执行 Lava 查询计划:

1 Acquire — 获得执行计划所需的资源,例如内存缓冲区,并创建工 作表。

2 Open — 准备返回结果行。

3 Next — 生成下一个结果行。

4 Close — 进行清理;例如,通知访问层扫描已完成或截断工作表

5 Release — 释放在 “Acquire”阶段获得的资源,例如内存缓冲区, 并删除工作表。

每个 Lava 运算符都具有一个与阶段同名的方法,将为每一个阶段调用 该方法。

19 页的图 1-2 演示了查询计划执行过程:

• Acquire 阶段

调用 Emit 运算符的 Acquire 方法。 Emit 运算符调用其 NLJoin 子运算符 的 Acquire 方法,后者反过来在其左侧的子运算符 (sysobjects 的索引 扫描)上调用 Acquire 方法,然后在其右侧的子运算符 (syscolumns 的索引扫描)上调用 Acquire 方法。


• Open 阶段

调用 Emit 运算符的 Open 方法。 Emit 运算符调用 NLJoin 运算符的

Open 方法,后者只调用其左侧子运算符的 Open 方法。

• Next 阶段

调用 Emit 运算符的 Next 方法。Emit 调用 NLJoin 运算符的 Next 方法, 后者调用其左侧子运算符 (sysobjects 的索引扫描)的 Next 方法。索 引扫描运算符从 sysobjects 中读取第一行,并将其返回给 NLJoin 运算 符。然后, NLJoin 运算符调用其右侧的子运算符 (syscolumns 的索 引扫描)的 Open 方法。接下来, NLJoin 运算符调用 syscolumns 的 索引扫描的 Next 方法,以获得与 sysobjects 中行的连接键匹配的行。 如果已找到匹配行,则将其返回给 Emit 运算符,后者再将其发送回 客户端。重复调用 Emit 运算符的 Next 方法会生成更多结果行。

• Close 阶段

返回所有行后,调用 Emit 运算符的 Close 方法,后者又会调用 NLJoin

运算符的 Close 方法,而这又会调用其两个子运算符的 Close 方法。

• Release 阶段

调用 Emit 运算符的 Release 方法,对其它运算符的 Release 方法的调 用沿查询计划传播。

成功执行 Release 阶段后,Lava 查询引擎将控制权交还给过程执行引擎, 以便进行最后的语句处理。




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