提供7*24专业Sybase数据库远程及现场技术支持,Sybase ASE及Sybase SQL Anywhere数据库修复服务,
请联系电话: (微信),QQ: 289965371!
We supply technical support for Sybase ASE and Sybase SQL Anywhere, also have many years of experience in recovering data from damanged Sybase devices.
Please contact us:
Phone:
Wechat: 13811580958
QQ: 289965371 联系我们获取数据库技术支持!
Email: 289965371@qq.com
扫描下方微信,联系我们:
扫描雨翰数据恢复官方微信获取专业数据库恢复服务

 

随着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数据库技术问题需要咨询,请联系我!

  QQ :289965371 联系我们获取数据库技术支持!
  Email:

以下官方手册为SAP IQ 16.0 SP03中文版:

  1. SAP Sybase IQ 简介
  2. 新功能摘要
  3. IQ 发行公告(linux)
  4. IQ 快速入门(unix)
  5. 安装和配置指南(linux)
  6. 管理:备份、恢复和数据恢复
  7. 管理:数据库
  8. SAP Sybase IQ 错误消息
  9. 管理:全球化
  10. IQ 许可选项指南
  11. 管理:装载管理
  12. IQ 迁移
  13. 管理:Multiplex
  14. 性能和调优指南
  15. IQ 编程
  16. 参考:构件块、表和过程
  17. 参考:语句和选项
  18. 管理:内存行级版本控制
  19. 管理:空间数据
  20. IQ 非结构化数据分析
  21. 用户定义的函数
  22. 管理:用户管理和安全
  23. 实用程序指南

 


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

ALTER TABLE 语句 ‌

修改表的定义。 快速链接:

转至参数 (第 59 页) 转至示例 (第 65 页) 转至用法 (第 68 页) 转至标准 (第 68 页) 转至权限 (第 68 页)


语法

语法 1 - Alter Owner

image

ALTER TABLE table_name ALTER OWNER TO new_owner

[ { PRESERVE | DROP } PERMISSIONS ] [ { PRESERVE | DROP } FOREIGN KEYS ]

语法 2

image

ALTER TABLE [ owner.]table-name

|{ ENABLE | DISABLE } RLV STORE

{ alter-clause, ... }


alter-clause - (back to Syntax 2)

ADD create-clause

| ALTER column-name column-alteration

| ALTER [ CONSTRAINT constraint-name ] CHECK ( condition )

| DROP drop-object

| RENAME rename-object

| move-clause

| SPLIT PARTITION range-partition-name

INTO ( range-partition-decl, range-partition-decl )

| MERGE PARTITION partition-name-1 INTO partition-name-2

| UNPARTITION

| PARTITION BY

range-partitioning-scheme

| hash-partitioning-scheme

| composite-partitioning-schemecomposite-partitioning-scheme


create-clause - (back to alter-clause)

column-name column-definition [ column-constraint ]

| table-constraint

| [ PARTITION BY ] range-partitioning-scheme


column definition - (back to create-clause)

column-name data-type [ NOT NULL | NULL ] [ IN dbspace-name ]

image


[ DEFAULT default-value | IDENTITY ]


column-constraint - (back to create-clause) [ CONSTRAINT constraint-name ]

{ UNIQUE

| PRIMARY KEY

| REFERENCES table-name [ (column-name ) ] [ actions ]

| CHECK ( condition )

| IQ UNIQUE ( integer )

}


table-constraint - (back to create-clause) [ CONSTRAINT constraint-name ]

{ UNIQUE ( column-name [ , … ] )

| PRIMARY KEY ( column-name [ , … ] )

| foreign-key-constraint

| CHECK ( condition )

}


foreign-key-constraint - (back to table-constraint)

FOREIGN KEY [ role-name ] [ ( column-name [ , … ] ) ]

... REFERENCES table-name [ ( column-name [ , … ] ) ]

... [ actions ]


actions - (back to foreign-key-constraint)

[ ON { UPDATE | DELETE } { RESTRICT } ]


column-alteration - (back to alter-clause)

{ column-data-type | alterable-column-attribute } [ alterable-column-attribute … ]


| ADD [ constraint-name ] CHECK ( condition )

| DROP { DEFAULT | CHECK | CONSTRAINT constraint-name }


alterable-column-attribute - (back to column-alteration) [ NOT ] NULL

| DEFAULT default-value

| [ CONSTRAINT constraint-name ] CHECK { NULL |( condition )

}


default-value - (back to alterable-column-attribute)

CURRENT { DATABASE |DATE |REMOTE USER |TIME |TIMESTAMP | USER |

PUBLISHER )

| string

| global variable

| [ - ] number

| ( constant-expression )

| built-in-function ( constant-expression )

| AUTOINCREMENT

| NULL

| TIMESTAMP

| LAST USER

| USER


drop-object - (back to alter-clause)

{ column-name


image

| CHECK constraint-name

| CONSTRAINT

| UNIQUE ( index-columns-list )

| PRIMARY KEY

| FOREIGN KEY fkey-name

| [ PARTITION ] range-partition-name

}


rename-object - (back to alter-clause)

new-table-name

| column-name TO new-column-name

| CONSTRAINT constraint-name TO new-constraint-name

| [ PARTITION ] range-partition-name TO new-range-partition-name


move-clause - (back to alter-clause)

{ ALTER column-name

MOVE

{ PARTITION ( range-partition-name TO new-dbspace-name)

| TO new-dbspace-name }

}

| MOVE PARTITION range-partition-name TO new-dbspace-name

| MOVE TO new-dbspace-name

| MOVE TABLE METADATA TO new-dbspace-name

}


image

range-partitioning-scheme - (back to alter-clause)

RANGE( partition-key )

( range-partition-decl [,range-partition-decl ...] )


partition-key - (back to range-partitioning-scheme)

column-name


range-partition-decl - (back to alter-clause) or (back to range- partitioning-scheme)

range-partition-name VALUES <= ( {constant | MAX } ) [ IN dbspace- name ]


hash-partitioning-scheme - (back to alter-clause) or (back to composite- partitioning-scheme)

HASH ( partition-key, … ] )


composite-partitioning-scheme - (back to alter-clause)

hash-partitioning-scheme SUBPARTITION range-partitioning-scheme

参数

(返回顶部) (第 57 页)

• { ENABLE | DISABLE } RLV STORE – 将该表注册到 RLV 存储库以进行实时内 存更新。不支持 IQ 临时表,也不能在 Multiplex 环境中运行。此值替代数据库选项 BASE_TABLES_IN_RLV 的值。

• ADD column-definition [ column-constraint ] – 向表中添加新列。

表必须为空才可指定 NOT NULL。添加 IDENTITY 或 DEFAULT AUTOINCREMENT

列时,表可能包含数据。如果列有缺省 IDENTITY 值,新列的所有行将用连续值


来填充。也可添加 FOREIGN 约束作为单列键的列约束。IDENTITY/DEFAULT AUTOINCREMENT 列的值唯一标识表中的每一行。

IDENTITY/DEFAULT AUTOINCREMENT 列存储在插入和更新期间自动生成的顺 序编号。DEFAULT AUTOINCREMENT 列也称为 IDENTITY 列。使用 IDENTITY/

DEFAULT AUTOINCREMENT 时,列必须是小数位数为 0 的整数数据类型之一或 精确的数值类型。有关列约束和 IDENTITY/DEFAULT AUTOINCREMENT 列的详 细信息,请参见 CREATE TABLE 语句。

IQ UNIQUE 约束 – 定义列的预期基数并确定是将该列装载为 Flat FP 还是 NBit FP。 IQ UNIQUE(n) 值显式设置为 0 会将该列装载为 Flat FP。不带 IQ UNIQUE 约束的 列将隐式装载为 NBit,一直到 FP_NBIT_AUTOSIZE_LIMIT、 FP_NBIT_LOOKUP_MB 和 FP_NBIT_ROLLOVER_MAX_MB 选项定义的限制。

不必使用 n 值小于 FP_NBIT_AUTOSIZE_LIMIT 的 IQ UNIQUE。自动大小调整功 能会自动将所有中低基数列的大小调整为 NBit。如果想要将列装载为 Flat FP,或 者想要在不同值的数量超出 FP_NBIT_AUTOSIZE_LIMIT 时将列装载为 NBit,请 使用 IQ UNIQUE。

image

注意:

• 当指定高 IQ UNIQUE 值时,请考虑内存的使用情况。如果计算机资源受到限 制,应避免带有 FP_NBIT_ENFORCE_LIMITS='OFF'(缺省设置)的装载。 在 SAP Sybase IQ 16.0 之前,IQ UNIQUE n 值 > 16777216 时会切换到 Flat FP。在 16.0 中,支持对较大的 IQ UNIQUE 值进行标识化,但鉴于基数和列宽,该值 可能需要非常多的内存资源。

• BIT、BLOB 和 CLOB 数据类型不支持 NBit 字典压缩。如果 FP_NBIT_IQ15_COMPATIBILITY=’OFF’,则在包含这些数据类型的 CREATE TABLE 或 ALTER TABLE 语句中指定的非零 IQ UNIQUE 列将返回一 个错误。

image

• ALTER column-name column-alteration – 更改列定义:

• SET DEFAULT default-value – 更改表中现有列的缺省值。您也可以为此任务使用 MODIFY 子句,但 ALTER 与 ISO/ANSI SQL 兼容,而 MODIFY 与其不兼 容。修改缺省值不会更改表中的任何现有值。

• DROP DEFAULT – 删除表中现有列的缺省值。您也可以为此任务使用 MODIFY 子句,但 ALTER 与 ISO/ANSI SQL 兼容,而 MODIFY 与其不兼容。删除缺 省值不会更改表中的任何现有值。

• ADD – 在列中添加已命名约束或 CHECK 条件。新约束或条件仅在定义后应 用于对表的操作。但不会对表中现有的值进行校验来确认其是否满足新约束或 条件。

• CONSTRAINT column-constraint-name – 可选列约束名用于以后单独修改或删 除约束,而不必修改整个列的约束。


• [ CONSTRAINT constraint-name ] CHECK ( condition ) – 此子句用于在列上添加

CHECK 约束。

• SET COMPUTE (expression) – 更改与计算列关联的表达式。当执行语句时,重 新计算列中的值,如果新表达式无效,则语句执行失败。

• DROP COMPUTE – 将列从计算列更改为非计算列。此语句不更改表中的任何 现有值。

• ADD table-constraint – 向表中添加约束。

也可为单列键或多列键添加外键约束作为表约束。如果指定 PRIMARY KEY,表 不得具有通过 CREATE TABLE 语句或其它 ALTER TABLE 语句创建的主键。有 关表约束的完整说明,请参见 CREATE TABLE 语句。

image

注意: 不能通过 MODIFY 修改表约束或列约束。要更改约束,必须通过 DELETE

删除旧约束并通过 ADD 添加新约束。

image

• DROP drop-object – 删除表对象:

• DROP column-name – 从表中删除列。如果列包含在任何多列索引、唯一性约 束、外键或主键中,则必须删除索引、约束或键后才能删除列。这不会删除引 用该列的 CHECK 约束。只有在 IDENTITY_INSERT 处于关闭状态并且表不 是局部临时表的情况下,才能删除 IDENTITY / DEFAULT AUTOINCREMENT 列。

• DROP CHECK – 删除表的所有检查约束。这包括表检查约束和列检查约束。

• DROP CONSTRAINT constraint-name – 删除表或指定列的已命名约束。

• DROP UNIQUE ( column-name, ... ) – 删除指定列上的唯一约束。同时也删除引 用该唯一约束的任何外键(而不是主键)。如果有关联的外键约束,系统会报 告错误。在删除主键约束之前,使用 ALTER TABLE 删除所有引用该主键的外 键。

• DROP PRIMARY KEY – 删除主键。同时也删除引用此表主键的所有外键。如 果有关联的外键约束,系统会报告错误。如果主键是未实施的主键,并且存在 关联的未实施的外键约束,则 DELETE 会返回错误。

• DROP FOREIGN KEY role-name – 删除该表的具有给定角色名称的外键约束。 系统将保留为该外键约束隐式创建的非唯一 HG 索引。用户可以使用 DROP INDEX 语句显式删除 HG 索引。

• DROP [ PARTITION ] – 删除指定分区。分区 P1 中的行将被删除,分区定义也 会被删除。不能删除最后一个分区,因为删除最后一个分区会将分区表转变为 未分区的表。(要合并分区表,请改用 UNPARTITION 子句。)例如:

image

CREATE TABLE foo (c1 INT, c2 INT) PARTITION BY RANGE (c1)

(P1 VALUES <= (100) IN dbsp1, P2 VALUES <= (200) IN dbsp2, P3 VALUES <= (MAX) IN dbsp3

) IN dbsp4); LOAD TABLE ….

ALTER TABLE DROP PARTITION P1;


• RENAME rename-object – 重命名表中的对象:

• RENAME new-table-name – 将表名更改为 new-table-name。必须修改任何使用 旧表名的应用程序。此外,系统自动分配了旧表名的任何外键都不会更改名 称。

• RENAME column-name TO new-column-name – 将列名更改为 new-column- name。必须修改任何使用旧列名的应用程序。

• RENAME [ PARTITION ] – 重命名现有分区。

• RENAME constraint-name TO new-constraint-name – 将约束名更改为 new- constraint-name。必须修改任何使用旧约束名的应用程序。

• MOVE clause – 移动表对象。表对象只能驻留在一个 dbspace 内。任何类型的 ALTER MOVE 都会阻止在整个移动期间内对表执行任何修改。

image

注意: 无法将对象移动到高速缓存 dbspace。

image

• MOVE TO – 当表映射至新的 dbspace 时,移动同一 dbspace 内驻留的所有表对 象,其中包括列、索引、唯一约束、主键、外键和元数据。不能在分区表上请求 ALTER Column MOVE TO 子句。

无法将 BIT 数据类型列显式置于 dbspace 中。BIT 数据类型不支持以下内容:

image

ALTER TABLE t2 alter c1_bit MOVE TO iq_main;

• MOVE TABLE METADATA – 将表的元数据移动到新的 dbspace。对于分区表, MOVE TABLE METADATA 还会移动各分区之间共享的元数据。

• MOVE PARTITION – 将指定分区移动到新的 dbspace。

• PARTITION BY – 将大表拆分为多个便于管理的小存储对象。各个分区共用父 表的相同逻辑属性,但可放置在单独的 dbspace 中并分别进行管理。SAP Sybase IQ 支持多个表分区模式:

• 散列分区

• 范围分区

• 复合分区

分区键是包含表分区键的一个或多个列。分区键可包含 NULL 和 DEFAULT 值, 但不能包含:

• LOB(BLOB 或 CLOB)列

• BINARY 或 VARBINARY 列

• 长度超过 255 个字节的 CHAR 或 VARCHAR 列

• BIT 列

• FLOAT/DOUBLE/REAL 列

• PARTITION BY RANGE – 根据分区列中的值范围对行进行分区。范围分区被限 定为有 1 个分区键列和最多 1024 个分区。在范围分区模式中,分区键是包含表分 区键的列:

image

range-partition-decl:

partition-name VALUES <= ( {constant-expr | MAX } [ ,


image

{ constant-expr | MAX }]... ) [ IN dbspace-name ]

分区名称是存储表行的新分区的名称。在表分区集合中,分区名称必须唯一。分 区名称是必需项。

• VALUE – 按升序为每个分区指定上限(含上限)。用户必须为每个范围分区 指定分区条件,确保将每一行只分配到一个分区。分区列允许 NULL 值,将 NULL 作为分区键值的行属于第一个表分区。但 NULL 不能是界限值。

第一个分区没有下限(MIN 值)。分区键第一列中单元格值为 NULL 的行属 于第一个分区。对于最后一个分区,您可以指定一个上限(含上限)或 MAX。 如果最后一个分区的上限值不是 MAX,则加载或插入其分区键值大于最后一个 分区上限值的任何行都将生成错误。

• Max – 表示无限大的上限,只能为最后一个分区指定。

• IN – 在 partition-decl 中指定其中应该包含分区行的 dbspace。 以下限制影响范围分区表的分区键和界限值:

• 只有所有现有行都属于第一分区,才能对未分区表进行范围分区。

• 分区界限必须是常量,而不是常量表达式。

• 分区界限必须按照分区的创建顺序以升序排列。也就是说,第二个分区的上限 必须大于第一个分区的上限,依此类推。 此外,分区界限值必须与相应的分区键列数据类型兼容。例如,VARCHAR 与 CHAR 兼容。

• 如果某个界限值的数据类型不同于其对应分区键列的数据类型,SAP Sybase IQ

会将界限值的数据类型转换为分区键列的数据类型,但存在以下例外情况:

• 不允许进行显式转换。以下示例尝试将 INT 显式转换为 VARCHAR,并生成错 误:

image

CREATE TABLE Employees(emp_name VARCHAR(20)) PARTITION BY RANGE(emp_name)

(p1 VALUES <=(CAST (1 AS VARCHAR(20))), p2 VALUES <= (CAST (10 AS VARCHAR(20)))

• 不允许执行可导致数据丢失的隐式转换。在以下示例中,分区界限与分区键类 型不兼容。舍入假设可导致数据丢失,并生成错误:

image

CREATE TABLE emp_id (id INT) PARTITION BY RANGE(id) (p1 VALUES

<= (10.5), p2 VALUES <= (100.5))

• 在以下示例中,分区界限与分区键数据类型兼容。界限值会直接转换为浮点 值。无需进行舍入处理,且支持转换:

image

CREATE TABLE id_emp (id FLOAT)

PARTITION BY RANGE(id) (p1 VALUES <= (10), p2 VALUES <= (100))

• 不允许将非二进制数据类型转换为二进制数据类型。例如,不允许进行以下转 换,并会返回错误:

image

CREATE TABLE newemp (name BINARY) PARTITION BY RANGE(name)


image

(p1 VALUES <= ("Maarten"), p2 VALUES <= ("Zymmerman")

• 在范围分区表中,不能将 NULL 用作界限。

• 如果分区键第一列中的单元格值计算结果为 NULL,则对应行将属于第一个分 区。SAP Sybase IQ 仅支持一列分区键,因此分区键中的任何 NULL 都会将对 应行分配到第一个分区。

• PARTITION BY HASH – 基于内部散列函数处理的分区-键值向各个分区映射数 据。散列分区键被限定为最多有 8 个列,其声明的列宽总和小于等于 5300 个字 节。对于散列分区,表创建者仅确定分区键列;分区的数量和位置将在内部确定。

在散列分区声明中,分区键是一个或多个列,其合成值将确定存储有各行数据的 分区:

image

hash-partitioning-scheme:

HASH ( partition-key [ , partition-key, … ] )

• 限制 –

• 只能对基表进行散列分区。试图对全局临时表或局部临时表进行分区将会 引发错误。

• 只能对空的未分区表进行散列分区。

• 不能添加、删除、合并或拆分散列分区。

• 不能为散列分区键添加列或从中删除列。

• PARTITION BY HASH RANGE – 按范围对已进行散列分区的表划分子分区。在 散列范围分区模式声明中,SUBPARTITION BY RANGE 子句将向现有散列范围 分区表添加一个新的范围子分区:

image

hash-range-partitioning-scheme:

PARTITION BY HASH ( partition-key [ , partition-key, … ] )

[ SUBPARTITION BY RANGE ( range-partition-decl [ , range- partition-decl ... ] ) ]

散列分区指定如何在逻辑上分布和托管数据;范围子分区指定如何在物理上放置 数据。新的范围子分区通过散列进行逻辑分区,其散列分区键与现有的散列范围 分区表相同。范围子分区键被限定为仅一列。

• 限制 –

• 只能对基表进行散列分区。试图对全局临时表或局部临时表进行分区将会 引发错误。

• 只有散列分区表为空表时才能按范围对其进行子分区。

• 不能添加、删除、合并或拆分散列分区。

• 不能为散列分区键添加列或从中删除列。

image

注意: 与散列范围分区相同,范围分区和复合分区模式要求有单独授权的 VLDB

管理组件。

image

• MERGE PARTITION – 将 partition-name-1 合并到 partition-name-2。如果两个分区 相邻且数据驻留在同一个 dbspace 内,则可合并这两个分区。只能将分区值较低


的分区合并到分区值较高的相邻分区内。请注意,服务器不会检查分区所合并到的 dbspace 的 CREATE 特权。有关如何创建相邻分区的示例,请参见 CREATE TABLE 语句示例。

• RENAME PARTITION – 重命名现有 PARTITION。

• UNPARTITION – 从分区表中删除分区。每一列都置于单个 dbspace 内。请注意, 服务器不会检查所有分区数据将移动到的目标 dbspace 的 CREATE 特权。ALTER TABLE UNPARTITION 会阻塞所有数据库活动。

• ALTER OWNER – 更改表的所有者。ALTER OWNER 子句不能与 ALTER TABLE 语 句的任何其它 [alter-clause] 子句配合使用。

• [ PRESERVE | DROP ] PERMISSIONS – 如果不希望新的所有者拥有与旧所有者 相同的特权,则可使用 DROP 特权子句(缺省)来删除允许用户访问该表的所 有显式授予的特权。隐式授予该表所有者的特权将被授予新的所有者,并从旧 的所有者删除这些特权。

• [ PRESERVE | DROP ] FOREIGN KEYS – 如果想防止新的所有者访问被引用表 中的数据,可使用 DROP FOREIGN KEYS 子句(缺省)来删除该表中的所有 外键以及引用该表的所有外键。除非所有引用表都属于新的所有者,否则无法将 PRESERVE FOREIGN KEYS 子句与 DROP PERMISSIONS 子句配合使用。

在以下情况下,ALTER TABLE ALTER OWNER 语句会失败:

• 存在另一个与原始表同名的表,并且该表属于新用户。

• 同时指定了 PRESERVE FOREIGN KEYS 和 PRESERVE PERMISSIONS 子句, 并且有一个外键所属的用户不是引用该表的新表所有者,而且该外键依赖于隐 式授予的特权(如授予表所有者的特权)。为了避免语句失败,可将 SELECT 特权显式授予引用表的原始所有者,或者删除外键。

• 指定了 PRESERVE FOREIGN KEYS 子句,但未指定 PRESERVE PERMISSIONS 子句,并且有一个外键所属的用户不是引用该表的新表所有者。为了避免语句 失败,可删除外键。

• 指定了 PRESERVE FOREIGN KEYS 子句,并且表中包含一个依赖于隐式授予 的特权(如授予表所有者的特权)的外键。为了避免语句失败,可将被引用表的 SELECT 特权显式授予新所有者,或者删除外键。

• 表包含一个具有缺省值且引用序列的列,而序列生成器的 USAGE 特权依赖于 隐式授予的特权(如授予序列所有者的特权)。为了避免语句失败,可将序列 生成器的 USAGE 特权显式授予表的新所有者。

• 存在依赖于原始表的已启用实例化视图。


示例

(返回顶部) (第 57 页)

• 示例 1 – 向 Employees 表添加一个新列,说明他们在哪个办公室工作:


image

ALTER TABLE Employees ADD office CHAR(20)

• 示例 2 – 从 Employees 表中删除 office 列:

image

ALTER TABLE Employees DROP office

• 示例 3 – 向 Customers 表添加一列,用于为每个客户指派一个销售联系人:

image

ALTER TABLE Customers

ADD SalesContact INTEGER REFERENCES Employees (EmployeeID)

• 示例 4 – 向 Customers 表添加一个新列 CustomerNum,并指定缺省值 88:

image

ALTER TABLE Customers

ADD CustomerNum INTEGER DEFAULT 88

• 示例 5 – 将 c2、c4 和 c5 的 FP 索引从 dbspace Dsp3 移动到 Dsp6。c1 的 FP 索 引保留在 Dsp1 中。c3 的 FP 索引保留在 Dsp2 中。c5 的主键保留在 Dsp4 中。 DATE 索引 c4_date 保留在 Dsp5 中。

image

CREATE TABLE foo (

c1 INT IN Dsp1, c2 VARCHAR(20), c3 CLOB IN Dsp2, c4 DATE,

c5 BIGINT,

PRIMARY KEY (c5) IN Dsp4) IN Dsp3);


CREATE DATE INDEX c4_date ON foo(c4) IN Dsp5; ALTER TABLE foo

MOVE TO Dsp6;

• 示例 6 – 只将 FP 索引 c1 从 dbspace Dsp1 移动到 Dsp7:

image

ALTER TABLE foo ALTER c1 MOVE TO Dsp7

• 示例 7 – 使用多个 ALTER TABLE 子句对分区进行移动、拆分、重命名和合并。 创建分区表:

image

CREATE TABLE bar (

c1 INT, c2 DATE,

c3 VARCHAR(10)) PARTITION BY RANGE(c2)

(p1 VALUES <= ('2005-12-31') IN dbsp1, p2 VALUES <= ('2006-12-31') IN dbsp2, P3 VALUES <= ('2007-12-31') IN dbsp3, P4 VALUES <= ('2008-12-31') IN dbsp4);

INSERT INTO bar VALUES(3, '2007-01-01', 'banana nut'); INSERT INTO BAR VALUES(4, '2007-09-09', 'grape jam'); INSERT INTO BAR VALUES(5, '2008-05-05', 'apple cake');

将分区 p2 移动到 dbsp5:

image

ALTER TABLE bar MOVE PARTITION p2 TO DBSP5;


将分区 p4 拆分为 2 个分区:

image

ALTER TABLE bar SPLIT PARTITION p4 INTO (P41 VALUES <= ('2008-06-30') IN dbsp4,

P42 VALUES <= ('2008-12-31') IN dbsp4);

下面的 SPLIT PARTITION 报告一个错误,因为它需要移动数据。拆分后,并非所 有现有行都位于同一分区内。

image

ALTER TABLE bar SPLIT PARTITION p3 INTO (P31 VALUES <= ('2007-06-30') IN dbsp3, P32 VALUES <= ('2007-12-31') IN dbsp3);

会报告以下错误:

image

No data move is allowed, cannot split partition p3.

下面的 SPLIT PARTITION 报告一个错误,因为它更改了分区的边界值:

image

ALTER TABLE bar SPLIT PARTITION p2 INTO (p21 VALUES <= ('2006-06-30') IN dbsp2,

P22 VALUES <= ('2006-12-01') IN dbsp2);

会报告以下错误:

image

Boundary value for the partition p2 cannot be changed.

将分区 p3 合并到 p2。由于不允许将边界值较高的分区合并到边界值较低的分 区,因此,系统会报告错误。

image

ALTER TABLE bar MERGE PARTITION p3 into p2;

会报告以下错误:

image

Partition 'p2' is not adjacent to or before partition 'p3'.

将分区 p2 合并到 p3:

image

ALTER TABLE bar MERGE PARTITION p2 INTO P3;

将分区 p1 重命名为 p1_new:

image

ALTER TABLE bar RENAME PARTITION p1 TO p1_new;

对表 bar 取消分区:

image

ALTER TABLE bar UNPARTITION;

对表 bar 进行分区。此命令会报告错误,因为所有行必须位于第一个分区中。

image

ALTER TABLE bar PARTITION BY RANGE(c2)

(p1 VALUES <= ('2005-12-31') IN dbsp1, P2 VALUES <= ('2006-12-31') IN DBSP2, P3 VALUES <= ('2007-12-31') IN dbsp3, P4 VALUES <= ('2008-12-31') IN dbsp4);

会报告以下错误:

image

All rows must be in the first partition.


对表 bar 进行分区:

image

ALTER TABLE bar PARTITION BY RANGE(c2)

(p1 VALUES <= ('2008-12-31') IN dbsp1, P2 VALUES <= ('2009-12-31') IN dbsp2, P3 VALUES <= ('2010-12-31') IN dbsp3, P4 VALUES <= ('2011-12-31') IN dbsp4);

• 示例 8 – 更改表 tab1,使其不再注册到 RLV 存储库中以进行实时内存更新。

image

ALTER TABLE tab1 DISABLE RLV STORE


用法

(返回顶部) (第 57 页)

ALTER TABLE 语句可更改以前创建的表中的表属性(列定义和约束)。该语法允许 使用一组变更子句;但在每个 ALTER TABLE 语句中,只能添加、修改或删除一个表 约束或列约束。只要 ALTER TABLE 语句影响了当前正由其它连接使用的表,就会禁 止该语句。ALTER TABLE 可能很耗时,并且在处理语句时,服务器不会处理引用相 同表的请求。

image

注意: 您不能更改本地临时表,但可以在仅有一个连接使用全局临时表时,更改全 局临时表。

image

SAP Sybase IQ 强制执行 REFERENCES 和 CHECK 约束。只有在满足以下条件时, 才会评估添加到 ALTER TABLE 语句的表和/或列检查约束:变更表操作过程中在所 添加的其中一个新列中定义这些约束。有关 CHECK 约束的详细信息,请参见 “CREATE TABLE 语句”。

如果在视图定义中使用 SELECT * ,并且变更 SELECT * 所引用的表,则您必须运行 ALTER VIEW <viewname> RECOMPILE 以确保视图定义正确,并防止在查询该视图时 出现意外的结果。

副作用:

• 自动提交。ALTER 和 DROP 选项用于关闭当前连接的所有游标。Interactive SQL

数据窗口同时也会被清除。

• ALTER TABLE 操作开始时执行检查点。

• 一旦更改了列或表,引用更改列的任何存储过程、视图或其它项将不再有效。


标准

(返回顶部) (第 57 页)

• SQL - ISO/ANSI SQL 语法的服务商扩充。

• SAP Sybase 数据库产品 - 一些子句受 SAP Adaptive Server® Enterprise 的支持。


权限

(返回顶部) (第 57 页)


句法 1

需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 表的 ALTER 特权

• 您拥有该表

句法 2

语法 1 所需的系统特权因使用的子句而异。


子句

所需特权

Add

需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 基础表的 ALTER 特权

• 您拥有基础表

UNIQUE、PRIMARY KEY、FOREIGN KEY 或 IQ UNIQUE 列约束 – 需要以

上特权,外加基础表的 REFERENCES 特权。

FOREIGN KEY 表约束需要以上特权,外加以下特权之一:

• CREATE ANY INDEX 系统特权

• CREATE ANY OBJECT 系统特权

• 基表的 REFERENCES 特权

PARTITION BY RANGE 需要以上特权,外加下列特权之一:

• CREATE ANY OBJECT 系统特权

• 对要创建分区的 dbspace 的 CREATE 特权

Alter

需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 表的 ALTER 特权

• 您拥有该表。

变更主键或唯一约束还需要表的 REFERENCES 特权。


子句

所需特权

Drop

删除不含约束的列 – 需要以下特权之一:

• ALTER ANY OBJECT 系统特权

• ALTER ANY TABLE 系统特权

• 基础表的 ALTER 特权

• 您拥有基础表

删除含有约束的列或表需要以上特权以及 REFERENCES 特权(如果使用

ALTER 特权)。

删除自身拥有的表分区 – 无需任何权限。

删除其他用户拥有的表分区 – 需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 表的 ALTER 特权

RENAME

需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 表的 ALTER 特权

• 您拥有该表

Move

需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 系统特权

• 基础表的 ALTER 特权

• 您拥有基础表

另外,还需要以下特权之一:

• CREATE ANY OBJECT 系统特权

• 分区要移动到的目标 dbspace 的 CREATE 特权


子句

所需特权

Split Partition

将自身拥有的表分区 – 无需任何权限。

将其他用户拥有的表分区 – 需要以下特权之一:

• SELECT ANY TABLE 系统特权

• 表的 SELECT 特权

另外,还需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 表的 ALTER 特权

Merge

自身拥有的表 – 无需任何权限。

Partition、

Unpartition

其他用户拥有的表 – 需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 表的 ALTER 特权

Partition By

需要以下特权之一:

• CREATE ANY OBJECT 系统特权

• 对要创建分区的 dbspace 的 CREATE 特权

另外,还需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权

• 表的 ALTER 特权

• 您拥有该表

或 disable RLV store

需要以下特权之一:

• ALTER ANY TABLE 系统特权

• ALTER ANY OBJECT 系统特权


另请参见

• CREATE TABLE 语句 (第 214 页)

• DROP 语句 (第 266 页)

• IDENTITY_INSERT 选项 (第 578 页)

• FP_NBIT_AUTOSIZE_LIMIT 选项 (第 564 页)

• FP_NBIT_ENFORCE_LIMITS 选项 (第 566 页)

• FP_NBIT_LOOKUP_MB 选项 (第 568 页)

• FP_NBIT_ROLLOVER_MAX_MB 选项 (第 569 页)




--------------------------------------华丽的分割线-------------------------------------------------------------------------

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)上提取数据的非常规恢复工具
  1. 适用于所有的SQL Anywhere版本    包括:5.x,6.x,7.x,8.x,9.x,10.x,11.x,12.x,16.x,17.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使用介绍

Sybase SQL Anywhere数据库恢复工具ReadASADB适用场景

各种误操作:

  1. 误截断表(truncate table)
  2. 误删除表(drop table)
  3. 错误的where条件误删数据
  4. 误删除db或log文件
  5. 误删除表中的字段

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的主要功能:

  1. 被勒索病毒加密数据文件及备份文件情况下的恢复;
  2. 系统崩溃只剩下数据文件的情况下的恢复,甚至数据库文件不存在而只有损坏的备份文件情况下的恢复;
  3. 因断电、硬盘坏道等造成数据库文件损坏情况下的恢复;
  4. delete数据恢复、误update数据恢复、误删除表(drop)恢复、误truncate表恢复 等;
  5. 各种Sybase内部系统表损坏、索引错误的修复;
  6. master数据库损坏而无法正常运行情况下的恢复;
  7. Sybase数据库被标记为可疑,不可用等情况的恢复;
  8. Sybase数据库中数据文件内部出现坏块情况下的恢复;
  9. Sybase数据库无数据文件但有日志文件的情况下的恢复;
  10. Sybase数据库只有数据文件无任何日志文件的情况下的恢复;
  11. Sybase数据文件被误删除情况下的碎片提取恢复;
  12. 磁盘阵列上的Sybase数据库被误格式化情况下的数据库恢复;
  13. 数据库sysobjects等系统表损坏无法正常应用情况下的恢复;
  14. Sybase数据库还原数据库出现失败情况下的恢复;
  15. 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.x


-------------------------------------------------------------------------------------------

SQL Server数据库恢复工具SQLRescue:

一个不依赖数据库管理系统、直接从SQL Server数据库文件上提取数据的业内领先的恢复工具!
能够从损坏的SQL Server数据库文件(.mdf)上提取数据的非常规恢复工具。

SQL Server数据库恢复工具SQLRescue的主要功能:

  1. 系统崩溃只剩下数据文件的情况下的恢复,即无日志文件或者日志文件损坏情况下的恢复;
  2. 断电导致数据库文件损坏情况下的恢复;
  3. 硬盘坏道造成数据库损坏情况下的恢复;
  4. 数据文件内部存在坏页情况下的恢复;
  5. 企业管理器误删除数据表记录,管理软件误删除数据表记录的恢复;
  6. 并闩锁错误、格式化、误删除后导致软件不能使用的情况;
  7. 无法读取并闩锁页sysindexes失败情况下的修复;
  8. 数据文件被误删除情况下的碎片提取恢复;
  9. 系统表损坏、索引错误、误删除数据库表、删除记录的数据找回;
  10. master数据库损坏而无法正常运行情况下的恢复;
  11. 数据文件无法附加情况下的数据恢复;
  12. 数据库被标记为可疑,质疑,不可用等情况的恢复;
  13. 数据库sysobjects等系统表损坏情况下的恢复;
  14. 数据被误(drop、delete、truncate)删除表数据的恢复,误update后的数据恢复等;
  15. 还原时报一致性错误,错误823等情况下的数据恢复,各种错误提示的数据库文件修复;
  16. 数据库被误格式化等情况下的数据库恢复;
  17. 日志收缩造成数据库损坏情况下的恢复;
  18. 仅剩损坏的备份文件情况下的恢复。

SQL Server数据库恢复工具SQLRescue技术特点:

只要SQL Server数据库的数据文件存在,我们就有办法帮您从数据文件中找回重要数据。
  1. 从数据文件中直接恢复数据
  2. 不能附加时直接恢复数据并生成新的数据库
  3. 系统表损坏的数据库修复
  4. 快速修复SQL 823错误、连接中断错误

SQL Server数据库恢复工具SQLRescue支持的版本:

Microsoft SQL Server 7.0, 2000, 2005, 2008, 2008R2, 2012, 2014, 2016, 2017,2019。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------