随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从https://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站https://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!
如有Sybase数据库技术问题需要咨询,请联系我!
以下官方手册为ASE 15.7 ESD#2中文版:
- 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
- 新增功能摘要
- 新增功能指南
- ASE 15.7 发行公告
- 配置指南(windows)
- 安装指南(windows)
- 参考手册:构件块
- 参考手册:命令
- 参考手册:过程
- 参考手册:表
- Transact-SQL® 用户指南
- 系统管理指南,卷 1
- 系统管理指南,卷 2
- 性能和调优系列:基础知识
- 性能和调优系列:锁定和并发控制
- 性能和调优系列:监控表
- 性能和调优系列:物理数据库调优
- 性能和调优系列:查询处理和抽象计划
- 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
- 性能和调优系列:利用统计分析改进性能
- 程序员参考 jConnect for JDBC 7.0.7
- Adaptive Server Enterprise 中的 Java
- 组件集成服务用户指南
- Ribo 用户指南
- 内存数据库用户指南
- Sybase Control Center for Adaptive Server® Enterprise
- 安全性管理指南
- 实用程序指南
为表定义完整性约束
Transact-SQL 为维护数据库中的数据完整性提供了两种方法:
• 定义规则、缺省值、索引和触发器
• 定义 create table 完整性约束
选择哪种方法取决于您的需求。完整性约束的优点表现在:在创建表的 进程中一步完成完整性控件的定义 (如 SQL 标准规定),并可简化创 建这些完性控件的过程。但是,与缺省值、规则、索引和触发器相比, 完整性约束的范围较为有限,并且综合性也较差。
例如,触发器对参照完整性的处理方式比在 create table 中声明的方法更 为复杂。 create table 语句定义的完整性约束是针对该表的;不能将它们 绑定到其它表上,并且只能使用 alter table 对其进行删除或更改。即使在 同一张表上,约束也不能包含子查询或集合函数。
这两种方法不是互斥的。可以把完整性约束与缺省值、规则、索引与触 发器结合使用。在应用中可灵活选择最佳方法。本部分介绍 create table 完整性约束。缺省值、规则、索引和触发器将在后面的章节中加以介绍。
• unique 和 primary key 约束要求在一个表中,任意两行的特定列中均不 能有相同的值。此外, primary key 约束不允许列的任何行中有空值。
• 参照完整性 (references) 约束要求特定列中插入的数据应在指定表和 列中有与之相匹配的数据。使用 sp_helpconstraint 查找表的被参照表。
• check 约束限制插入到列中的数据值。 也可通过以下方法来强制实现数据完整性:即限制在列中使用空值
(null 或 not null 关键字);为列提供缺省值(default 子句)。有关 null 和
not null 关键字的信息,请参见 第 269 页的 “允许在列中使用空值 ” 。
有关查找为表定义的任何约束的信息,请参见 第 326 页的 “使用
警告!不要定义或变更系统表的约束定义。
可在表级或列级声明完整性约束。列级约束和表级约束之间存在差异, 但用户很少会注意到这一差异。即,仅当修改列中的值时才会检查列级 约束;只要对行进行任何修改,都会检查表级约束,而不管是否更改了 有关的列。
列级约束应放在列名和数据类型后面,但在分隔逗号前面。表级约束应 作为单独的逗号分隔子句输入。 Adaptive Server 同等对待表级约束和列 级约束;两种方式同等有效。
但是,必须将操作于多个列的约束声明为表级约束。例如,以下 create table 语句有一个操作于两个列 (pub_id 和 pub_name)的 check 约束:
create table my_publishers (pub_id char(4), pub_name varchar(40), constraint my_chk_constraint
check (pub_id in ("1389", "0736", "0877") or pub_name not like "Bad News Books"))
可将作用于一个列的约束声明为列级约束 (可选)。例如,如果上面的
check 约束只使用一个列 (pub_id),则可将该约束放到该列上:
create table my_publishers
(pub_id char(4) constraint my_chk_constraint check (pub_id in ("1389", "0736", "0877")),
pub_name varchar(40))
在列级或表级约束上, constraint 关键字和伴随的 constraint_name 是可 选的。 check 约束在 第 286 页的 “指定检查约束”中介绍。
注释 不能用检查约束发布 create table,然后在同一批处理或过程中将 数据插入到表中。可以将 create 和 insert 语句分放在两个不同的批处理 或过程中,或者使用 execute 分别执行操作。
可以用 sp_addmessage 创建消息并用 sp_bindmsg 将它们绑定到约束。 例如:
sp_addmessage 25001,
"The publisher ID must be 1389, 0736, or 0877"
sp_bindmsg my_chk_constraint, 25001 insert my_publishers values
("0000", "Reject This Publisher")
Msg 25001, Level 16, State 1: Server ‘snipe’, Line 1:
The publisher ID must be 1389, 0736, or 0877 Command has been aborted.
若要更改约束的消息,请绑定一条新消息。新消息会替换旧消息。
使用 sp_unbindmsg 将消息与约束解除绑定;使用 sp_dropmessage 删除用 户定义的消息。
例如:
sp_unbindmsg my_chk_constraint sp_dropmessage 25001
若要更改消息文本,但保留相同的错误号,请解除绑定消息,使用 sp_dropmessage 删除它,然后使用 sp_addmessage 再次添加它,并使用 sp_bindmsg 绑定它。
创建检查约束之后,描述检查约束的源文本存储在 syscomments 系统表 的 text 列中。
警告!不要从 syscomments 中删除此信息;否则将来升级 Adaptive Server 时可能会出现问题。
出于安全考虑,可用 sp_hidetext 在 syscomments 中将文本加密 (如 《参 考手册:过程》中所述)。请参见 第 3 页的 “编译对象 ”。
定义任何列级完整性约束之前,可为该列指定缺省值。缺省子句可为某 列指派缺省值,它是 create table 语句的一部分。当用户不输入列的值时, Adaptive Server 会插入该缺省值。
可将下列值用于 default 子句:
• constant_expression — 指定要用作列缺省值的常量表达式。常量表 达式不能包含任何列或其它数据库对象的名称,但可以包含不引用 数据库对象的内置函数。该缺省值须与列的数据类型兼容。
• user — 指定 Adaptive Server 插入用户名作为缺省值。若要使用此缺 省值,列的数据类型必须为 char(30) 或 varchar(30)。
• null — 指定 Adaptive Server 插入空值作为缺省值。不能使用 not null
关键字为不允许空值的列定义此缺省值。
例如,此 create table 语句定义两个列缺省值:
create table my_titles (title_id char(6),
title varchar(80),
price money default null, total_sales int default 0)
表中的每个列只能包括一个 default 子句。
使用 default 子句指派缺省值比两步 Transact-SQL 方法要简单。在 Transact-SQL 中,可使用 create default 声明缺省值,然后使用 sp_bindefault 将其绑定到列。
可声明 unique 或 primary key 约束,来确保一个表中的任意两行的指定列 中没有相同的值。这两个约束创建唯一索引,以强制实现此数据完整 性。然而, primary key 约束比 unique 约束的限制性更强。带 primary key 约束的列不能包含 NULL 值。通常表的 primary key 约束应与其它表上定 义的参照完整性约束一起使用。
SQL 标准的 unique 约束定义规定,列定义不允许使用空值。缺省情况 下,如果在列定义中省略 null 或 not null, Adaptive Server 会将列定义为 不允许空值 (如尚未用 sp_dboption 进行更改)。在 Transact-SQL 中,可 以将列定义为在 unique 约束下允许空值,因为用于强制约束的唯一索引 允许插入空值。
注释 不要将唯一和主键完整性约束与 sp_primarykey、 sp_foreignkey 和 sp_commonkey 定义的信息相混淆。唯一约束和主键约束实际上会创建 索引来定义表列的唯一或主键属性。 sp_primarykey、 sp_foreignkey 和 sp_commonkey 为通过创建索引和触发器而强制的表列定义键 (在 syskeys 表中)的逻辑关系。
缺省情况下, unique 约束创建唯一的非聚簇索引;primary key 约束创建 唯一的聚簇索引。可声明带有任意类型约束的聚簇或非聚簇索引。
例如,下列 create table 语句使用表级 unique 约束,来确保在 stor_id 和
ord_num 列中没有哪两行具有相同的值:
create table my_sales (stor_id char(4),
ord_num varchar(20),
date datetime,
unique clustered (stor_id, ord_num))
一个表只能有一个聚簇索引,所以只能指定一个 unique clustered 或
primary key clustered 约束。
强制数据完整性时,可使用 unique 和 primary key 约束来创建唯一索引
(包括 with fillfactor、with max_rows_per_page 和 on segment_name 选项)。 但是,索引可提供附加功能。请参见 第 13 章 “创建表的索引 ”。
参照完整性指用于管理表间关系的方法。创建表时,可定义约束,以确 保插入特定表中的数据在另一表中有匹配值。
可在表中定义的引用有三种类型:对另一个表的引用、从另一个表的引 用和自身引用 (即同一个表中的引用)。
以下两个表来自 pubs3 数据库,举例说明声明的参照完整性如何工作。 第一个表 stores 是 “被参照”的表:
create table stores
(stor_id char(4) not null, stor_name varchar(40) null, stor_address varchar(40) null, city varchar(20) null,
state char(2) null, country varchar(12) null, postalcode char(10) null, payterms varchar(12) null,
unique nonclustered (stor_id))
第二个表 store_employees 是 “参照”表,因为它包含对 stores 表的参 照。它还包含自身参照:
create table store_employees (stor_id char(4) null
references stores(stor_id), emp_id id not null,
mgr_id id null
references store_employees(emp_id), emp_lname varchar(40) not null, emp_fname varchar(20) not null,
phone char(12) null, address varchar(40) null, city varchar(20) null,
state char(2) null, country varchar(12) null, postalcode varchar(10) null, unique nonclustered (emp_id))
store_employees 表中定义的引用强制执行以下限制:
• store_employees 表中指定的任何商店都必须包括在 stores 表中。 references 约束规定任何插入到 store_employees 的 stor_id 列中的值必 须已存在于 my_stores 的 stor_id 列中,从而强制执行这一限制。
• 所有管理人员都必须有员工标识号。references 约束规定任何插入到
mgr_id 列中的值必须已存在于 emp_id 列中,从而强制执行这一限制。
表级或列级参照完整性约束
可在列级或表级定义参照完整性约束。前例中的参照完整性约束是使用
create table 语句中的 references 关键字在列级定义的。
定义表级参照完整性约束时,应包括 foreign key 子句和一个或多个列名 的列表。 foreign key 指定当前表中列出的列是外键,这些外键的目标键 是随后的 references 子句中列出的列。例如:
constraint sales_detail_constr foreign key (stor_id, ord_num)
references my_salesdetail(stor_id, ord_num)
foreign key 语法只允许用于表级约束,而不允许用于列级约束。请参见 第 280 页的 “指定表级或列级约束 ” 。
在列级或表级定义参照完整性约束后,可以使用 sp_primarykey、 sp_foreignkey 和 sp_commonkey 在 syskeys 系统表中定义键。
表中允许的最大参照数为 192 。请参见 第 326 页的 “使用
为交叉引用约束使用 create schema
不能创建参照不存在的表的表。若要创建两个或多个相互参照的表, 请使用 create schema。
模式 是特定用户拥有的对象以及这些对象的关联权限的集合。如果 create schema 语句中的任何语句失败,整个命令将作为一个单元回退, 所有命令均不起作用。
create schema 语法为:
create schema authorization authorization name create_object_statement
[create_object_statement ...]
[permission_statement ...]
例如:
create schema authorization dbo create table list1
(col_a char(10) primary key, col_b char(10) null references list2(col_A))
create table list2
(col_A char(10) primary key, col_B char(10) null references list1(col_a))
• 确保拥有对被参照表的 references 权限。请参见 《系统管理指南第 一卷》中的第 17 章 “管理用户权限”。
• 确保被参照的列受被参照表中唯一索引的约束。可使用 unique 或 primary key 约束或者 create index 语句来创建唯一索引。例如,stores 表中被引用的列定义如下:
stor_id char(4) primary key
• 确保用在参照定义中的列有匹配的数据类型。例如,在 my_stores
和 store_employees 中的 stor_id 列都是使用 char(4) 数据类型创建的。
store_employees 中的 mgr_id 和 emp_id 列都是用 id 数据类型创建的。
• 只有在通过 primary key 约束将被引用表中的列指定为主键时,才可 在 references 子句中省略列名。
• 在被引用表中,不能更新与引用表中的值相匹配的列值或删除与引 用表中的值相匹配的行。应该先从引用表中执行删除或更新,然后 再从被引用表中行删除。
同样,也不能对被参照表使用 truncate table 命令。而应首先截断引 用表,然后再截断被引用表。
• 在删除被引用表之前,必须先删除引用表;否则将违反约束。
• 使用 sp_helpconstraint 查找表的被参照表。
参照完整性约束为强制数据完整性提供了比使用触发器更为简单的方 式。但是,触发器为强制表间的参照完整性提供附加能力。请参见
可声明 check 约束来限制用户可在表列中插入的值。检查约束对于检查 有限的具体值域的应用程序非常有用。 check 约束指定了值在插入表之 前必须通过的 search_condition。 search_condition 可包括:
• 用 in 引入的一系列常量表达式
• 用 between 引入的一系列常量表达式
• 由 like 引入的一组条件,可以包含通配符
表达式可包括算术运算符和 Transact-SQL 内置函数。search_condition 不 能包含子查询、集合函数说明或目标说明。
例如,此语句确保只有某些特定的值才能输入 pub_id 列:
create table my_new_publishers (pub_id char(4)
check (pub_id in ("1389", "0736", "0877",
"1622", "1756")
or pub_id like "99[0-9][0-9]"), pub_name varchar(40),
city varchar(20),
state char(2))
列级检查约束仅可参照定义约束的列;不能引用表中的其它列。表级检 查约束可参照表中任意列。 create table 允许列定义中有多个检查约束。
因为检查约束不替代列定义,所以,如果列定义允许空值,就不能使用 检查约束来禁止空值。如果对允许空值的列声明了检查约束,即使 NULL 值并未含在 search_condition 中,也可以在列中显式或隐式地插入 NULL 值。例如,假定对允许空值的表列定义下列检查约束:
check (pub_id in ("1389", "0736", "0877", "1622",
"1756"))
您仍可将 NULL 插入该列。因为以下表达式始终判断为真,所以列定义 覆盖检查约束:
col_name != null
设计使用参照完整性功能的应用程序时:
• 不创建不必要的参照约束。表中具有的参照约束越多,需要参照完 整性的语句在表上运行得越慢。
• 在表上尽可能少地使用自参照约束。
• 对于检查有限的特定值范围的应用程序,应使用 check 约束而不是 references 约束。由于没有参照,使用 check 约束时不再要求 Adaptive Server 扫描其它表以完成查询。因此,对这样的表运行查 询的速度快于对使用参照的表运行查询。
例如,该表使用 check 约束将作者限制在 California:
create table cal_authors (au_id id not null,
au_lname varchar(40) not null, au_fname varchar(20) not null, phone char(12) null,
address varchar(40) null, city varchar(20) null, state char(2) null
check(state = "CA"), country varchar(12) null, postalcode char(10) null)
• 将普通扫描的外键索引绑定到各自的高速缓存中,以优化性能。唯 一索引在主键列上自动创建。当相应的外键被更新或插入时,通常 选择这些索引扫被引用表。
• 将候选键的多行更新保持在最低限度。
• 将参照完整性查询放入使用约束检查的过程中。约束检查被编入执 行计划;当参照约束改变时,具有该约束的过程在执行时被自动重 新编译。
• 如果不能将参照完整性查询内置于过程中,且必须频繁地在特别批 处理中重新编译参照完整性,那么将系统目录 sysreferences 绑定到 其高速缓存上。这样提高了 Adaptive Server 重新编译参照完整性查 询时的性能。
• 若要测试具有参照约束的表,请在使用该表运行查询之前,使用 set showplan, noexec on。 showplan 输出指示运行查询所需的辅助扫描描 述符的数量;扫描描述符管理在其上运行查询时表的扫描。如果辅 助扫描描述符的数量很大,则重新设计该表使其使用较少扫描描述 符,或者增加 number of auxiliary scan descriptors 配置参数的值。
Sybase SQL Anywhere数据库恢复工具ReadASADB:
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具: ReadASADB。此工具支持ASA v5.0, v6.0, v7.0, v8.0, v9.0, v10.0, v11.0, v12.0, v16.0, v17.0等版本。
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具。
恢复Sybase SQL Anywhere的工具在国内处于领先水平。
Sybase SQL Anywhere数据库恢复工具ReadASADB功能
能够从损坏的SQL Anywhere数据文件(.db)和UltraLite数据文件(.udb)上提取数据的非常规恢复工具
- 适用于所有的SQL Anywhere版本 包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x,16.x,17.x
- 适用于所有的UltraLite版本
- 能够恢复出来表结构和数据
- 能够恢复自定义数据类型
- 能够恢复存储过程等对象的语法
- 能够导出到目标数据库
- 能够导出到SQL文件并生成导入脚本
- 支持多种字符集,包括:cp850、cp936、gb18030、utf8等
- 能够恢复未加密或者简单加密类型的数据
- 简单易用
- 限制:不支持AES加密的数据文件
SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍
Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景
各种误操作:
- 误截断表(truncate table)
- 误删除表(drop table)
- 错误的where条件误删数据
- 误删除db或log文件
- 误删除表中的字段
Sybase SQL Anywhere数据库恢复工具ReadASADB的应用场景:
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
7、*** ERROR *** Assertion failed: 201417 (7.0.4.3541) Invalid count or free space offset detected on a table page
8、Internal database error *** ERROR *** Assertion failed: 201425 (8.0.3.5594) Invalid count or free space offset detected on a free list page -- transaction rolled back.
9、Internal database error *** ERROR *** Assertion failed: 100702 (8.0.1.2600) Unable to modify indexes for a row referenced in rollback log -- transaction rolled back
Sybase ASE数据库恢复工具READSYBDEVICE:
一个不依赖数据库管理系统、直接从Sybase数据库设备文件上提取数据的业内领先的恢复工具!能够从损坏的Sybase ASE设备文件(.dat)上提取数据的非常规恢复工具。
Sybase ASE数据库恢复工具READSYBDEVICE的主要功能:
- 被勒索病毒加密数据文件及备份文件情况下的恢复;
- 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
- 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
- delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
- 各种Sybase内部系统表损坏、索引错误的修复;
- master数据库损坏而无法正常运行情况下的恢复;
- Sybase数据库被标记为可疑,不可用等情况的恢复;
- Sybase数据库中数据文件内部出现坏块情况下的恢复;
- Sybase数据库无数据文件但有日志文件的情况下的恢复;
- Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
- Sybase数据文件被误删除情况下的碎片提取恢复;
- 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
- 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
- Sybase数据库还原数据库出现失败情况下的恢复;
- Sybase数据库只剩下损坏的备份文件情况下的恢复。
Sybase ASE数据库恢复工具READSYBDEVICE支持的版本:
Sybase ASE 11.0.x,11.5.x,11.9.x,12.0.x,12.5.x,15.0.x,15.5.x,15.7.x,16.0.xSQL Server数据库恢复工具SQLRescue:
一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。
SQL Server数据库恢复工具SQLRescue的主要功能:
- 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
- 断电导致数据库文件损坏情况下的恢复;
- 硬盘坏道造成数据库损坏情况下的恢复;
- 数据文件内部存在坏页情况下的恢复;
- 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
- 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
- 无法读取并闩锁页sysindexes失败情况下的修复;
- 数据文件被误删除情况下的碎片提取恢复;
- 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
- master数据库损坏而无法正常运行情况下的恢复;
- 数据文件无法附加情况下的数据恢复;
- 数据库被标记为可疑,质疑,不可用等情况的恢复;
- 数据库sysobjects等系统表损坏情况下的恢复;
- 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
- 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
- 数据库被误格式化等情况下的数据库恢复;
- 日志收缩造成数据库损坏情况下的恢复;
- 仅剩损坏的备份文件情况下的恢复。
SQL Server数据库恢复工具SQLRescue技术特点:
只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。- 从数据文件中直接恢复数据
- 不能附加时直接恢复数据并生成新的数据库
- 系统表损坏的数据库修复
- 快速修复SQL 823错误、连接中断错误
SQL Server数据库恢复工具SQLRescue支持的版本:
Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。+-------------------------------------华丽的分割线-------------------------------------------------------------------------