随着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
- 安全性管理指南
- 实用程序指南
alter table
说明 • 向表中添加新列;删除或修改现有列;添加、更改或删除约束;更 改现有表的属性;启用或禁用表的触发器;更改表的压缩级别。
• 支持添加、删除和修改计算列,并允许更改现有计算列的实现属 性、可为空性或定义。
• 按照指定分区策略对表进行分区或重新分区,向具有现有分区的表 中添加分区,并拆分或合并现有分区。
语法 alter table [[database.][owner].table_name
{add column_name datatype}
[default {constant_expression | user | null}]
{identity | null | not null [not materialized]} [off row | in row]
[[constraint constraint_name]
{{unique | primary key} [clustered | nonclustered] [asc | desc]
[with {fillfactor = pct, max_rows_per_page = num_rows, reservepagegap = num_pages immediate_allocation]
[on segment_name]
| references [[database.]owner.]ref_table [(ref_column)]
[match full]
| check (search_condition)]
[encrypt [with [database.[owner].] keyname] [decrypt_default {constant_expression | null}]]
[compressed = compression_level | not compressed] [, next_column]...
| add [constraint constraint_name]
{unique | primary key} [clustered | nonclustered]
(column_name [asc | desc][, column_name [asc | desc]...]) [with {fillfactor = pct,
max_rows_per_page = num_rows, reservepagegap = num_pages}]
[on segment_name]
| foreign key (column_name [{, column_name}...]) references [[database.]owner.]ref_table [(ref_column [{, ref_column}...])]
[match full]
| add lob-colname { text | image | unitext } [null] [ in row [ (length) ] ]
| check (search_condition)}
| set dml_logging = {full | minimal | default} | [, compression = {none | page | row}]}
[lob_compression = off | compression_level]
| drop {column_name [, column_name]...
| constraint constraint_name}
| modify column_name
[datatype [null | not null]]
[[[encrypt [with keyname] [decrypt_default [value]]
| decrypt
]
[[not] compressed]
[compressed = compression_level | not compressed]
| modify lob-column [ in row (length)] [, next_column]...
| replace column_name
default {constant_expression | user | null}
| decrypt_default {constant_expression | null}
| drop decrypt_default|
lock {allpages | datarows | datapages} }
| with exp_row_size=num_bytes
| transfer table [on | off]
| no datacopy}
| partition number_of_partitions
| unpartition
| partition_clause
| add_partition_clause
分区的 alter table 语法:
partition_clause::=
partition by range (column_name[, column_name]...) ([partition_name] values <= ({constant | MAX}
[, {constant | MAX}] ...)[on segment_name] [compression_clause] [on segment_name]
[, [partition_name] values <= ({constant | MAX}
[, {constant | MAX}] ...)[on segment_name]]...)
| partition by hash (column_name[, column_name]...)
{ (partition_name [on segment_name]
[, partition_name [on segment_name]]...) [compression_clause] [on segment_name]
| number_of_partitions
[on (segment_name[, segment_name] ...)]}
| partition by list (column_name)
([partition_name] values (constant[, constant] ...) [on segment_name]
[compression_clause] [on segment_name]
[, [partition_name] values (constant[, constant] ...) [on segment_name]] ...)
| partition by roundrobin
{ (partition_name [on segment_name]
[, partition_name [on segment_name]]...) [compression_clause] [on segment_name]
| number_of_partitions
[on (segment_name [, segment_name]...)]}
add_partition_clause::= add partition
{ ([partition_name] values <= ({constant | MAX} [, {constant | MAX}]...)
[on segment_name]
[compression_clause] [on segment_name]
[, [partition_name ] values <= ({constant | MAX} [, {constant | MAX}] ...)
[on segment_name]]...)
| modify partition {partition_name [, partition_name .. .] } set compression [= {default | none | row | page}]
| ([partition_name] values (constant[, constant] ...) [on segment_name]
[, [partition_name] values (constant[, constant] ...) [on segment_name]] ...)}
计算列的 alter table 语法:
alter table
add column_name {compute | as}
computed_column_expression... [materialized | not materialized]
drop column_name
modify column_name {null | not null |
{materialized | not materialized} [null | not null] |
{compute | as} computed_column_expression
[materialized | not materialized] [null | not null]}
用于删除、拆分、合并和移动分区的 alter table 语法:
alter table table_name
drop partition partition_name [, partition_name]... split partition partition_name
merge partition {partition_name [{, partition_name}…]} into destination_partition_name [on segment_name]
move partition partition_name [{, partition_name}…] to destination_segment_name
参数 table_name
是要更改的表的名称。如果该表位于另一数据库中,请指定数据库名 称,如果此数据库含有多个具有该名称的表,请指定所有者的名称。 owner 的缺省值是当前用户,而 database 的缺省值是当前数据库。
add
指定添加到表的列或约束的名称。如果已经启用 CIS,则不能对远程 服务器使用 add。
column_name
是表中列的名称。如果在数据库中启用了 Java,则此列可能为 Java-SQL 列。
datatype
除 bit 之外的任何系统数据类型或除基于 bit 的数据类型之外的用户定 义的任何数据类型。
如果在数据库中启用了 Java, datatype 可以是数据库中安装的 Java 类 的名称,此 Java 类可以是系统类或用户定义类。请参见 《Adaptive Server Enterpris 中的 Java》。
default
指定列的缺省值。如果您指定了一个缺省值,而且在插入数据时用户 没有为该列提供值,则 Adaptive Server 会插入此值。缺省值可以是 constant_expression、 user (插入正在插入数据的用户的名称)或 null
(插入空值)。
Adaptive Server 以 tabname_colname_objid 为格式生成缺省名称,其中 tabname 是表名的前 10 个字符, colname 是列名的前 5 个字符,而 objid 是缺省对象 ID 号。将缺省值设置为 null 会删除缺省值。
如果已经启用 CIS,则不能对远程服务器使用 default。
constant_expression 是用作列的缺省值的常量表达式。它不能包含全局变量、任何列名或 其它数据库对象,但可以包含内置函数。该缺省值必须与列的数据类 型兼容。
user
指定如果用户不提供值,则 Adaptive Server 插入用户名作为缺省值。 列的数据类型必须是 char(30)、varchar(30) 或 Adaptive Server 隐式转换 为 char 的类型;但如果数据类型不是 char(30) 或 varchar(30),可能出 现截断。
null | not null
指定在无缺省值的情况下,Adaptive Server 在数据插入过程中的行为。
null 指定添加一个允许空值的列。如果用户不提供值,则 Adaptive Server 在插入的时候分配一个空值。
Bit 类型列的属性必须始终为 not null。
not null 指定添加一个不允许空值的列。如果没有缺省值,则用户必须 在插入的时候提供一个非空值。
如果不指定 null 或 not null,缺省情况下 Adaptive Server 将使用 not null。不过,为了使此缺省值与 SQL 标准兼容,可以使用 sp_dboption 对它进行切换。如果为新添加的列指定 (或表示) not null,则需要一 个缺省子句。缺省值可用于新添加的列的所有现有行,也适用于以后 插入的内容。
materialized | not materialized
指示您是在创建实现列还是未实现列。
encrypt [with keyname]
指定加密列和用于对其加密的密钥。
keyname 标识使用 create encryption key 创建的密钥。表所有者必须对 keyname 拥有 select 权限。如果未提供 keyname,服务器将查找使用 create encryption key 或 alter encryption key 创建的缺省密钥。
有关支持的数据类型列表,请参见 《加密列用户指南》中的 “加密 数据”。
decrypt_default constant_expression 指定此列为没有解密权限的用户返回缺省值, constant_expression 是 Adaptive Server 在 select 语句中返回的值,而不是解密值。该值只能 在可空列中为 NULL。如果 decrypt_value 无法转换为列的数据类型, 则仅当查询时, Adaptive Server 才会捕获转换错误。
decrypt
解密加密列。
compressed = compression_level | not compressed
指示是否压缩行中数据以及压缩级别。
compression_level
压缩级别。压缩级别包括:
• 0 – 不压缩行。
• 1 到 9 – Adaptive Server 使用 ZLib 压缩。通常,压缩级别数字越 大, Adaptive Server 压缩 LOB 数据的程度就更大,压缩和未压缩 数据之间的比率就越大 (也就是说,压缩数据与未压缩数据大小 相比,节省的空间量就越大 (以字节为单位))。
但是,压缩量取决于 LOB 内容,压缩级别越高,进程的 CPU 占 用率就越高。也就是说,级别 9 的压缩率最高,但其 CPU 占用率 也最高。
• 100 – Adaptive Server 使用 FastLZ 压缩。此压缩率的 CPU 占用率 最低;通常在数据较少时使用。
• 101 – Adaptive Server 使用 FastLZ 压缩。与值为 100 时相比,值 为 101 时的 CPU 占用率略高,但压缩率也略高。
压缩算法忽略不使用 LOB 数据的行。
identity
表示该列具有 IDENTITY 属性。数据库中的每个表都可以具有一个以 下数据类型的 IDENTITY 列:
• 精确 numeric 类型 (标度为 0),或
• 任意整数数据类型,包括有符号或无符号 bigint、 int、 smallint 或
tinyint。
IDENTITY 列不能更新,也不允许有空值。
IDENTITY 列存储由 Adaptive Server 自动生成的序列号,例如发票编 号或职员编号。 IDENTITY 列的值唯一地标识表的每一行。
off row | in row
指定 Java-SQL 列是与行分开存储,还是存储在行中直接分配的存储区。
in row 列的存储区不可超过 16K 字节,其大小根据数据库服务器的页 大小以及其它变量而异。缺省值是 off row。
constraint
引入完整性约束的名称。如果已经启用 CIS,则不能对远程服务器使 用 constraint。
constraint_name 是约束的名称,必须符合标识符规则并且在数据库中唯一。如果没有 指定表级约束的名称, Adaptive Server 则生成格式为 tabname_colname_objectid 的名称,其中, tabname 是表名的前 10 个字 符,colname 是列名的前 5 个字符,而 objectid 则是约束的对象 ID 号。 如果没有为唯一约束或主键约束指定名称, Adaptive Server 会生成格 式为 tabname_colname_tabindid 的名称,其中 tabindid 是表 ID 和索引
ID 的字符串并置。
unique
约束指定列的值,以使任两行都不具有相同的非空值。此约束将创建 一个唯一索引,该索引只有在删除了约束后才能被删除。此选项不能 与 null 选项一起使用。
primary key 约束指定列的值,以使任两行都不具有相同的值,而且值都不能为 空。此约束将创建一个唯一索引,该索引只有在删除了约束后才能被 删除。
clustered | nonclustered
指定 unique 或 primary key 约束创建的索引为聚簇索引或非聚簇索引。 clustered 是主键约束的缺省值 (除非表中已存在聚簇索引); nonclustered 是唯一约束的缺省值。每个表只能有一个聚簇索引。有 关详细信息,请参见 create index。
asc | desc
指定索引是按升序 (asc) 的顺序还是按降序 (desc) 的顺序创建的。缺 省设置是按升序排列。
with fillfactor= pct
指定 Adaptive Server 对现有数据创建新索引时使每一页达到的填满程 度。“pct”代表百分比。 fillfactor 百分比仅在创建索引时使用。随着 数据变化,页的填充程度不会维持任何特定水平。
警告! 使用 fillfactor 创建聚簇索引会影响数据占用的存储空间,因为创 建聚簇索引时 Adaptive Server 会重新分配数据。
fillfactor 的缺省值是 0 ;此值在 create index 语句不包含 with fillfactor 时使 用 (除非使用 sp_configure 更改了此值)。指定 fillfactor 时,请使用介 于 1 和 100 之间的值。
fillfactor 值为 0 可创建具有完全填充页的聚簇索引及具有完全填充叶页 的非聚簇索引。它在聚簇索引和非聚簇索引的索引 B 树中都保留适量 空间。通常不需要更改 fillfactor。
如果将 fillfactor 设置为 100,Adaptive Server 在创建聚簇索引和非聚簇 索引时完全填满每页。将 fillfactor 的值设置为 100 仅对只读表 (将不 再向其中添加数据的表)有意义。
如果 fillfactor 的值小于 100(0 除外,0 是特殊情况),Adaptive Server 在 创建新索引时不会填满每页。创建表的索引时,如果表最终将包含大 量数据,那么将 fillfactor 的值设置为 10 可能是一种明智的选择,但较小 的 fillfactor 值会导致每个索引 (或索引和数据)占用较多的存储空间。
transfer table [on | off] 改变表进行增量传输的合格性。无论是否将表标记为用于传输,缺省 值均为不进行任何更改。如果 alter table 命令指定 set transfer table,同 时对 on 或 off 的选择与当前值不同,则会更改表的合格性。
max_rows_per_page = num_rows 限制数据页和索引的叶级页上的行数。与 fillfactor 不同, max_rows_per_page 的值将保持不变,直到使用 sp_chgattribute 更改它。
如果不指定 max_rows_per_page 的值, Adaptive Server 将在创建索引 时使用值 0。当为数据页指定 max_rows_per_page 时,请使用 0 到 256 之间的值。非聚簇索引的每页最大行数因索引键的大小而异;如果指 定的值过高, Adaptive Server 则返回错误消息。
对于由约束创建的索引,将 max_rows_per_page 设置为 0 将创建充满 页的聚簇索引和充满叶页的非聚簇索引。设置为 0 时在聚簇索引和非 聚簇索引的索引 B 树内都保留了适当数量的空间。
如果 max_rows_per_page 设置为 1,Adaptive Server 会创建叶级为每页 一行的聚簇和非聚簇叶索引页。使用这个方法可以减少经常访问的数 据的锁争用。
如果 max_rows_per_page 值较小, Adaptive Server 会创建具有不完全填 充页的新索引,使用更多的存储空间,并可能导致更多的页面拆分。
警告! 使用 max_rows_per_page 创建聚簇索引会影响数据占用的存储空 间,因为创建聚簇索引时 Adaptive Server 会重新分配数据。
reservepagegap = num_pages
指定对约束创建的索引进行扩充 I/O 分配操作时填充页与留下的空白 页的比率。对于每个指定的 num_pages,都留出空白页以便在将来扩 展表。有效值是 0 到 255。缺省值 0 表示不留下任何空白页。
immediate_allocation
启用 sp_dboption 'deferred table allocation' 后,将显式创建表。
on segment_name
指定其上存在索引或将在其上创建索引的段。使用 on segment_name 时,必须已经采用 create database 或 alter database 将逻辑设备分配至 数据库,且必须已经采用 sp_addsegment 在数据库中创建了段。要获 得数据库中可用段名的列表,请咨询系统管理员或使用 sp_helpsegment。
如果指定 clustered 并使用 on segment_name 选项,则整个表都将迁移 到您指定的段,因为索引的叶级包含实际的数据页。
对于分区, on segment_name 指定用于放置分区的段。
references 为参照完整性约束指定列列表。只能为一个列约束指定一个列值。通 过将此约束包括到引用其它表的表中,插入到引用 表中的任何数据 都必须已经存在于被引用 表中。
若要使用此约束,必须对被引用表拥有 references 权限。被引用表中的 指定列必须由唯一索引 (由 unique 约束或 create index 语句创建)约 束。如果未指定任何列,则被引用表的相应列必须包含 primary key 约 束。而且,引用表列的数据类型必须和被引用表列的数据类型完全匹 配。
如果已经启用 CIS,则不能对远程服务器使用 references。 foreign key
指定列出的列是该表中的外键,这些外键对应的主键是 references 子
句中列出的列。
ref_table
是包含被引用列的表的名称。您可以引用其它数据库中的表。约束可 引用最多 192 个用户表和内部生成的工作表。使用 sp_helpconstraint 检 查表的参照约束。
ref_column
是被引用表中的列的名称。
match full
指定如果引用行的引用列中的所有值均为:
• 空值 – 参照完整性条件为真。
• 非空值 – 如果被引用行中每个对应列在被引用表中都相等,则 参照完整性条件为真。
如果不属于上述任何一种情况,则参照完整性条件在以下条件成立时 为假:
• 所有值都是非空值且不相等,或者
• 引用行的引用列中的某些值是非空值,而其它值为空。
check
指定 search_condition 约束, Adaptive Server 将强制表中的所有行都遵 守这一约束。如果已经启用 CIS,则不能对远程服务器使用 check。
search_condition
是一个布尔表达式,用于定义列值的 check 约束。这些约束可以包括:
• 用 in 引入的一系列常量表达式
• 由 like 引入的一组条件 (可以包含通配符) 表达式可以提供算术运算和 Transact-SQL 函数。 search_condition
不能包含子查询、集合函数、参数和主变量。
next_column
使用与列定义相同的语法提供附加列定义 (用逗号隔开)。
set dml_logging
确定 insert、update 和 delete (DML) 操作的记录量。可以是以下各项之 一:
• full – Adaptive Server 记录所有事务,
• minimal – Adaptive Server 不记录行或页更改,
• default – 日志记录设置为表缺省值。
add lob-colname { text | image | unitext }
添加具有指定数据类型的 LOB 列。
[null] [ in row [ (length) ] ]
指定 LOB 列的最大长度仍为行内长度。如果不指定长度, Adaptive Server 则应用对行内长度有效的数据库范围设置。
如果不用 in row ( length ) 并且数据库范围设置无效,则向 LOB 列中添 加在行外存储的数据。
modify lob-column in row [(length)]
仅将 LOB 列的属性更改为 in-row,直至达到指定长度。当运行此命 令时,没有任何数据移动。
您还可以使用此选项增加行内 LOB 列的长度。
注释 您不能使用此选项来减小 LOB 列的长度,也不能指定 0 作为长 度。根据页的可用空间量,在此次修改后的更新过程中,将行外 LOB 数据移入行内,直至达到指定行内长度。
set compression 表示要用于表或分区的压缩级别。新压缩级别用于新插入或更新的数 据:
• default – 将指定分区的压缩级别重置为表的压缩级别。
• none – 不压缩该表或分区中的数据。对于分区, none 表示始终 不压缩该分区中的数据,即使将表压缩修改为 row 或 page 压缩也 是如此。
• page – 当页面已满时,则会使用页级压缩来压缩现有的采用行 压缩形式的数据行,从而创建页级字典、索引和字符编码条目。 将 page 压缩设置为分区或表级别。
Adaptive Server 只有已经在行级压缩数据后才在页级压缩数据, 因此,将压缩设置为 page 意味着 page 和 row 压缩。
• row – 压缩各行中的一个或多个数据项。只有在压缩形式比未压 缩形式更节省空间时, Adaptive Server 才会用 row 压缩形式存储 数据。设置分区级或表级的 row 压缩。
set lob_compression = compression_level
更改使用 LOB 数据类型的表的压缩级别。
drop
指定从表中删除的列或约束的名称。如果已经启用 CIS,则不能对远 程服务器使用 drop。
modify
指定您要更改其数据类型或可为空性的列的名称。
[not] compressed
replace
指定要用新值来替换缺省值的列,新值由下面的 default 子句指定。如 果已经启用 CIS,则不能对远程服务器使用 replace。
enable | disable trigger
启用或禁用触发器。有关触发器的信息,请参见 《系统管理指南》。
lock datarows | datapages | allpages
更改将要对表使用的锁定方案。
with exp_row_size= num_bytes
指定期望行宽。只能将此参数应用于:
• 数据行和数据页锁定方案。
• 具有可变长度行的表。
• 当 alter table 执行数据复制时,例如使用 alter table add 或 modify。不 能将 with exp_row_size= num_bytes 用于 alter table lock change 操作。
有效值可以是 0、 1 以及介于表的最小和最大行长度之间的任何值。 缺省值为 0,表示应用服务器范围的设置。
no datacopy
表示 alter table 在不复制数据的情况下删除列,同时在发生 alter table
操作时防止 alter table... drop 命令阻止对表运行其它命令。
partition number_of_partitions
向未分区表 (带单个分区的循环分区表)中添加 ( number_of_partitions
– 1) 空分区。这样,表的总分区数变为 number_of_partitions。如果已 经启用组件集成服务 (CIS),则不能对远程服务器使用 partition。
unpartition
将无索引的循环分区表更改为未分区表。如果已经启用 CIS,则不能 对远程服务器使用 unpartition。
partition by range 指定将根据一个或多个分区列中的值对记录分区。将每个分区列值与 用户提供的几组上下限相比较,以确定分区分配。
column_name
在 partition_clause 中使用时,指定一个分区键列。分区键列不能是加 密列。
partition_name 指定要在其上存储表记录的新分区的名称。分区名称在表或索引上的 分区组内必须唯一。如果启用 set quoted_identifier,则分区名称可以是 分隔标识符。否则,分区名称必须是有效的标识符。
如果省略 partition_name,则 Adaptive Server 将创建一个格式为 table_name _ partition_id 的名称。 Adaptive Server 将截断超过允许的最 大长度的分区名称。
values <= constant | MAX
指定命名分区的上限值 (包括边界值)。为最高分区上限指定常量值 将在表上施加隐式完整性约束。关键字 MAX 指定给定数据类型的最 大值。
on segment_name
在 partition_clause 中使用时,指定将在其上放置分区的段。使用 on segment_name 时,必须已经采用 create database 或 alter database 将逻 辑设备分配至数据库,且必须已经采用 sp_addsegment 在数据库中创 建了段。要获得数据库中可用段名的列表,请咨询系统管理员或使用 sp_helpsegment。
partition by hash 指定将按系统提供的散列函数对记录分区。该函数计算分区键的散列 值,这些分区键指定将记录分配到的分区。
partition by list 指定将按命名列中指定的实际值对记录分区。分区键只包含一个列。 最多可以列出 250 个常量作为各列表分区的分区值。
partition by round-robin 指定将按顺序方式对记录分区。循环分区表没有分区键。用户和优化 程序都不知道特定记录位于哪个分区中。
add partition
仅适用于域分区表或列表分区表:
• 对于域分区表 – 向域分区表的上端添加一个或多个分区。
• 对于列表分区表 – 添加带有一组新值的一个或多个分区。
modify partition
指定要对其修改压缩级别的分区。
compute | as
添加或删除新的计算列。遵循为 create table 命令定义的相同规则和
alter table add 规则。
computed_column_expression
任意有效的 Transact-SQL 表达式,该表达式不包含来自其它表、局部 变量、聚合函数或子查询的列。它可以是由一个或多个运算符连接起 来的列名、常量、函数、全局变量、 case 表达式或它们的组合。除虚 拟计算列引用实现计算列时以外,不能在计算列之间进行交叉引用。 不能在 computed_column_expression 中引用加密列。
materialized | not materialized
指定计算列是否为实现列。它们是 modify 子句中的保留关键字,用于 指定是否实现计算列 (即,以物理方式存储在表中)。缺省情况下, 计算列使用 not materialized (即,不以物理方式存储在表中)。也可 以使用此参数更改现有虚拟计算列的定义;即,实现这些列。
table_name drop partition partition_name [, partition_name]... 删除一个或多个列表或域分区。不能使用 alter table 删除散列或循环 分区。
对于删除的每个分区, Adaptive Server:
• 删除此分区上的所有数据
• 从系统目录中删除分区定义
• 删除引用此数据分区的所有相应本地索引分区
• 重新生成基表和每个本地索引的分区条件对象
• 删除此分区的所有统计信息
• 重建所有全局索引
注释 如果尝试从其它表引用的表中删除分区,并且要删除的分区和引 用表不为空,则此命令会因可能的外键约束冲突而失败,并且 Adaptive Server 将显示错误消息 13971。
split partition partition_name into partition_condition_clause
将分区数据重新分配至两个或多个分区。
partition_condition_clause 表示指定如何拆分源分区数据的条件。通常,这些条件是数值范围或 数据范围。分区条件应仅涵盖源分区中的全部数据。
partition_condition_clause 可能与源分区处于同一段,也可以处于新段 上。如果不指定目标分区段, Adaptive Server 则在源分区所在段上创 建新分区。
merge partition
将两个或多个可合并分区的数据并入一个分区中。
destination_partition_name
新分区或现有分区。如果 destination_partition_name 是现有分区,它不 能是您正在合并的任何源分区。如果不指定目标分区名,请选择系统 生成的名称。
move partition
将分区 (及其索引)移至指定段。
destination_segment_name 您正将分区移向的新段或现有段。不能指定 “default”作为 destination_segment_name 。
示例 示例 1 为表添加列。 Adaptive Server 为表中每个现有行分配一个 NULL
列值:
alter table publishers
add manager_name varchar (40) null
示例 2 向表中添加 IDENTITY 列。 Adaptive Server 为表中的每个现有行 分配一个唯一的顺序列值。IDENTITY 列可以是 numeric 或 integer 类型, 标度为零。精度确定可插入该列的最大值 (10 5 -1 或 99,999):
alter table sales_daily
add ord_num numeric (5,0) identity
示例 3 向 authors 表添加主键约束。如果表上现在有一个主键或唯一约 束,则必须首先删除现有的约束 (请参见下面的示例):
alter table authors
add constraint au_identification primary key (au_id, au_lname, au_fname)
示例 4 删除 au_identification 约束:
alter table titles
drop constraint au_identification
示例 5 对 authors 创建索引;该索引的 reservepagegap 值为 16,在索引中 为每 15 个分配的页留一个空白页:
alter table authors
add constraint au_identification primary key (au_id, au_lname, au_fname) with reservepagegap = 16
示例 6 删除 authors 表中 phone 列的缺省约束。如果列允许空值,则没有 指定值时会插入空值。如果列不允许空值,则不指定列值的插入操作将 失败:
alter table authors
replace phone default null
示例 7 修改 emp 表以加密 ssn 列,并指定解密缺省值:
alter table emp modify ssn encrypt with key1 decrypt_default '000-00-0000'
示例 8 解密不再敏感的信用卡数据:
alter table stolen_ccards modify ccard decrypt
如果已经通过受用户定义的口令保护的密钥对卡加密,请在执行此命令 之前执行 set encryption key 命令。
示例 9 向现有表中添加加密列。由于省略了 keyname,因此 Adaptive Server 将查找数据库的缺省加密密钥:
alter table sales_mgr
add bonus money null encrypt
示例 10 为 ssn_key 加密密钥设置口令,并对现有 employee 表中的 ssn 列 进行加密。
set encryption passwd '4evermore' for key ssn_key alter table employee modify ssn
encrypt with ssn_key
如果此示例中的 ssn 是通过 “key1”加密的现有加密列,则 alter table 将导致 Adaptive Server 使用 “key1”解密 ssn,并使用 “ssn_key”重新 加密 ssn。
示例 11 向已加密的 salary 列中添加解密缺省值:
alter table employee replace salary decrypt_default $0.00
示例 12 删除 salary 的解密缺省值,而不删除加密属性:
alter table employee replace salary drop decrypt_default
示例 13 将未分区表更改为具有三个分区的域分区表,这三个分区分别 位于不同段上:
alter table titles partition by range (total_sales) (smallsales values <= (500) on seg1, mediumsales values <= (5000) on seg2,
bigsales values <= (25000) on seg3)
示例 14 向 titles 表中添加另一个域分区:
alter table titles add partition (vbigsales values <= (40000) on seg4)
示例 15 将 pubs2 数据库中的 titles 表改为使用行级压缩:
alter table titles set compression = row
示例 16 将 sales 表的 Y2009 分区更改为使用页级压缩:
alter table sales modify partition Y2009 set compression = page
示例 17 将 titles 表的锁定方案更改为数据行锁定:
alter table titles lock datarows
示例 18 将非空列 author_type 添加到缺省值为 primary_author 的 authors 表 中:
alter table authors
add author_type varchar (20) default "primary_author" not null
示例 19 从 titles 表删除 advance、 notes 和 contract 列:
alter table titles
drop advance, notes, contract
示例 20 将 authors 表的 city 列更改为具有缺省值 NULL 的 varchar(30):
alter table authors
modify city varchar (30) null
示例 21 将 stores 表的 stor_name 列更改为 NOT NULL。其数据类型
varchar(40) 保持不变:
alter table stores
modify stor_name not null
示例 22 修改 titles 表的 type 列,并将 titles 表的锁定方案从所有页锁定更 改为数据行锁定:
alter table titles
modify type varchar (10) lock datarows
示例 23 将 titles 表的 notes 列从 varchar(200) 更改为 varchar(150),将缺省 值从 NULL 更改为 NOT NULL,并指定一个值为 40 的 exp_row_size:
alter table titles
modify notes varchar (150) not null with exp_row_size = 40
示例 24 向 mytable 中添加增量传输属性:
alter table mytable set transfer table on
示例 25 从 mytable 中删除增量传输属性:
alter table mytable set transfer table off
示例 26 添加、修改和删除一列,然后在同一查询中添加另一列。改变 锁定方案,并指定新列的 exp_row_size 值:
alter table titles
add author_type varchar (30) null modify city varchar (30)
drop notes
add sec_advance money default 1000 not null
lock datarows
with exp_row_size = 40
示例 27 修改 mymsgs 表的 description 列,以便支持 400 字节的行内 LOB
长度:
alter table mymsgs modify description in row (400)
示例 28 添加一个虚拟计算列:
alter table authors
add fullname compute au_fname + ' ' + au_lname
示例 29 将一个虚拟计算列更改为实现计算列:
alter table authors modify fullname materialized
示例 30 将包含 orders 表的分区拆成两个分区:
alter table orders split partition P2 into
( P5 values <= (25000) on seg2, P6 values <= (50000) on seg3)
示例 31 将包含 sales 表的分区合并成一个分区:
alter table sales
merge partition Q1, Q2, Q3, Q4 into Y2007
示例 32 将 orders 表移至 seg4 段:
alter table orders
move partition P2 to seg4
示例 33 从 titles 表中删除 total_sales 列并复制数据:
alter table titles drop total_sales with no datacopy
用法 • 您不能在包括虚拟散列表的段上使用 alter table。
• 您不能在包括 VHASH 表的段上使用 alter table,因为虚拟散列表必 须仅占用一个排它段,其它表或数据库不能共享此排它段。
• 在表中添加、修改或删除列之前,可通过运行 sp_depends 来查看是否 有任何存储过程依赖于您要更改的表。如果存在此类存储过程,则将 其删除,然后在更改表模式之后根据需要重新创建这些存储过程。
• 如果使用 select * 的存储过程引用一个已更改的表,则即使使用 with recompile 选项,结果集中也不会出现新列。为了包括这些新列,必 须删除过程并重新创建。否则,在已经修改表并在表中添加新列 后,此过程中的 insert into table1 select * from table2 可能导致错误结果。
• 当表所有者使用 alter table 时, Adaptive Server 在命令执行期间禁用 访问规则,并在命令完成时启用访问规则。禁用访问规则是为了避 免在 alter table 期间过滤表数据。
• 如果指定 clustered 并使用 on segment_name 选项,则整个表都将迁 移到您指定的段,因为索引的叶级包含实际的数据页。
• alter table.. .transfer table 涉及数据复制 (与添加或删除列类似):此 命令会对性能产生极大的影响。
• alter table 在改变表之前会针对检查约束进行错误检查。
• 对分区使用 on segment_name 时,必须已经用 create databas e 或 alter databas e 将逻辑设备指派给了数据库,且必须已经用 sp_addsegment 在数据库中创建了段。有关数据库中可用段名的列表,请咨询系统 管理员或使用 sp_helpsegment。
限制
警告!不要改变系统表。
• 如果指定了缺省值,则不能向现有表添加数据类型为 bit 的列。该缺 省值必须是 0 或 1。
• 表中的最大列数为:
• 对于所有页锁定 (APL) 表和仅数据锁定 (DOL) 表中的固定长度 列,为 1024
• 对于 APL 表中的可变长度列,为 254
• 对于 DOL 表中的可变长度列,为 1024
• 如果 APL 表中的可变长度列的数目超过 254,则 alter table 将引发错 误。
• 在更改表的锁定方案后,删除已编译对象,然后重新创建。
• 不能对以下对象使用 no datacopy 参数:
• 已实现或虚拟的计算列
• 加密列
• XML 列
• Java 列
• 使用 timestamp 或 bit 数据类型的列
• 行内 Java 列的最大长度取决于可变长度列的最大长度,而后者则取 决于表的模式、锁定风格和页大小。
• 将表转换为不同的锁定方案时,源表中的数据不能违反目标表的限 制。例如,如果尝试将可变长度列数超过 254 的 DOL 表转换为 APL 表,alter table 将失败,因为 APL 表的可变长度列数被限制为不 超过 254。
• 具有固定长度数据 (char、 binary 等)的列的最大长度如 表 1-1 所 示:
表 1-1: 行和列的最大长度 – APL 和 DOL 表
锁定方案 |
页大小 |
最大行长度 |
最大列长度 |
APL 表 |
2KB (2048 字节) |
1962 |
1960 字节 |
4KB (4096 字节) |
4010 |
4008 字节 |
|
8KB (8192 字节) |
8106 |
8104 字节 |
|
16KB (16384 字节) |
16298 |
16296 字节 |
|
DOL 表 |
2KB (2048 字节) |
1964 |
1958 字节 |
4KB (4096 字节) |
4012 |
4006 字节 |
|
8KB (8192 字节) |
8108 |
8102 字节 |
|
16KB (16384 字节) |
16300 |
16294 字节 (如果表不包含任何可 变长度列)。 |
|
16KB (16384 字节) |
16300 (取决于 varlen 的 最大起始偏移 = 8191) |
8191-6-2 = 8183 字节 (如果表至少 包含一个可变长度列)。 * |
* 此大小包括 6 个字节的行开销和 2 个字节的行长度字段。
• 每行的可变长度数据的最大字节数取决于表的锁定方案。下面描述 了 APL 锁定表的最大大小列:
页大小 |
最大行长度 |
最大列长度 |
2KB (2048 字节) |
1960 |
1960 |
4KB (4096 字节) |
4008 |
4008 |
8KB (8192 字节) |
8104 |
8157 |
16KB (16384 字节) |
16296 |
16227 |
下面描述了 DOL 表的最大大小列:
页大小 |
最大行长度 |
最大列长度 |
2KB (2048 字节) |
1960 |
1958 |
4KB (4096 字节) |
4008 |
4006 |
页大小 |
最大行长度 |
最大列长度 |
8KB (8192 字节) |
8157 |
8102 |
16KB (16384 字节) |
16294 |
16294 |
• 不能使用 alter table 添加声明或检查约束,然后将数据插入到同一批 处理或过程的表中。可以将 alter 和 insert 语句分放在两个不同的批 处理或过程中,也可以使用 execute 分别执行操作。
• 不能在包含缺省值的 alter table 语句中使用下面的变量:
declare @a int select @a = 2
alter table t2 add c3 int default @a
这样做将出现错误消息 154:Variable is not allowed in default.
• create proxy table、create table at remote server 或 alter table 当前不支持 用户定义的 SQL 函数。
注释 执行 SQL 函数时,需要使用语法 username.functionname()。
alter table 和加密列
• 在使用 alter table 添加或修改加密列时,如果表中包含大量的行,则 此操作可能会占用相当长的时间。
• 修改要加密的列可能导致表的行宽增大。
• 在下列情况下,不能使用 alter table 对列进行加密或解密:
• 如果列属于聚簇索引或位置索引。要对此类列进行加密或解 密,应删除索引,修改列,然后重新创建索引。
• 如果表定义了触发器。在修改列之前,先删除触发器。然后, 重新创建触发器:
• 如果修改属于聚簇索引或位置索引的加密列的数据类型,索引会顺 序混乱, alter table 则显示错误。在修改类型之前,先删除索引。然 后,重新创建索引。
• 可以对以下数据类型进行加密:
• int、 smallint、 tinyint
• unsigned int、 unsigned smallint、 unsigned tinyint
• bigint、 unsigned bigint
• decimal 和 numeric
• float4 和 float8
• money、 smallmoney
• date、 time、 smalldatetime、 datetime、 bigdatetime
• char 和 varchar
• unichar、 univarchar
• binary 和 varbinary
• bit
• 磁盘上的加密数据的基本数据类型为 varbinary。不会对空值加密。
• 如果修改属于聚簇索引或位置索引的加密列的数据类型,索引会顺 序混乱, alter table 将显示错误。在修改类型之前删除索引,然后重 新创建索引。
• 如果执行以下操作, alter table 将报告错误:
• 将计算列更改为加密列或将加密列更改为计算列
• 启用某个要加密的列,计算列使用的表达式中引用该列
• 将计算列修改为引用加密列
• 加密属于函数索引成员的列
• 将加密列指定为分区键
• 启用一个已经用作分区键的列进行加密
注释当 使用同一密钥对列加密时,支持加密列之间的参照完整性。有 关详细信息,请参见 《加密列用户指南》中的 “加密数据”。
改变表的压缩
• 可使用 set compression 更改表的压缩级别,以便将来进行数据插入 或更新。 set compression 不影响现有的已经压缩的数据行和页,但 需要对表具有独占访问权限。
• 不能在同一命令中修改表的压缩级别和分区的压缩级别。必须采用 单独命令执行这些操作。
• 可以将 set compression 与其它 set 参数一起使用。
• 更改表的压缩级别仅影响尚未显式定义压缩级别的分区。所有未显 式定义压缩级别的分区都会隐式继承表的压缩级别。例如,如果将 表的压缩级别从未压缩改为行级压缩,则所有压缩级别为 none 的分 区都不会发生更改,但未定义压缩级别的分区会更改为行级压缩。
• 修变表的压缩级别不会更改现有列的压缩级别。例如,如果 my_table 及其列尚未压缩,则当您改变 my_table 的压缩级别时,它 的列最初仍然尚未压缩。但是,向这些列中填充了足够数据从而触 发压缩机制时, Adaptive Server 将分别压缩它们。
• 新添加列的缺省行为取决于表的压缩设置。对于已压缩表,列的数 据类型确定其压缩级别。对于未压缩表,新列尚未压缩。
• 可以向表中添加压缩的已实现计算列,也可以以后压缩它们。
压缩和其它 alter table 参数之间的交互
当一个命令需要移动数据时,如果目标分区已压缩, Adaptive Server 会 压缩源分区中的所有未压缩数据行。当包括 compression 子句时, alter table 包括参数之间的下列交互:
• set – 您将:
• 不能将 set 与 add、 drop 或 modify 子句合并。
• 不能将 modify partition set 子句与其它 modify column_name 参数合并。
• 不能将 all 关键字和 modify partition 一起使用并在子句中包括分区 名。
• add :
• 可以在现有表中添加可空和不可空的压缩列。添加不可空列 时,需要移动数据。
• 如果添加到压缩表中的列配置了适当的数据类型,它们会使用 行压缩。
• 在压缩表中将列的数据类型修改为符合行压缩资格的数据类型 不会更改列的压缩级别。
• 如果您不对新列指定 not compressed,它会继承表的压缩级别。 例如,如果表是行级压缩,则您添加到表中的任何列都也使用 行级压缩。
• drop :
• 删除压缩列会导致数据移动。
• 如果表中的其它列或分区未压缩,或者无法压缩,您必须在删 除最后一个压缩列之前将压缩状态更改为 none。
• modify :
• 可以将现有表中的压缩列修改为 not compressed,反之亦然。
• 可以同时更改列的压缩级别和数据类型。但目标数据类型必须 符合行压缩级别的资格。如果目标数据类型不符合压缩资格, Adaptive Server 在 modify 操作期间忽略压缩它的请求。
• 如果您尝试修改一个无法创建为压缩列的列的压缩级别, Adaptive Server 会发出错误消息。例如,如果您尝试压缩虚拟 计算列或行内 Java 列, Adaptive Server 会发出错误消息。
• 将 add、 drop 和 modify 合并:
• 可以在单个 alter table 语句中发出包括一个或多个压缩列的多个 add、drop 或 modify 参数。此 alter table 命令的数据移动取决于参 数的数据移动限制。
• 如果 alter table 需要移动数据,则对于不受 add、 drop 或 modify
参数影响的列,列的压缩级别会保持不变。
• 重新对表分区 – 如果没有为新分区指定 compression 子句,
Adaptive Server 则将新分区的压缩级别设置为:
• 未压缩,如果源表及其所有分区都未压缩。
• 和源表相同的压缩级别,如果采用相同压缩级别压缩了所有分 区。
• 未压缩,如果:
• 表或各个分区以不同方式压缩,或者
• 源表尚未压缩,但它的某些分区经过压缩
Adaptive Server 之所以不压缩新分区,是因为可能很难唯一地 将压缩属性从原始压缩分区映射和迁移到新分区。必须将压缩 级别显式声明为 alter table 命令的一部分,才能指定必须在数据 复制期间压缩的目标分区。
• add partition – 如果不在 compression 子句中指定分区级别,新添加 的分区会继承表的压缩级别。
• drop partition – 如果表中包含多个分区,则仅删除表的压缩分区不 会更改表的压缩级别。
如果已经对表定义了压缩,则在删除分区后,表仍是压缩的,而且
Adaptive Server 会自动将以后的分区配置为压缩。
• 更改锁定方案 – 如果将表的锁定方案从所有页锁定更改为仅数据 锁定 (反之亦然), Adaptive Server 需要移动数据。您不能在更改 锁定方案的同时更改表或单个分区的压缩级别,而是必须在更改锁 定方案之前运行 set compression 命令来指定压缩级别。
• 取消对表进行分区 – 如果在取消对表进行分区时至少一个源分区 是压缩的,则在运行 alter table 后,会将整个表标记为压缩。如果表 在最初尚未压缩, Adaptive Server 则发出警告消息。
• 其它命令 – 您不能将用于指定列的缺省值、启用或禁用触发器、 添加或删除列级或表级约束等的参数,与用于指定列级或分区级压 缩或复制数据的命令组合。
• 如果 alter table 不包括数据移动,则现有数据不会受到影响,一旦向 表中插入这些数据, Adaptive Server 会向它们应用表的压缩级别。 如果 alter table 包括数据移动,则现有的数据会根据表的压缩级别来 决定是压缩还是解压缩。
• 以下 alter table 事件包括数据移动:
• 添加非空列
• 删除列
• 修改一个列以增大其长度 (例如,从 smallint 到 int,或从 char(3) 到 varchar(45))
• 以下 alter table 事件不包括数据移动:
• 添加空列
• 添加空文本列 (添加非空文本列是有限制的)
• 修改一个可变长度列以增大其长度 (例如,从 varchar(5) 到
varchar(20) 或从 varchar(20) 到 varchar(40))
• 您不能压缩代理表或代理表上的分区或列。
改变使用大对象的表的压缩级别
• 更改表的大对象 (LOB) 压缩级别仅会影响未显式定义压缩级别的
LOB 列。未显式定义压缩级别的列会隐式继承表的压缩级别。
• 如果还没为新添加的 LOB 列指定 LOB 压缩子句,则其缺省行为取 决于表的 LOB 压缩级别。对于 LOB 压缩表, Adaptive Server 对列 使用表的 LOB 压缩级别。对于 LOB 未压缩表,新添加的 LOB 列仍 然尚未压缩。
压缩与含有 LOB 数据的表的其它 alter table 参数之间的交互:
• drop column – 如果在删除列后表中不包括任何压缩 LOB 列,则表 使用表级 LOB 列压缩级别。
• add column
• 您可以添加可为空的压缩 LOB 列,但不能添加不可为空的压缩
LOB 列。
• 对于未设置为 LOB 压缩的表,缺省情况下,新添加的 LOB 列 尚未压缩。新添加的具有 LOB 压缩子子句的 LOB 列可以是压 缩的,也可以是未压缩的,具体取决于指定内容。
• modify column
• 可以解压缩现有的压缩 LOB 列。虽然新插入的数据是未压缩 的,但现有数据仍是压缩的。
• 可以更改现有 LOB 列的压缩级别。虽然新插入的数据采用新的 压缩级别,但现有数据仍保留原来的压缩级别。
• 可以将未压缩的 LOB 列更改为 compressed。
• 不能将常规列修改为 LOB 列 (压缩或未压缩)。
• 可以将压缩的 LOB 列修改为:
• 压缩的 text 列 (使用 n char、 n varchar、 unichar 和
univarchar)
• 压缩的 image 列 (使用 varbinary 和 binary)
• 压缩的 unitext 列 (使用 n char、 n varchar、 unichar、 univarchar、 varbinary 和 binary)
不能将压缩的行外 java 列修改为常规列。
Adaptive Server 会解压缩 LOB 数据,在需要时截断数据以适合 常规列长度,并将其转换为常规数据类型。常规列的最大长度 由 Adaptive Server 页大小控制。
• add、 drop、 modify 和 set lob_compression 的组合:
• 可以在涉及一个或多个压缩列的单个 alter table 命令 (或 set lob_compression 和 set compression 子子句)中发出多个 add、 drop 或 modify 子命令。
• 如果向 LOB 压缩表中添加列并在命令中包括 set lob_compression
= 0,则不会压缩新添加的列。
• 如果向常规的未压缩表中添加列并在命令中包括 set lob_compression = compression_level,则会压缩新添加的列。
现有的 LOB 数据不受 alter table 命令影响,只有以后的 DML 会受更 改的 LOB 压缩属性的影响。使用 update 和 select into 压缩或解压缩 现有 LOB 数据。
获取有关表的信息
• 有关表及其列的信息,请使用 sp_help。
• 若要重命名表,请执行 sp_rename (不可重命名系统表)。
• 有关完整性约束 (unique、 primary key、 references 和 check)或 default 子句的信息,请参见本章的 create table。
• 在索引列名后使用 asc 和 desc 关键字指定索引的排序顺序。通过创 建索引使各列按照在查询的 order by 子句中指定的顺序排列,可以 避免在查询过程中进行排序。请参见 《性能和调优系列:基础知 识》中的 “为改善性能建立索引”。
使用跨数据库参照完整性约束
• 创建跨数据库约束时, Adaptive Server 会在每个数据库的
sysreferences 表中存储以下信息:
表 1-2: 存储的有关参照完整性约束的信息
存储在 sysreferences 中的信息 |
包含有关被引用表的信息的列 |
包含有关引用表的信息的列 |
键列 ID |
refkey1 到 refkey16 |
fokey1 到 fokey16 |
表 ID |
reftabid |
tableid |
数据库 ID |
pmrydbid |
frgndbid |
数据库名称 |
pmrydbname |
frgndbname |
• 删除引用表或其数据库时, Adaptive Server 会从被引用数据库中删 除外键信息。
• 由于引用表依赖于来自被引用表的信息, Adaptive Server 不允许您:
• 删除被引用表,
• 删除包含被引用表的外部数据库,或者
• 用 sp_renamedb 对其中任何一个数据库进行重命名。 您必须先用 alter table 删除跨数据库约束
• 每次添加或删除跨数据库约束或者删除包含跨数据库约束的表时, 都请转储上述两个受影响的数据库。
警告!装载这些数据库的早期转储可能会导致数据库损坏。
• sysreferences 系统表存储外部数据库的 name 和 ID 号。如果您使用 load database 命令更改数据库名称或将其装载到其它服务器上,则 Adaptive Server 无法保证参照完整性。
警告!在转储数据库以便采用其它名称装载它或将其移至另一个
Adaptive Server 之前,请使用 alter table 删除所有外部参照完整性约束。
更改缺省值
• 可以用两种方式创建列缺省值:通过在 create table 或 alter table 语句 中将缺省值声明为列约束,或者通过使用 create default 语句创建缺 省值然后使用 sp_bindefault 将它绑定到列。
• 不能使用 sp_bindefault 替换绑定至列的用户定义的缺省值。首先使 用 sp_unbindefault 解除缺省值的绑定。
• 如果使用 create table 或 alter table 声明缺省列值,则不能使用 sp_bindefault 在此列上绑定缺省值。通过将缺省值更改为 NULL 来 删除缺省值,然后绑定用户定义的缺省值。将缺省值更改为 NULL 会解除绑定缺省值并会从 sysobjects 表中删除缺省值。
• alter table 语句中的空间管理属性 fillfactor、 max_rows_per_page 和 reservepagegap 适用于为 primary key 或 unique 约束创建的索引。如果 约束在所有页锁定表上创建聚簇索引,则空间管理属性将影响该表 的数据页。
• 使用 sp_chgattribute 为表或索引更改 max_rows_per_page 或
reservepagegap、为表更改 exp_row_size 值或存储 fillfactor 值。
• 在索引为以下情形时应用索引的空间管理属性:
• 作为 alter table 命令的结果而重新创建时,此命令将表的锁定 方案从所有页锁定更改为仅数据锁定 (反之亦然)。请参见 第 74 页的 “更改锁定方案 ”。
• 作为 reorg rebuild 命令的一部分被自动重建时。
• 若要查看表的当前生效的空间管理属性,请使用 sp_help。若要查看 索引的当前生效的空间管理属性,请使用 sp_helpindex。
• 空间管理属性 fillfactor、max_rows_per_page 和 reservepagegap 以下列 方式帮助管理表和索引的空间使用:
• fillfactor 在创建索引时在页上留出额外空间,但不会不断对
fillfactor 进行维护。它适用于所有锁定方案。
• max_rows_per_page 限制数据或索引页的行数。它的主要用途是 改善所有页锁定表的并发性。
• reservepagegap 指定空白页与整页的比率以供执行扩展分配的命 令使用。它适用于所有锁定方案。
可以为表或索引存储空间管理属性以便在执行 alter table 和 reorg rebuild 命令时应用。
• 下表显示了空间管理属性和锁定方案的有效组合。如果 alter table 命 令更改了表致使组合不兼容,则存储在系统表中的值仍然存在,但 不会在表的操作过程中被应用。如果表的锁定方案的更改使这些属 性成为有效的,随后将使用它们。
参数 |
Allpages |
Datapages |
Datarows |
max_rows_per_page |
可用 |
不可用 |
不可用 |
reservepagegap |
可用 |
可用 |
可用 |
fillfactor |
可用 |
可用 |
可用 |
exp_row_size |
不可用 |
可用 |
可用 |
• 下表显示了缺省值以及对空间管理属性使用缺省值的效果。
参数 |
缺省值 |
使用缺省值的效果 |
max_rows_per_page |
0 |
使每页容纳尽可能多的行,最多可容纳 256 行 |
reservepagegap |
0 |
不留间距 |
fillfactor |
0 |
完全填满叶页 |
max_rows_per_page 到 exp_row_size 的转换
• 如果表设置了 max_rows_per_page,且表由所有页锁定转换为仅数据 锁定,则在 alter table...lock 命令将表复制到新位置之前,该值将被 转换为 exp_row_size 值。复制期间将强制使用 exp_row_size。下表显 示了这些值的转换方式。
如果 max_rows_per_page 设置为 将 exp_row_size 设置为
0 通过 default exp_row_size percent 设置的百分比值
255 1 ,即完全充满页
1 – 254 以下两项中的较小值:
• 最大行宽
• 2002/max_rows_per_page 值
使用 reservepagegap
• 使用大量空间的命令通过分配扩展而不是分配单页来分配新空间。 reservepagegap 关键字会导致这些命令留出空白页,以使将来的页 分配紧邻被拆分的页或执行转移行所在的页进行。
• 表的 reservepagegap 值存储在 sysindexes 中,并在表的锁定方案从所 有页锁定更改为仅数据锁定 (反之亦然)时应用。若要更改存储的 值,请在运行 alter table 前使用 sp_chgattribute。
• 在所有页锁定表上使用 clustered 关键字指定的 reservepagegap 将覆 盖以前使用 create table 或 alter table 指定的任何值。
对表进行分区以提高性能
• 可使用 partition by 子句对未分区的表进行分区,或者对已经分区的 表重新分区。该任务需要数据复制;所有数据行都将根据指定的分 区条件重新分配。如果 Adaptive Server 配置为并行处理,则可以并 行运行该任务。必须将 select into/bulkcopy/pllsort 选项设置为 true。如 果表有索引,则必须首先删除索引,然后才能:
• 将未分区表更改为语义分区表。
• 更改分区类型。
• 更改分区键 – 不需要删除索引即可更改分区的其它属性,例如 分区数、分区边界或分区位置;会自动建立索引。有关分区键 和边界约束的详细信息,请参见 第 193 页的 “ create tabl e ”。
• 可以使用 add partition 子句向列表分区表或域分区表中添加空分区, 但是不能向散列分区表或循环分区表中添加空分区。
对于域分区表,只能将新分区添加到分区条件的上端。如果最后一 个现有分区具有最大边界 (values <= (MAX)),则不能添加新分区。
• 提供 partition number_of_partition 和 unpartition 子句是为了与早于 15.0 版的 Adaptive Server 兼容。只能对未分区表使用 partition number_of_partition 来添加 ( number_of_partition- 1 ) 个空循环分区;现 有数据位于第一个分区上,后续数据在所有分区之间分布。如果表 有全局聚簇索引, Adaptive Server 会将后续数据行放在第一个分区 中。要重新分布数据,请删除索引,然后重新创建。
注释 这些命令不需要移动数据。但由于 Adaptive Server 要执行许 多内部步骤,因此这些命令不会立即执行,对大型表执行这些命令 时尤其如此。为了避免数据损坏,在对表进行分区或取消分区时不 要中断操作。
只能对不包含索引的循环分区表使用 unpartition 子句。
• 不能对系统表进行分区。
• 不能对远程代理表进行分区。
• 不能在用户定义的事务中发出与分区相关的 alter table 命令。
• 如果表上有活动的打开游标,则不能使用 partition by 子句更改表的 分区属性。
• 使用 partition by 子句后,必须执行整个数据库转储,然后才能使用
dump transaction。
• 不能删除属于分区键的一部分的列。
• 变更键列时要小心。在某些情况下,修改键列的数据类型可能会在 分区之间重新分布数据。请参见 《Transact-SQL 用户指南》。
• 更改表的分区属性会增加模式计数,使访问该表的现有存储过程在 下次执行时重新编译。
使用计算列
• 添加新计算列而不指定可为空性和实现属性时,缺省选项可为空并 且不实现。
• 添加新的实现计算列时,会对表中的每个现有行进行
computed_column_expression 求值,并将结果存储在表中。
• 不能在添加新的计算列的同时添加或修改它们的基列。
• 可以修改现有计算列的整个定义。这是删除计算列并添加具有相同 名称的新计算列的快捷方法。这种列的行为与新计算列相似:如果 不指定这些选项,则其缺省值不实现且可为空。
• 可以修改现有计算列的实现属性而不更该列的其它属性,例如定义 该列或定义其可为空性的表达式。
• 将非空实现计算列修改为虚拟列时,必须在 modify 子句中指定 “null”。
• 修改未实现的计算列以实现它时,会对表中的每个现有行进行
computed_column_expression 求值,并将结果存储在表中。
• 如果修改属于索引键的现有列,则会重新创建索引。
• 不能将已用作索引键的实现计算列修改为虚拟列;必须首先删除索 引。
• 不能将普通列修改为计算列,或者将计算列修改为普通列。
• 不能修改或删除由计算列引用的基列。
• 不能删除被用作索引键的计算列。
添加 IDENTITY 列
• 向表中添加 numeric 或整数 IDENTITY 列时,请确保列精度足够大 以容纳现有的行数。如果行数超过 10 精度 - 1, Adaptive Server 输出 错误消息并且不会添加列。
• 当向表中添加 IDENTITY 列时, Adaptive Server 会:
• 锁定表直到已生成所有 IDENTITY 列值。如果表包含大量行, 在此过程可能会花费大量时间。
• 为每个现有行指定一个唯一的、连续的 IDENTITY 列值 (从 1
开始)。
• 记录对该表的每个插入操作。在向有大量行的表中添加
IDENTITY 列之前,使用 dump transaction 清除数据库的事务日志。
• 每次向表中插入行时, Adaptive Server 都会生成一个比该值大 1 的 IDENTITY 列值。该值优先于任何在 alter table 语句中为该列声明的 或使用 sp_bindefault 绑定到该列的缺省值。
更改表模式
• add、 drop、 modify 和 lock 子子句在更改现有表的模式时非常有用。 单个语句可以按照任何顺序包含任何数目的此类子子句,前提是不 在一个语句中多次引用同一列名。
• 如果使用 select * 的存储过程引用一个已更改的表,则即使使用 with recompile 选项,结果集中也不会出现新列。为了包括这些新列,必 须删除过程并重新创建。
• 为了确保触发器正确触发,必须在执行 add、drop、modify 或 lock 操 作后删除并重新创建已修改表的所有触发器。
• 如果用 alter table 添加一个 not null 列,Adaptive Server 将发出错误消息。
• 不能删除表中的所有列。同样,不能删除表中剩余的最后一列 (例 如,如果从含有五个列的表中删除四个列,则不能删除最后一 列)。若要从数据库中删除表,请使用 drop table。
• 在以下情形需要数据复制:
• 删除一列
• 添加 NOT NULL 列
• 对于大多数 alter table ... modify 命令
使用 set noexec on 和 showplan on 选项确定特定的 alter table 命令是否 需要数据复制。
• 当一个 alter table 命令需要数据复制时,可以使用其它的 alter table 命 令 (add、 drop 或 modify)为修改的表指定锁定方案的更改。
• 如果 alter table 执行数据复制,包括正在更改模式的表的数据库的
select into /bulkcopy/pllsort 必须打开。
• 修改的表保持现有的空间管理属性 (max_rows_per_page、 fillfactor
等等)和表索引。
• 需要数据复制的 alter table 不引发任何触发器。
• 可以使用 alter table 更改由 CIS 创建和维护的远程代理表的模式。请 参见 《组件集成服务用户指南》。
• 不能在同一语句中执行数据复制和添加表级约束或参照完整性约束。
• 不能在同一语句中执行数据复制并且创建聚簇索引。
• 如果添加 not null 列,还必须指定缺省子句。此规则有一个例外:如 果添加用户定义类型的列,并且该类型具有绑定的缺省值,则不必 指定缺省子句。
• 始终可以在所有页锁定表中添加、删除或修改列。然而,在仅数据 锁定表中添加、删除或修改列存在一些限制,如下表所述:
索引类型 |
分区的、所有页锁 定表 |
未分区的、所有页锁定 表 |
已分区的、仅数据 锁定表 |
未分区的、仅数据锁 定表 |
聚簇 |
是 |
是 |
否 |
是 |
非聚簇索引 |
是 |
是 |
是 |
是 |
如果需要在具有聚簇索引的、已分区的仅数据锁定表中添加、删除 或修改列,您可以:
a 删除聚簇索引。
b 更改仅数据锁定表。
c 重新创建聚簇索引。
• 不能将 NOT NULL Java 对象作为列添加。缺省情况下,所有的 Java 列始终有缺省值 NULL,并且以 varbinary 字符串或 image 数据类型 存储。
• 如果修改需要数据复制,则不能修改包含 Java 列的分区表。而是应 先取消表的分区,执行 alter table,然后重新对表进行分区。
• 不能从索引或参照完整性约束中删除键列。若要删除键列,请先删 除索引或参照完整性约束,然后删除键列。请参见 《Transact-SQL 用户指南》。
• 可以删除有缺省值或绑定了规则的列。删除列时,还会删除任何列 特定的缺省值。不能删除绑定有检查约束或参照约束的列。而要先 删除检查约束或参照约束,然后删除列。使用 sp_helpconstraint 确定 表中的任何约束,并使用 sp_depends 确定任何列级依赖性。
• 不能从系统表中删除列。同样,不能从由 Sybase 提供的工具和存储 过程创建和使用的用户表中删除列。
• 如果表为空,通常可以将现有列的数据类型修改为任何其它数据类 型。如果表不为空,可以将数据类型修改为任何能显式地转换为原 有数据类型的数据类型。
• 您可以:
• 添加新的 IDENTITY 列。
• 删除现有 IDENTITY 列。
• 修改现有 IDENTITY 列的大小。 有关详细信息,请参见 《Transact-SQL 用户指南》。
• 更改表模式会增加模式计数,使访问该表的现有存储过程在下次执 行时被重新规范化。依赖数据类型的存储过程或视图中的更改可能 会由于数据类型规范化错误而失败。更新这些依赖对象以使它们引 用修改后的表模式。
修改表模式的限制
• 不能在事务内运行 alter table。
• 改变表的模式可使用 bcp 所作的备份失效。这些备份可能使用与表 的当前模式不再兼容的表模式。
• 可以添加具有检查约束的 NOT NULL 列,不过 Adaptive Server 不对 现有数据验证该约束。
• 如果表有聚簇索引并且操作要求数据复制,就不能使用 alter table...add、 drop 或 modify 命令更改表的锁定方案。但您可以
a 删除聚簇索引。
b 改变表的模式。
c 重新创建聚簇索引。
• 如果表上存在任何活动的打开游标,则不能改变表的模式。
修改 text 和 image 列的限制
• 可以只添加接受空值的 text 或 image 列。
若要添加 text 或 image 列以使其只包含非空值,请先添加只接受空 值的列,然后更新为非空值。
• 只能将列从 text 数据类型修改为以下数据类型:
• [n]char
• [n]varchar
• unichar
• univarchar
• nchar
• nvarchar
• 只能将列从 image 数据类型修改为 binary 或 varbinary。
• 不能在同一语句中添加新的 text 或 image 列然后删除现有的 text 或
image 列。
• 不能将列修改为 text 或 image 数据类型。
修改包含 unitext 列的表
使用 alter table 修改 unitext 列时,以下限制将适用:
• 可以添加接受空值的新的 unitext 列。
• 只能将列从 unitext 数据类型修改为以下数据类型:
• [n]char
• [n]varchar
• unichar
• univarchar
• binary
• varbinary
• 不能将列修改为 unitext 数据类型。
• 不能在同一语句中添加一个 unitext 列并删除一个现有 unitext 列。
• alter table 支持从一种锁定方案更改到任何其它锁定方案。您可以更 改:
• 从 allpages 到 datapages (或者反向转换)
• 从 allpages 到 datarows (或者反向转换)
• 从 datapages 到 datarows (或者反向转换)
• 将所有页锁定更改为仅数据锁定方案 (或者反向转换)之前,如果 所有表都已分区并且索引排序要求并行排序,则使用 sp_dboption 将 数据库选项 select into/bulkcopy/pllsort 设置为 true,然后在数据库中运 行 checkpoint。
• 将锁定方案从所有页锁定更改为仅数据锁定 (或相反)之后,不能使 用 dump transaction 命令备份事务日志;必须先执行完整数据库转储。
• 当使用 alter table...lock 将表的锁定方案从所有页锁定更改为仅数据 锁定 (或者反向转换)时, Adaptive Server 会制作表的数据页的副 本。在表所驻留的段上必须有足够的空间以容纳数据页的完整副 本。在索引所驻留的段上必须有空间来重建索引。
DOL 锁定表的聚簇索引在数据页上层有一叶级。如果将带有聚簇索 引的表从所有页锁定更改为仅数据锁定,最终的聚簇索引将需要更 多的空间。所需的额外空间取决于索引键的大小。
使用 sp_spaceused 确定表当前占用了多大空间,并且使用
sp_helpsegment 查看可用于存储表的空间。
• 当将表的锁定方案从所有页锁定更改为数据页锁定 (或者反向转 换)时,空间管理属性会于复制数据行时应用到表,而且会于创建 索引时,应用到索引。当从一种仅数据锁定方案更改为其它方案 时,不会复制数据页,并且不会应用空间管理属性。
• 如果表已分区,更改锁定方案将执行分区到分区的行复制。复制过 程中不会平衡分区上的数据。
• 当更改表的锁定方案时,alter table...lock 命令获取表上的排它锁直到 命令结束。
• 当使用 alter table...lock 从数据页锁定更改为数据行锁定时,命令不 会复制数据页或重新创建索引。它只更新系统表。
• 当其他用户在系统中处于活动状态时更改锁定方案可能会对用户活 动产生如下影响:
• 访问该表的过程高速缓存中的查询计划在下次运行时将重新编 译。
• 使用该表的活动多语句过程在继续进行下一步之前将重新编译。
• 使用该表的即席批处理事务被终止。
警告! 批量复制操作处于活动状态时更改表的锁定方案可能会 导致表损坏。批量复制操作先获取表信息并且在读取表信息和 开始发送行的时间间隔内不持有锁,这样就会为 alter table...lock 命令开始运行留下一小段时间。
添加 Java-SQL 列
• 如果数据库中启用了 Java,则可以在表中添加 Java-SQL 列。请参见
《Adaptive Server Enterprise 中的 Java》。
• 新 Java-SQL 列的声明类 (datatype) 必须使用 Serializable 或
Externalizable 接口。
• 当向表中添加 Java-SQL 列时, Java-SQL 列不能:
• 指定为外键
• 在 references 子句中指定
• 指定为具有 UNIQUE 属性
• 指定为主键
• 如果指定了 in row,则存储的值不能超过 16KB,具体取决于数据服 务器的页大小。
• 如果指定了 off row,则列不能:
• 在检查约束中被引用
• 在指定了 distinct 的 select 中被引用
• 在比较运算符、谓词或 group by 子句中指定
对共享磁盘集群的限制
• 除了从同一本地临时数据库中的表引用之外,参照完整性约束不能 引用本地临时数据库中的列。当 alter table 尝试从其它数据库的表中 创建对此本地临时数据库中列的引用时会失败。
• 除非包含列的表驻留在同一本地临时数据库中,否则您不能用本地 临时数据库中存储的加密密钥对该列加密。如果 alter table 尝试用本 地临时数据库中的加密密钥对列加密,而表位于其它数据库中,该 命令将失败。
标准 符合 ANSI SQL 的级别Transact-SQL 扩展。
请参见 《参考手册:过程》中的 第 1 章 “系统数据类型和用户定义的 数据类型”。有关数据类型兼容的信息,请参见 《参考手册:构件块》 中的。
权限 对 alter table 的权限检查因您的细化权限设置而异。
细化权限已启用 在启用细化权限的情况下,您必须是表所有者或拥有 alter any table 特权的用 户。具有 setuser 特权的用户可通过执行 setuser 命令来充当表所有者。
细化权限已禁用 在禁用细化权限的情况下,您必须是表所有者或具有 sa_role 的用户。数据库 所有者可通过运行 setuser 命令来充当表所有者
审计 sysaudits 的 event 和 extrainfo 列中的值如下:
事件 审计选项 审计的命令或访问权限 extrainfo 中的信息
3 alter alter table • 角色 – 当前活动角色
• 关键字或选项 – add column、 drop column、 modify column、replace column、add constraint 或 drop constraint
• 先前值 – NULL
• 当前值 – NULL
• 其它信息 – NULL
• 代理信息 – set proxy 有效时的初始登录名
• 如果 set transfer table [on | off] 的 set 选项为:
• on – Adaptive Server 会在审计记录的额外信息中输出
SET TRANSFER TABLE ON。
• off – Adaptive Server 会输出 SET TRANSFER TABLE OFF。
另请参见 命令 create index, create table, dbcc, drop database, dump transaction, insert, setuser.
系统过程 sp_chgattribute, sp_help, sp_helpartition, sp_rename.
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。+-------------------------------------华丽的分割线-------------------------------------------------------------------------