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

 


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

代理表


代理表是实现位置透明度的关键所在。代理表是包含指向远程对象的元 数据的本地表。有关远程对象的信息,请参见 4 页的 “对象类型。 远程表映射到代理表,以使该远程表以本地表的形式出现。

3 章 “ SQL 参考”中完整描述了如何执行这一操作。


使用 create table 命令

create table 命令使用以下语法同时创建代理表和远程表:

create table table_name (column_list) [ [ external {table | file}] at “pathname” ]]

远程位置是使用 at pathname 子句指定的。create table 允许使用外部类型

table file。每列的数据类型传递给远程服务器而不进行转换。


使用 create existing table 命令

create existing table 命令允许对现有表 (代理表)进行定义。此选项的语 法与 create table 命令类似:

create existing table table_name (column_list) [[external {table | procedure | file}] at pathname]

但接收到此命令时服务器所采取的操作与接收到 create table 命令时所采 取的操作明显不同。在远程位置上不创建新表;而是检查表映射并检验基 础对象是否存在。如果对象不存在 (主机数据文件或远程服务器对象), 则拒绝该命令,并显示错误消息。

如果对象存在,则获取其属性并将其用于更新系统表 sysobjectssyscolumns sysindexes

确定现有对象的性质。

对于远程服务器对象 (而不是 RPC),将找到的表或视图的列属性 与 column_list 中定义的属性进行比较。列名必须匹配 (区分大小 写),列类型和长度必须匹配 (或至少是可转换的),并且列的 NULL 属性必须匹配。

提取主机数据文件或远程服务器表中的索引信息,并将其用于创建 系统表 sysindexes 的行。这将用服务器的术语来定义索引和键,并 允许查询优化程序考虑该表中可能存在的任何索引。

成功定义现有表后,对该表发出 update statistics 命令。这使查询优化程 序能够对索引选择和连接顺序做出正确的选择。


数据类型转换


使用 create table create existing table 命令时,必须使用已识别的 Adaptive Server 数据类型来指定所有数据类型。如果远程服务器表位于 异构服务器类中,则在检索数据时,自动将远程表的数据类型转换为指 定的 Adaptive Server 类型。如果无法进行转换, create table create existing table 命令将不允许创建或定义该表。


远程表定义的示例


以下示例从定义服务器开始定义远程 Adaptive Server authors

1 定义名为 SYBASE 的服务器。它的服务器类为 ASEnterprise,它在

interfaces 文件中的名称为 SYBASE

exec sp_addserver SYBASE, ASEnterprise, SYBASE

2 定义远程登录别名。如果两个服务器上的 username password 相 同,则此步骤为可选步骤。用户 “sa” 在远程服务器 SYBASE 上使用 用户名 “sa” 和口令 “timothy” 标识身份:

exec sp_addexternlogin SYBASE, sa, sa, timothy

3 定义远程 authors 表:

au_id

varchar(11)

not null,

au_lname

varchar(40)

not null,

au_fname

varchar(20)

not null,

phone

char(12)

not null,

address

varchar(40)

null,

city

varchar(20)

null,

state

char(2)

null,

country

varchar(12)

null,

postalcode

char(10)

null

)

au_id

varchar(11)

not null,

au_lname

varchar(40)

not null,

au_fname

varchar(20)

not null,

phone

char(12)

not null,

address

varchar(40)

null,

city

varchar(20)

null,

state

char(2)

null,

country

varchar(12)

null,

postalcode

char(10)

null

)

create existing table authors (


EXTERNAL TABLE at "SYBASE.pubs2.dbo.authors"


4 更新表的统计信息以确保查询优化程序进行合理的选择:

update statistics authors

5 执行查询以测试配置:

select * from authors where au_lname = 'Carson'


使用 create proxy_table 命令

使用 create proxy_table 命令不要求列列表。组件集成服务从它自远程表 获得的元数据中派生出列的列表。

如果对象确实存在,则 create proxy_table 更新 sysobjectssyscolumns

sysindexes


将远程过程作为代理表

可以在 create existing table 语句中添加一个可选子句,表明该远程对象实 际上是一个存储 (或其它)过程,而不是一个表。如果没有此子句, 则将该远程对象假定为表或视图:

create existing table t1 (

column_1 int, column_2 int

)

EXTERNAL PROCEDURE AT "SYBASE.mydb.dbo.p1"

如果远程对象是类型过程,则会出现几种不同的处理方式:

不为此类型的对象创建任何索引。

必须提供与远程过程结果集的说明相匹配的列的列表。不对该列表 的准确性进行任何检验。

可以使用以下划线 (‘_’)开头的列名来指定不属于远程过程结果 集的列。这些列称为参数列。例如:

create existing table t1 (

a int,

b int,

c int,

_p1 int null,

_p2 int null

)

external procedure

at “SYBASE.sybsystemprocs.dbo.myproc”


select a, b, c from t1

where _p1 = 10 and _p2 = 20

在此示例中,参数列 _p1 _p2 不应出现在结果集中,但可以在查 询中引用。组件集成服务通过名为 @p1 @p2 的参数将搜索参数 传递给远程过程。


如果参数列包含在 select 列表中,并且是作为参数传递给远程过程 的,那么其值应等于在 where 子句中为其指定的值。如果参数列未 出现在 where 子句中,或者不能作为参数传递给远程过程,而是包 含在 select 列表中,则其值为 NULL

如果 Adaptive Server 查询处理器认为某个参数列是可搜索的参数, 则可以将该参数列作为参数传递给远程过程。如果它没有包括在任 何 “or” 谓词中,那么它通常是可搜索的参数。例如,以下查询禁止 将参数列用作参数。

select a, b, c from t1

where _p1 = 10 OR _p2 = 20

create existing table 语句中用于参数列定义的规则:

参数列必须允许 NULL

参数列不能位于常规结果列之前 (它们必须出现在列的列表的 末尾)。

由于允许将远程过程作为本地表来定义,组件集成服务可以将远程 过程的结果集作为 “虚拟表”来处理。该表可以进行排序,与其它 表连接,或通过 insert/select 语法插入到另一个表中。但是,虚拟表 被视为只读:

不能对 procedure 类型的表发出 deleteupdate insert 命令;

不能对虚拟表发出 create indextruncate table alter table 命令。

如果已经在服务器中定义了 procedure 类型的对象,将不会向该对象所在 的远程服务器发出查询。相反,组件集成服务将发出一个 RPC,并将该 RPC 的结果作为只读表来处理。

示例 create existing table rtable ( col1 int,

col2 datetime, col3 varchar(30)

)

external procedure at SYBASE...myproc


select * from rtable

当发出此查询时,组件集成服务将名为 myproc RPC 发送到服务器 SYBASE。行结果的处理方式与来自任何其它表的结果类似;可以将它 们排序、与其它表连接、分组或插入到另一个表中,等等。


RPC 参数应表示限制结果集的参数。如果发出不带参数的 RPC,则返回 该对象的整个结果集。如果发出带有参数的 RPC,则每个参数将进一步 限制结果集。例如:

select * from rtable where col1 = 10

导致将名为 @col1 的单个参数与 RPC 一起发送。其值为 10

组件集成服务尝试将尽可能多的搜索参数传递给远程服务器,但根据正 在执行的 SQL 语句,组件集成服务可能会自行计算结果集。每个参数都 表示一个完全匹配的搜索,例如 = 运算符。

以下规则定义发送到 RPC 的参数。如果 RPC 用作组件集成服务对象, 则在开发期间应该牢记这些规则。

组件集成服务将 where 子句中的 = 运算符作为参数发送。例如,此 查询导致组件集成服务发送两个参数:

select * from rpc1 where a = 3 and b = 2

参数 a 的值为 3,参数 b 的值为 2RPC 应只返回结果行,其中列 a

的值为 3,列 b 的值为 2

如果没有确切的搜索条件,组件集成服务不会发送 where 子句的任 何参数或 where 子句的任何部分。例如:

select * from rpc1 where a = 3 or b = 2 由于是 or 子句,组件集成服务不会发送 a b 的参数。 另一个示例:

select * from rpc1 where a = 2 and b < 3

组件集成服务发送 a b 的参数,并过滤包含 b 值小于 3 的行。


服务器限制


Adaptive Server 配置允许使用 2K4K8K 16K 个字节的页大小。 另外,取消了 char/binary 列的 255 个字节的限制。Adaptive Server 支持 charvarcharunivarcharunicharbinary varbinary 数据类型的扩展 大小。新限制取决于服务器的页大小。对于不同的页大小,新限制如下:


2-1:新限制

页大小

最大列大小

2048

2048

4096

4096

8192

8192

16384

16384


这些大小是近似值。基本规则指定限制是允许一页可容纳的单行的最大 大小。这些限制还取决于创建表时所指定的锁定方案。假定批量代理表 是使用缺省锁定方案 (即所有页锁定)创建的。

• Transact-SQL 变量和参数的长度限制 — charvarcharbinary varbinary 变量的大小扩展为等于给定服务器中相同数据类型列的最 大大小。这允许将变量传递给长度超过 255 个字节的当前限制的存 储过程 (或 RPC)。

每个表的列数限制 — 只要页面仍可以容纳列,则每个表允许有多 达 1024 列。可变长度列数的限制为 254 个 (空列也被视为可变长 度列)。

索引的宽度限制 — 根据服务器页大小, Adaptive Server 中索引的总 宽度可以大于以前版本中的宽度。 2-2 按照页大小列出了最大索 引宽度:

2-2:最大索引宽度

页大小

索引宽度

2048

600

4096

1250

8192

2600

16384

5300


每个索引的列数限制 — 每个索引 31 列。

表名、列名和索引名的长度最多可为 255 个字节。

标识符名现在最多可为 255 个字节。


create new proxy table

如上所述, create table 允许以扩展长度指定数据类型为 charvarcharbinary varbinary 的列。这些数据类型和长度转移到创建表的远程服务 器上。


create existing proxy table

create existing table 命令同样允许以大于 255 个字节的长度指定列。这允 许组件集成服务将远程数据库中以前必须作为 text image 列处理的列 作为 charvarcharbinary varbinary 来处理。

仍有可能会出现列大小不匹配的错误。例如,当远程数据库包含列长度 为 5000 个字节的表,而处理 create existing table Adaptive Server 只支 持长度最多为 1900 个字节的列时,将发生大小不匹配错误。在这种情 况下,必须重新将该列指定为 text image 列。

当代理表的列大小超过远程表中相应列的大小时,将检测到大小不匹配 错误并中止该命令。


create proxy_table


create proxy_table 从远程服务器导入元数据,将列信息转换为内部 create existing table 命令,并从导入的元数据派生一个列列表。获得列元数据 时,必须从远程 DBMS 类型转换为内部 Adaptive Server Enterprise 类型。

如果远程 charvarcharbinary varbinary 列的大小超过本地服务器所 允许的最大值,则将其长度截短到可能的最大大小(这取决于页大小)。 如果大小超过 16K 字节,则将类型从 char varchar 转换为 text,或者从 binary varbinary 转换为 image


alter table


如果对代理表执行 alter table 命令,则首先在本地对其进行处理,然后再 转移到远程服务器上执行。如果远程执行失败,则返回本地更改并中止 该命令。

远程服务器必须相应地处理命令,否则提交错误。如果出现错误,则中 止并回退命令的组件集成服务端。


selectinsertdeleteupdate

当数据操作语言 (DML) 操作涉及代理表时,组件集成服务将处理较大 的列值。组件集成服务使用以下策略之一来处理 DML

• Tabular data stream (TDS)™ 语言命令 — 如果可以将整个 SQL 语句转 移到远程服务器,则组件集成服务使用 CT-Library ct_command (CS_LANG_CMD) 生成的 TDS 语言命令来执行此操作。

语言缓冲区的文本可能包含超过 255 个字节的 long char binary 值 数据,远程服务器必须处理这些命令缓冲区的语法分析。


• TDS 动态命令 — 如果组件集成服务不能将整个 SQL 语句转移到远 程服务器 (例如,强制组件集成服务为语句提供功能性补偿),则 可以使用 TDS 动态命令以及所需的参数或使用 CT-Library 函数 ct_dynamic (CS_PREPARE_CMD, CS_EXECUTE_CMD, CS_DEALLOC_CMD) 来处理 insertupdate delete

该动态命令的参数可能为 CS_LONGCHAR_TYPE

CS_LONGBINARY_TYPE

• TDS 游标命令 — 如果必须执行功能性补偿,则可以使用 CT-Library 游标操作来处理 selectupdate delete 的代理表操作。例如,如果 更新代理表,而 from 子句中包含多个表,则组件集成服务可能需要 从多个数据源读取行,并且为每个限定行对目标表应用 update。在 这种情况下,组件集成服务使用 ct_cursor ({CS_DECLARE_CMD, CS_OPEN_CMD, CS_CURSOR_UPDATE_CMD, CS_CLOSE_CMD, CS_DEALLOC_CMD})

准备好游标之后,请指定参数。这些参数可能包含 CS_LONGCHAR

CS_LONGBINARY 类型的参数。

批量插入命令 — 执行 select/into 操作时,如果目标服务器支持批量 接口 (仅适用于远程 Adaptive Server DirectConnect for Oracle), 则必须准备好远程服务器以处理大于 255 char binary 值(通过 CS_LONGCHARCS_LONGBINARY 值)。

可以将来自远程服务器的列作为 CS_LONGCHAR_TYPE

CS_LONGBINARY_TYPE 类型返回到组件集成服务。


RPC 处理


发送到远程服务器的 RPC 可包含 CS_LONGCHAR CS_LONGBINARY

类型的参数。组件集成服务命令 cis_rpc_handling 支持这些类型。

由于早期版本的 Adaptive Server 不支持 CS_LONGCHAR CS_LONGBINARY 数据,因此不允许将长参数发送给早于 12.5 版的 Adaptive Server。在发送 RPC 以前,组件集成服务检查远程服务器的 TDS 功能,如果远程服务器不能接受这些数据类型,则出现错误。


sp_tables


Adaptive Server Anywhere ASIQ 存储过程 sp_tables 仅返回用户表。


级联代理表


Adaptive Server 允许在任意数量的组件集成服务实例之间进行级联代理 表配置。

在某些条件下,这可能会出现问题,如循环引用或事务 (其中,第二个 代理表在与第一个代理表相同的服务器上引用本地表)。在这种情况下, 可能会导致组件集成服务检测不到的应用程序死锁。必须对系统进行配 置以避免这些潜在的缺陷。




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