随着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
- 安全性管理指南
- 实用程序指南
delete
说明 删除表中的行。
语法 delete
[top unsigned_integer]
[from] [[database.]owner.]{view_name|table_name} [where search_conditions]
[plan "abstract plan"]
delete [[database.]owner.]{table_name | view_name} [from [[database.]owner.]{view_name [readpast]|
table_name
[(index {index_name | table_name} [prefetch size][lru|mru])]}
[readpast]
[, [[database.]owner.]{view_name [readpast]|
table_name
[(index {index_name | table_name} [prefetch size][lru|mru])]
[readpast]} ...] [where search_conditions]] [plan "abstract plan"]
delete [from] [[ database.]owner.]{table_name|view_name} where current of cursor_name
参数 from (after delete)
是用于与其它版本的 SQL 兼容的可选关键字。
view_name | table_name 是从其中删除行的视图或表的名称。如果该视图或表位于另一数据库 中,请指定该数据库名称;如果在数据库中有多个具有该名称的视图 或表,请指定所有者的名称。 owner 的缺省值是当前用户,而 database 的缺省值是当前数据库。
where
是标准 where 子句。有关详细信息,请参见 where 子句。
from (table_name 或 view_name 后) 允许在指定删除哪些行时指定要用于 where 子句的多个表或视图。此 from 子句允许您根据存储在其它表中的数据删除一个表中的行,从而 给予您嵌入式 select 语句的大部分能力。
top unsigned_integer
用于将行数限制为 unsigned_integer 指定的行数。
指定 delete 命令跳过持有不兼容锁的所有页或行,而不必等待锁或超 时。对于数据页锁定表, readpast 会跳过持有不兼容锁的页上的所有 行;对于数据行锁定表,它会跳过持有不兼容锁的所有行。
index index_name
指定访问 table_name 要使用的索引。当从视图中进行删除时不能使用 此选项。
prefetch size
为绑定到配置了大 I/O 的高速缓存的表指定 I/O 大小 (单位为千字 节)。从视图中进行删除时不能使用 prefetch。 sp_helpcache 显示对象 绑定到的高速缓存或缺省缓存的有效大小。
在使用 prefetch 并指定预取大小 ( size ) 时,最小值是 2K 或逻辑页大小 与 2 的任意次方的乘积 (最大为 16K)。 prefetch 大小选项如下 (以 千字节为单位):
逻辑页大小 |
预取大小选项 |
2 |
2, 4, 8 16 |
4 |
4, 8, 16, 32 |
8 |
8, 16, 32, 64 |
16 |
16, 32, 64, 128 |
在查询中指定的 prefetch 大小仅仅是一个建议。要使用指定的大小, 应将数据高速缓存按该大小进行配置。如果未将数据高速缓存配置为 特定的大小,则使用缺省的 prefetch 大小。
若要配置数据高速缓存大小,请使用 sp_cacheconfigure。
注释 如果启用 CIS,则不能对远程服务器使用 prefetch。 lru | mru
指定对表使用的缓冲区替换策略。使用 lru 强制优化程序将表读入 MRU/LRU (最近使用最多的/最近使用最少的)链上的高速缓存。使 用 mru 可放弃高速缓存中的缓冲区,并将其替换为该表的下一个缓冲 区。当从视图中进行删除时不能使用此选项。
plan "abstract plan" 指定用来优化查询的抽象计划。它可以是用抽象计划语言指定的完整 或部分计划。请参见 《性能和调优指南:优化程序和抽象计划》中 的 “创建和使用抽象计划”。
where current of cursor_name
导致 Adaptive Server 删除 cursor_name 的当前游标位置指示的表或视 图中的行。
示例 示例 1 删除 authors 表中的所有行:
delete authors
示例 2 删除 authors 表中的一行或多行:
delete from authors where au_lname = "McBadden"
示例 3 删除 titles 表中作者为 Bennet 的书的行。
delete titles
from titles, authors, titleauthor where authors.au_lname = 'Bennet'
and authors.au_id = titleauthor.au_id
and titleauthor.title_id = titles.title_id
pubs2 数据库包含一个阻止删除记录在 sales 表中的标题的触发器
(deltitle),若要使此示例能够工作,请删除此触发器。
示例 4 删除当前由游标 title_crsr 指示的 titles 表中的一行:
delete titles where current of title_crsr
示例 5 确定 IDENTITY 列的值为 4 的行并将其从 authors 表中删除。注意 用 syb_identity 关键字代替了 IDENTITY 列的实际名称:
delete authors where syb_identity = 4
示例 6 删除 authors 中的行,跳过所有锁定的行:
delete from authors from authors readpast where state = "CA"
示例 7 删除 stores 中的行,跳过所有锁定的行。如果 authors 中有锁定的 行,则查询会阻塞在这些行上,等待锁被释放:
delete stores from stores readpast, authors where stores.city = authors.city
用法 • 可在一条 delete 语句中引用多达 15 个表。
• 在 Adaptive Server 12.5.2 版之前的版本中,有时不用工作表就能解 析对视图执行的带有 union all 子句的 update 和 delete 查询,这偶尔会 导致不正确的结果。在 Adaptive Server 12.5.2 及更高版本中,始终 使用 tempdb 中的工作表解析对带有 union all 子句的视图执行 update 和 delete 的查询。
限制
• 不能在多表视图 ( from 子句指定多个表的视图)上使用 delete ,即 使可以在同一视图上使用 update 或 insert。通过多表视图删除一行会 更改多个表,而这是不允许的。只影响视图的一个基表的 insert 和 update 语句是允许的。
• Adaptive Server 将一个 delete 中同一表的两种不同名称作为两个表 对待。例如,下面在 pubs2 中发出的 delete 命令将 discounts 指定为 两个表 (discounts 和 pubs2..discounts):
delete discounts
from pubs2..discounts, pubs2..stores where pubs2..discounts.stor_id =
pubs2..stores.stor_id
在这个例子中,连接中不包括 discounts,因此 where 条件对每一行 都为真;Adaptive Server 删除 discounts 中的所有行 (这并非期望的 结果)。若要避免此问题,请在整个语句中使用相同的表的名称。
• 如果要删除通过参照约束从其它表引用的表中的一行,允许删除前 Adaptive Server 会检查所有的引用表。如果试图删除的行包含一个 被引用表用作外键的主键,则不允许删除此行。
删除表中的所有行
• 如果不使用 where 子句,在 delete [from] 后命名的表中的所有行都将 被删除。表中虽然没有数据,但会一直存在,直到您发出 drop table 命令。
• truncate table 和不指定行的 delete 就功能来说是相同的,但 truncate table 要更快。 delete 一次删除一行并记录这些事务。 truncate table 删 除整个数据页,且并不记录这些行。
delete 和 truncate table 都回收由数据及其相关索引所占用的空间。
• 不能在分区表上使用 truncate tabl e 命令。若要删除分区表的所有行, 请使用不带 where 子句的 delete 命令,或在发出 truncate tabl e 之前取 消表的分区。
delete 和事务
在链式事务模式中,如果没有当前处于活动状态的事务,则每个 delete 语句会隐式地开始一个新的事务。请使用 commit 完成删除,或使用 rollback 撤消更改。例如:
delete from sales where date < ’ 01/01/06’ if exists (select stor_id
from stores
where stor_id not in
(select stor_id from sales)) rollback transaction
else
commit transaction
此批处理会开始一个事务 (使用链式事务模式)并删除 sales 表中日期 早于 2006 年 1 月 1 日的行。如果它删除了与一个店铺相关的所有 sales 条目,则回退所有对 sales 的更改并结束事务。否则它提交删除并结束 事务。有关链式模式的详细信息,请参见 《Transact-SQL 用户指南》。
delete 触发器
可以定义一个触发器,从而在对指定表发出 delete 命令时执行指定的操 作。
使用 delete where current of
• 用游标使用子句 where current of。用子句 where current of 删除行之 前,先用 declare cursor 定义游标并用 open 语句将其打开。用一个或 多个 fetch 语句将游标定位到要删除的行上。游标名不能是
Transact-SQL 参数或局部变量。游标必须是可更新游标,否则 Adaptive Server 会返回错误。对游标结果集进行的任何删除操作也 会影响派生该游标行的基表行。使用游标时,每次只能删除一行。
• 如果游标的 select 语句中包含连接子句,那么即使游标是可更新 的,也不能删除游标结果集中的行。用 delete...where current of 指定 的 table_name 或 view_name 必须是在定义该游标的 select 语句的第一 个 from 子句中指定的表或视图。
• 删除游标结果集中的一行后,游标定位在游标结果集中下一行的前 面。要访问下一行,必须发出 fetch 命令。如果删除的行是游标结果 集中的最后一行,则游标将被放置到结果集的最后一行之后。下面 描述了受 delete 影响的打开的游标的位置和行为:
• 如果客户端删除一行 (使用另一个游标或常规的 delete),而此 行代表此客户端所拥有的另一打开的游标的当前游标位置,则 隐式地设置每个受影响的游标的位置为下一可用行之前。但是, 客户端不能删除代表另一客户端游标的当前游标位置的行。
• 如果一个客户端删除一行,而此行代表由连接操作定义并由同 一客户端所拥有的另一游标的当前游标位置,则 Adaptive Server 接受此 delete 语句。但它会隐式地关闭由连接定义的游标。
使用 readpast
• readpast 使得仅数据锁定表上的 delete 命令能够执行,而不会被其 它任务持有的不兼容锁阻塞。
• 在数据行锁定表中,readpast 会跳过共享、更新或排它锁由另一 任务所持有的所有行。
• 在数据页锁定表中,readpast 会跳过共享、更新或排它锁由另一 任务所持有的所有页。
• 有排它锁时指定 readpast 阻塞的命令。
• 如果为所有页锁定表指定了 readpast 选项,该选项将被忽略。一旦 发现不兼容锁,命令就会阻塞。
• 如果会话范围的隔离级别为 3,将自动忽略 readpast 选项。此命令 在级别 3 执行。此命令在任何带有不兼容锁的行或页上阻塞。
• 如果会话的事务隔离级别是 0,使用 readpast 的 delete 命令将不会发 出警告消息。对于数据页锁定表,带有 readpast 的 delete 将修改所 有页上没有被不兼容锁锁定的所有行。对于数据行锁定表,它影响 所有没有被不兼容锁锁定的行。
• 如果 delete 命令应用于带有两个或多个文本列,并且每个文本列都 有一个不兼容的锁的行, readpast 锁定会跳过此行。
使用 index、 prefetch 或 lru | mru
index、prefetch 和 lru | mru 选项可覆盖 Adaptive Server 优化程序作出的选 择。请慎用这些选项,并始终用 set statistics io on 检查性能影响。请参见
《性能和调优指南:监控和分析》中的 “使用 set statistics 命令”。
标准 符合 ANSI SQL 的级别符合初级标准。在 from 子句中使用多个表和用数 据库名限定表名属于 Transact-SQL 扩展。
readpast 是一个 Transact-SQL 扩展。
权限 如果 set ansi_permissions 为 on,则除具有 delete 语句所需的常规权限外, 还必须对 where 子句中出现的所有列具有 select 权限。缺省情况下, ansi_permissions 为 off。
下文说明了基于您的细化权限设置的 delete 的权限检查。
细化权限已启用 在启用细化权限的情况下,您必须是表或视图所有者,或者是拥有 delete 权 限的用户或具有 delete any table 权限的用户。
细化权限已禁用 在禁用细化权限的情况下,您必须具有 delete 权限,或者是表的所有者或是 具有 sa_role 的用户。
审计 sysaudits 的 event 和 extrainfo 列中的值如下:
事件 |
审计选项 |
审计的命令或访问权限 |
extrainfo 中的信息 |
18 |
delete |
从表中删除数据的 delete 命令 |
• 角色 – 当前活动角色 • 关键字或选项 – delete • 先前值 – NULL • 当前值 – NULL • 其它信息 – NULL • 代理信息 – set proxy 有效时的初始登录名 |
19 |
delete |
从视图中删除数据的 delete 命令 |
• 角色 – 当前活动角色 • 关键字或选项 – delete • 先前值 – NULL • 当前值 – NULL • 其它信息 – NULL • 代理信息 – set proxy 有效时的初始登录名 |
另请参见 命令 create trigger, drop table, drop trigger, truncate table, where 子句 .
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。+-------------------------------------华丽的分割线-------------------------------------------------------------------------