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

 


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

Union 运算符


UNION ALL 运算符

UNION ALL 运算符合并几个兼容的输入数据流,但不执行任何重复项消 除操作。UNION ALL 运算符中的每个数据行将包括在该运算符的输出数 据流中。

UNION ALL 运算符是 n 元运算符,显示以下消息:

UNION ALL OPERATOR has N children.

N 是运算符中输入数据流的数量。 下列示例演示如何使用 UNION ALL

select * from sysindexes where id < 100 union all

select * from sysindexes where id > 200


QUERY PLAN FOR STATEMENT 1 (at line 1).

STEP 1

The type of query is SELECT.


3 operator(s) under root


|ROOT:EMIT Operator (VA = 3)

|

| |UNION ALL Operator (VA = 2) has 2 children.

| |


| | |SCAN Operator (VA = 0)

| | | FROM TABLE

| | | sysindexes

| | | Using Clustered Index.

| | | Index : csysindexes

| | | Forward Scan.

| | | Positioning by key.

| | | Keys are:

| | | id ASC

| | | Using I/O Size 2 Kbytes for index leaf pages.

| | | With LRU Buffer Replacement Strategy for index leaf pages.

| | | Using I/O Size 2 Kbytes for data pages.

| | | With LRU Buffer Replacement Strategy for data pages.


| |

| | |SCAN Operator (VA = 1)

| | | FROM TABLE

| | | sysindexes

| | | Using Clustered Index

| | | Index : csysindexes

| | | Forward scan.

| | | Positioning by key.

| | | Keys are:

| | | id ASC

| | | Using I/O Size 2 Kbytes for index leaf pages.

| | | With LRU Buffer Replacement Strategy for index leaf pages.

| | | Using I/O Size 2 Kbytes for data pages.

| | | With LRU Buffer Replacement Strategy for data pages.


UNION ALL 运算符以从其最左侧的子运算符获取所有行开始。在上述示 例中,返回的所有 sysindexes 行的 ID 均小于 100。因为每个子运算符的 数据流已清空,所以 UNION ALL 运算符会立即移动到其右侧的子运算 符。将打开并清空此数据流。此操作会继续直到最后一个 (第 N 个) 子运算符被清空。


MERGE UNION 运算符

MERGE UNION 运算符对几个已排序的兼容数据流执行 UNION ALL 操作, 并消除这些数据流中的重复项。

MERGE UNION 运算符是 n 元运算符,显示以下消息:

MERGE UNION OPERATOR has <N> children.

<N> 是运算符中输入数据流的数量。


HASH UNION


HASH UNION 运算符使用 Adaptive Server 散列算法来对几个数据流同时 执行 UNION ALL 操作,它还执行基于散列的重复项消除。

HASH UNION 运算符是 n 元运算符,显示以下消息:

HASH UNION OPERATOR has <N> children.

<N> 是运算符中输入数据流的数量。


HASH UNION 还显示它所使用的工作表的名称,其格式如下:

HASH UNION OPERATOR Using Worktable <X> for internal storage.

HASH UNION 使用此工作表来临时存储无法在当前可用内存中处理的当 前迭代的数据。

下列示例演示如何使用 HASH UNIONselect * from sysindexes

union

select * from sysindexes

QUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1

The type of query is SELECT.


3 operator(s) under root


| ROOT:EMIT Operator (VA = 3)

|

| |HASH UNION Operator has 2 children.

| | Using Worktable1 for internal storage.

| |

| | |SCAN Operator

| | | FROM TABLE

| | | sysindexes

| | | Table Scan.

| | | Forward Scan.

| | | Positioning at start of table.

| | | Using I/O Size 2 Kbytes for data pages.

| | | With LRU Buffer Replacement Strategy for data pages.

| |

| |SCAN Operator (VA = 1)

| | | FROM TABLE

| | | sysindexes

| | | Table Scan.

| | | Forward Scan.

| | | Positioning at start of table.

| | | Using I/O size 2 Kbytes for data pages.

| | | With LRU Buffer Replacement Strategy for data pages.


SCALAR AGGREGATE 运算符

SCALAR AGGREGATE 运算符跟踪有关输入数据流的运行信息,如数据流 中的行数,或数据流中给定列的最大值。

SCALAR AGGREGATE 运算符输出一个列表,其中最多包含 10 条描述它所 执行的标量集合操作的消息。消息的格式如下:

Evaluate Ungrouped <Type of Aggregate> Aggregate

< Type of Aggregate > 可以是以下任一种类型:countsumaverageminmaxanyonce-uniquecount-uniquesum-uniqueaverage-unique once

以下查询对数据库 pubs2 中的 authors 表执行 SCALAR AGGREGATE (即解 压缩)集合:

select count(*) from authors

QUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1

The type of query is SELECT.


2 operator(s) under root ROOT:EMIT Operator (VA = 2)

|SCALAR AGGREGATE Operator (VA = 1)

| Evaluate Ungrouped COUNT AGGREGATE.

|

| |SCAN Operator (VA =0)

| | FROM TABLE

| | authors

| | Index : aunmind

| | Forward Scan.

| | Positioning at index start.

| | Index contains all needed columns. Base table will not be read.

| | Using I/O Size 4 Kbytes for index leaf pages.

| | With LRU Buffer Replacement Strategy for index leaf pages.


SCALAR AGGREGATE 消息指出要执行的查询是拆组 count 集合。


RESTRICT 运算符


RESTRICT 运算符是根据列值计算表达式的一元运算符。 RESTRICT 运 算符与多个列求值列表相关,可以在从子运算符获取行之前处理这些列 表,也可以在从子运算符获取行之后处理,还可以在从子运算符获取行 之后处理它们以计算虚拟列的值。


SORT 运算符


SORT 运算符在查询计划中只有一个子运算符。它的作用是使用指定的 排序键从输入数据流生成输出数据流。

SORT 运算符可能执行数据流排序,但也有可能必须将结果临时存入工 作表中。 SORT 运算符按下列格式显示工作表的名称:

Using Worktable<N> for internal storage.

其中, < N > 是工作表在 showplan 输出中的数字标识符。 下面是使用 SORT 运算符和工作表的简单查询计划的示例:

select au_id from authors order by postalcode QUERY PLAN FOR STATEMENT 1 (at line 1).

STEP 1

The type of query is SELECT.


2 operator(s) under root ROOT:EMIT Operator (VA = 2)

|SORT Operator (VA = 1)

| Using Worktable1 for internal storage.

|

| |SCAN Operator (VA = 0)

| | FROM TABLE

| | authors

| | Table Scan.

| | Forward Scan.

| | Positioning at start of table.

| | Using I/O Size 4 Kbytes for data pages.

| | With LRU Buffer Replacement Strategy for data pages.


SORT 运算符读取其子运算符并对行排序。在这种情况下,它将使用 postalcode 属性对从 authors 表获取的每一行进行排序。如果所有行均可 以放入内存,则没有数据会溢出到磁盘上。但是,如果输入数据的大小 超过可用缓冲区空间,则排序行会溢出到磁盘上。这些排序行会递归合 并到较大的排序行中,直到排序行大小比用于读取和合并这些行的缓冲 区小。


STORE 运算符


STORE 运算符用于创建和填充工作表,也可以在工作表上创建索引。 作为查询计划执行的一部分,该工作表可由计划中的其它运算符使用。 SEQUENCER 运算符可确保先执行与工作表和潜在索引创建相对应的计划 片段,然后再执行使用该工作表的其它计划片段。由于执行过程是异步 运行的,因此这在并行执行计划时很重要。

重新格式化策略使用 STORE 运算符创建包含聚簇索引的工作表。 如果 STORE 运算符用于重新格式化操作,它会输出以下消息:

Worktable <X> created, in <L> locking mode for reformatting.

锁定模式 < L > 必须是 “allpages”、“datapages”、“datarows”中的一个。

STORE 运算符也会输出以下消息:

Creating clustered index.

如果 STORE 运算符不用于重新格式化操作,它会输出以下消息:

Worktable <X> created, in <L> locking mode.

以下示例适用于 STORE 运算符以及 SEQUENCER 运算符。

select * from bigun a, bigun b where a.c4 = b.c4 and a.c2 < 10


QUERY PLAN FOR STATEMENT 1 (at line 1).

Optimized using the Abstract Plan in the PLAN clause.


STEP 1

The type of query is SELECT.


7 operator(s) under root


|ROOT:EMIT Operator (VA = 7)

|

| |SEQUENCER Operator (VA = 6) has 2 children.

| |


|

|

|STORE Operator (VA = 5)

|

|

| Worktable1 created, in allpages locking mode, for REFORMATTING.

|

|

| Creating clustered index.

|

|

|

|

|

| |INSERT Operator(VA = 4)

|

|

| | The update mode is direct.

|

|

| |

|

|

| | |SCAN Operator(VA = 0)

|

|

| | | FROM TABLE

|

|

| | | bigun

|

|

| | | b

|

|

| | | Table Scan.

|

|

| | | Forward Scan.

|

|

| | | Positioning at start of table.

|

|

| | | Using I/O Size 2 Kbytes for data pages.

|

|

| | | With LRU Buffer Replacement Strategy for data pages.

|

|

| |

|

|

| | TO TABLE (VA = 3)

|

|

| | Worktable1.

|

|

|

|

|NESTED LOOP JOIN (Join Type:Inner Join)(VA = 7)

|

|

|

|

|

| |SCAN Operator (VA = 2)

|

|

| | FROM TABLE

|

|

| | bigun

|

|

| | a

|

|

| | Table Scan.

|

|

| | Forward Scan.

|

|

| | Positioning at start of table.

|

|

| | Using I/O Size 2 Kbytes for data pages.

|

|

| | With LRU Buffer Replacement Strategy for data pages.

|

|

|

|

|

| |SCAN Operator (VA = 1)

|

|

| | FROM TABLE

|

|

| | Worktable1.

|

|

| | Using Clustered Index.

|

|

| | Forward Scan.

|

|

| | Positioning key.

|

|

| | Using I/O Size 2 Kbytes for data pages.

|

|

| | With LRU Buffer Replacement Strategy for data pages.

在上述计划示例中,在重新格式化策略中使用了 STORE 运算符。它位于

SEQUENCER 运算符的最左侧子运算符中的 SEQUENCER 运算符的正下方。

STORE 运算符将创建 Worktable1,它下面的 INSERT 运算符将填充该工作 表。 STORE 运算符然后将在 Worktable1 上创建聚簇索引。该索引将建立 在连接键 b.c4 上。


SEQUENCER 运算符

SEQUENCER 运算符是 n 元运算符,用来按顺序执行它下面的各个子计 划。 SEQUENCER 运算符用于 reformatting 计划及某些集合处理计划。

除最右侧的子计划之外, SEQUENCER 运算符将执行其子运算符的每个子 计划。在执行所有左子运算符的子计划后,它将执行最右侧的子计划。

SEQUENCER 运算符将显示以下消息:

SEQUENCER operator has N children.

select * from tab1 a, tab2 b where a.c4 = b.c4 and a.c2 < 10 QUERY PLAN FOR STATEMENT 1 (at line 1).

Optimized using the Abstract Plan in the PLAN clause.


STEP 1

The type of query is SELECT.


7 operator(s) under root


|ROOT:EMIT Operator (VA = 7)

|

| |SEQUENCER Operator (VA = 6) has 2 children.

| |

| | |STORE Operator (VA = 5)

| | | Worktable1 created, in allpages locking mode, for REFORMATTING.

| | | Creating clustered index.

| | |

| | | |INSERT Operator (VA = 4)

| | | | The update mode is direct.

| | | |

| | | | |SCAN Operator (VA = 0)

| | | | | FROM TABLE

| | | | | tab2

| | | | | b

| | | | | Table Scan.

| | | | | Forward Scan.

| | | | | Positioning at start of table.

| | | | | Using I/O Size 2 Kbytes for data pages.

| | | | | With LRU Buffer Replacement Strategy for data pages.

| | | |

| | | | TO TABLE

| | | | Worktable1.

| |

| | |NESTED LOOP JOIN Operator (Join Type:Inner Join) (VA = 3)

| | |


| | | |SCAN Operator (VA = 2)

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

FROM TABLE

tab1 a

Table Scan. Forward Scan.

Positioning at start of table.

Using I/O Size 2 Kbytes for data pages.

With LRU Buffer Replacement Strategy for data pages.

| | | |SCAN Operator (VA = 1)

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

|

FROM TABLE

Worktable1.

Using Clustered Index. Forward Scan.

Positioning by key.

Using I/O Size 2 Kbytes for


data pages.

|

|

|

|

With LRU Buffer Replacement

Strategy for data pages.

在上述示例中, SEQUENCER 运算符实施重新格式化策略。 SEQUENCER 运算符的最左侧的分支将在 Worktable1 上创建聚簇索引。在执行并关闭 此分支之后, SEQUENCER 运算符才能继续下一个子运算符。 SEQUENCER 运算符到达最右侧的子运算符后,即会打开并开始清除它,将行返回到 其父运算符。 SEQUENCER 运算符的设计意图是,使最右侧分支中的运 算符能够使用在 SEQUENCER 运算符的先前外部分支中创建的工作表。在 此示例中, Worktable1 用于嵌套循环连接策略。 Worktable1 的扫描由来 自 tab1 的外部扫描的每一行的聚簇索引上的键定位。


REMOTE SCAN 运算符

REMOTE SCAN 运算符将 SQL 查询发送给远程服务器进行执行。然后, 它将处理由远程服务器返回的结果 (如果有)。 REMOTE SCAN 显示它 所处理的 SQL 查询的格式化文本。

REMOTE SCAN 没有子运算符,或有 1 个子运算符。


SCROLL 运算符


SCROLL 运算符封装 Adaptive Server 中可滚动游标的功能。可滚动游标 可能处于 insensitive 状态,这意味着它们将显示在打开游标时拍摄的与 其相关的数据的快照;可滚动游标也可能处于 semi-sensitive 状态,这意 味着将从活动数据检索要获取的下一行或几行。

SCROLL 运算符是一元运算符,显示以下消息:

SCROLL OPERATOR ( Sensitive Type:< T >) 类型可能是 insensitive semi-sensitive。 以下是具有 insensitive 可滚动游标的计划示例:

declare CI insensitive scroll cursor for select au_lname, au_id from authors

go

set showplan on go

open CI

QUERY PLAN FOR STATEMENT 1 (at line 1). STEP 1

The type of query is OPEN CURSOR CI.


QUERY PLAN FOR STATEMENT 1 (at line 2). STEP 1

The type of query is DECLARE CURSOR.


2 operator(s) under root ROOT:EMIT Operator (VA = 2)

|SCROLL Operator (Sensitive Type: Insensitive) (VA = 1)

| Using Worktable1 for internal storage.

|

| |SCAN Operator (VA = 0)

| | FROM TABLE

| | authors

| | Table Scan.

| | Forward Scan.

| | Positioning at start of table.

| | Using I/O Size 4 Kbytes for data pages.

| | With LRU Buffer Replacement Strategy for data pages.


SCROLL 运算符是根 EMIT 运算符的子运算符,其唯一子运算符是 authors

表上的 SCAN 运算符。 SCROLL 消息指定 CI 游标处于 insensitive 状态。

可滚动游标行最初高速缓存在内存中。如果所处理的数据量超过高速缓 存的物理内存限制,则 Worktable1 将用作此高速缓存的后备存储。


RID JOIN 运算符


RID JOIN 运算符是二元运算符,基于为相同源表生成的行 ID 来连接两 个数据流。 SQL 表中的各数据行与唯一的行 ID (RID) 相关。可将 RID 连接看作是特殊情形下的自连接查询。左子运算符使用一组唯一限定 RID 来填充工作表。 RID 是将不同的过滤器应用到从相同源表的两个或 多个不同的索引用例中返回的 RID 的结果。

RID JOIN 运算符用于执行常规 or 策略。该常规 - or 策略经常在查询的谓 词包含可由相同表上的不同索引限定的分离集合时使用。在这种情况下, 将基于可由该索引限定的谓词对每个索引进行扫描。针对限定的每个索 引行,将返回 RID

将对返回的 RID 进行唯一性处理,以便同一行不会返回两次 (如果两 个或多个分离限定同一行,则可能发生此情况)。

RID JOIN 运算符将唯一 RID 插入工作表。唯一 RID 的工作表传递给 RID 连接右侧分支中的 scan 运算符。访问方法可通过迭代方式直接从工 作表获取要处理的下一个 RID,并查找关联行。然后,该行返回到 RID JOIN 父运算符。

RID JOIN 运算符将显示以下消息:

Using Worktable < N > for internal storage. 此工作表用于存储从左子运算符生成的唯一 RID。 以下示例阐明 RID JOIN 运算符的 showplan 输出。

select * from tab1 a where a.c1 = 10 or a.c3 = 10 QUERY PLAN FOR STATEMENT 1 (at line 2).

STEP 1

The type of query is SELECT.


6 operator(s) under root.


|ROOT:EMIT Operator (VA = 6)

|

| |RID JOIN Operator (VA = 5)


| | Using Worktable2 for internal storage.

| |

| | |HASH UNION Operator (VA = 6) has 2 children.

| | | Key Count: 1

| | |

| | | |SCAN Operator (VA = 0)

| | | | FROM TABLE

| | | | tab1

| | | | a

| | | | Index: tab1idx

| | | | Forward Scan.

| | | | Positioning by key.

| | | | Index contains all needed columns. Base table will not be read.

| | | | Keys are:

| | | | c1 ASC

| | | | Using I/O Size 2 Kbytes for index leaf pages.

| | | | With LRU Buffer Replacement Strategy for index leaf pages.

| | |

|

|

|

|

FROM TABLE

|

|

|

|

tab1

|

|

|

|

a

|

|

|

|

Index: tab1idx2

|

|

|

|

Forward Scan.

|

|

|

|

Positioning by key.

|

|

|

|

Index contains all needed columns. Base table will not be r

|

|

|

|

Keys are:

|

|

|

|

c3 ASC

|

|

| | Using I/O Size 2 Kbytes for index leaf pages.

|

|

| | With LRU Buffer Replacement Strategy for index leaf pages.

|

|

|

|

|RESTRICT Operator (VA = 3)

|

|

|

|

|

| |SCAN Operator (VA = 2)

|

|

|

|

FROM TABLE

|

|

|

|

tab1

|

|

|

|

a

|

|

|

|

Using Dynamic Index.

|

|

|

|

Forward Scan.

|

|

|

|

Positioning by Row IDentifier (RID).

|

|

|

|

Using I/O Size 2 Kbytes for data pages.

|

|

|

|

With LRU Buffer Replacement Strategy for data pages.

|

|

|

|

FROM TABLE

|

|

|

|

tab1

|

|

|

|

a

|

|

|

|

Index: tab1idx2

|

|

|

|

Forward Scan.

|

|

|

|

Positioning by key.

|

|

|

|

Index contains all needed columns. Base table will not be r

|

|

|

|

Keys are:

|

|

|

|

c3 ASC

|

|

| | Using I/O Size 2 Kbytes for index leaf pages.

|

|

| | With LRU Buffer Replacement Strategy for index leaf pages.

|

|

|

|

|RESTRICT Operator (VA = 3)

|

|

|

|

|

| |SCAN Operator (VA = 2)

|

|

|

|

FROM TABLE

|

|

|

|

tab1

|

|

|

|

a

|

|

|

|

Using Dynamic Index.

|

|

|

|

Forward Scan.

|

|

|

|

Positioning by Row IDentifier (RID).

|

|

|

|

Using I/O Size 2 Kbytes for data pages.

|

|

|

|

With LRU Buffer Replacement Strategy for data pages.

| | | |SCAN Operator (VA = 4)


ead.


在上述示例中,扫描索引 tab1idx 以从 c1 值为 10 tab1 中获取所有 RIDAdaptive Server 将扫描 tab1idx2 以从 c3 值为 10 tab1 中获取所有 RID


HASH UNION 运算符用于消除重复的 RID。其中 c1 c3 行的值均为 10

的任何 tab1 行都存在重复的 RID

RID JOIN 运算符将所有返回的行均插入 Worktable2。在其完全填满之后, Worktable2 将传递到 tab1 的扫描。访问方法获取第一个 RID,查找关联 行,并将其返回到 RID JOIN 运算符。在后续调用 tab1 的扫描运算符时, 访问方法将获取要处理的下一个 RID 并返回其关联行。


SQLFILTER 运算符

SQLFILTER 运算符是执行子查询的 n 元运算符。它最左边的子运算符 代表外部查询,其它子运算符代表与一个或多个子查询相关的查询计 划片段。

最左侧的子运算符生成将代入其它子计划的相关值。

SQLFILTER 运算符将显示以下消息:

SQFILTER Operator has <N> children.

以下示例说明 SQLFILTER 的用法:

select pub_name from publishers where pub_id =

(select distinct titles.pub_id from titles where publishers.pub_id = titles.pub_id and price > $1000)

QUERY PLAN FOR STATEMENT 1 (at line 1).

4 operator(s) under root


STEP 1

The type of query is SELECT.


4 operator(s) under root ROOT:EMIT Operator (VA = 4)

|SQFILTER Operator (VA = 3) has 2 children.

|

| |SCAN Operator (VA = 0)

|

|

FROM TABLE

|

|

publishers

|

|

Table Scan.

|

|

Forward Scan.

|

|

Positioning at start of table.

|

|

Using I/O Size 8 Kbytes for data pages.


| | With LRU Buffer Replacement Strategy for data pages.

|

| Run subquery 1 (at nesting level 1)

|

| QUERY PLAN FOR SUBQUERY 1 (at nesting level 1 and at line 3)

|

| Correlated Subquery

| Subquery under an EXPRESSION predicate.

|

| |SCALAR AGGREGATE Operator (VA = 2)

| | Evaluate Ungrouped ONCE-UNIQUE AGGREGATE

| |

| | |SCAN Operator (VA = 1)

| | | FROM TABLE

| | | titles

| | | Table Scan.

| | | Forward Scan.

| | | Postitioning at start of table.

| | | Using I/O Size 8 Kbytes for data pages.

| | | With LRU Buffer Replacement Strategy for data pages.

|

| END OF QUERY PLAN FOR SUBQUERY 1

在上述示例中, SQLFILTER 运算符有两个子运算符。最左侧的子运算 符是查询的外部块。它是 publishers 表的简单扫描。右子运算符用于对 查询的子查询求值。 SQLFILTER 从外部块获取行。针对来自外部块的 每一行, SQLFILTER 调用右子运算符来对子查询求值。如果子查询求 值为 TRUE,将向 SQLFILTER 的父运算符返回一行。


EXCHANGE 运算符

EXCHANGE 运算符是一元运算符,可封装 Adaptive Server SQL 查询的并 行处理。 EXCHANGE 几乎可以位于查询计划中的任何位置,并将查询计 划分为计划片段。计划片段是一个查询计划树,其根为 EMIT EXCHANGE:EMIT 运算符和其叶为 SCAN EXCHANGE 运算符。串行计划 是由单个进程执行的计划片段。

EXCHANGE 运算符的子运算符始终是 EXCHANGE:EMIT 运算符。 EXCHANGE:EMIT 是新计划片段的根。 EXCHANGE 运算符具有相关联的称 为 Beta 进程的服务器进程,该 Beta 进程用作 EXCHANGE 运算符的工作进 程的本地执行事务协调器。工作进程根据父 EXCHANGE 运算符及其 Beta 进程的指示执行计划片段。通常使用两个或多个进程以并行方式执行计 划片段。 EXCHANGE 运算符和 Beta 进程可协调活动,包括片段边界之间 的数据交换。


最顶层的计划片段 (根为 EMIT 运算符,而不是 EXCHANGE:EMIT 运算 符)由 Alpha 进程执行。 Alpha 进程是与用户连接相关的消耗程序进程。 Alpha 进程是所有查询计划的工作进程的全局事务协调器。它负责初步 设置所有计划片段的工作进程并最终将其冻结。在例外的情况下,它管 理并协调所有片段的工作进程。

EXCHANGE 运算符显示以下消息:

Executed in parallel by N producer and P consumer processes.

生产者数量是指执行 EXCHANGE 运算符下面的计划片段的工作进程数。 消耗程序数量是指执行包含 EXCHANGE 运算符的计划片段的工作进程 数。消耗程序处理生产者传递给它们的数据。数据通过 EXCHANGE 运算 符中设置的管道在生产者和消耗程序进程之间进行交换。当消耗程序从 该管道读取行时,生产者的 EXCHANGE:EMIT 运算符会将这些行写入管 道。管道机制可同步生产者写入和消耗程序读取,以便不丢失数据。

以下示例说明 master 数据库中对系统表 sysmessages 进行的并行查询:

use master go

set showplan on go

select count(*) from sysmessages t1 plan '(t_scan t1) (prop t1 (parallel 4))


QUERY PLAN FOR STATEMENT 1 (at line 1).

Optimized using the forced options (internally generated Abstract Plan). Executed in parallel by coordinating process and 4 worker processes.


4 operator(s) under root

The type of query is SELECT. ROOT:EMIT Operator

|SCALAR AGGREGATE Operator

| Evaluate Ungrouped COUNT AGGREGATE.

|

| |EXCHANGE Operator

| |Executed in parallel by 4 Producer and 1 Consumer processes.


|

|

|

|

|EXCHANGE:EMIT Operator

|

|

|

|

|

| |SCAN Operator

|

|

| | FROM TABLE

|

|

| | sysmessages

|

|

| | Table Scan.


|

|

|

|

Forward Scan.

|

|

|

|

Positioning at start of table.

|

|

|

|

Executed in parallel with a

4-way hash scan.

|

|

|

|

Using I/O Size 4 Kbytes for

data pages.

|

|

|

|

With LRU Buffer Replacement

Strategy for data pages.

上述示例中有两个计划片段。第一个片段在任何计划中不论是否并行, 始终以 EMIT 运算符为根。上述示例中的第一个片段由 EMITSCALAR AGGREGATE EXCHANGE 运算符组成。此第一个片段始终由单个 Alpha 进程执行。在上述示例中,它也充当 Beta 进程,负责管理 EXCHANGE 运 算符的工作进程。

第二个计划片段的根为 EXCHANGE:EMIT 运算符。其唯一的子运算符是 SCAN 运算符。 SCAN 运算符负责扫描 sysmessages 表。该扫描以并行方 式执行:

Executed in parallel with a 4-way hash scan

这表明每个工作进程负责扫描表的大约四分之一。基于所拥有的数据页

ID 将页分配给工作进程。

EXCHANGE:EMIT 运算符通过写入由其父 EXCHANGE 运算符创建的管道来 将数据行写入消耗程序。在上述示例中,管道是四比一式的多路复用 器,包括多种可实现完全不同的行为的管道类型。




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