提供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 FPIQ UNIQUE(n) 值显式设置为 0 会将该列装载为 Flat FP。不带 IQ UNIQUE 约束的 列将隐式装载为 NBit,一直到 FP_NBIT_AUTOSIZE_LIMITFP_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 值进行标识化,但鉴于基数和列宽,该值 可能需要非常多的内存资源。

• BITBLOB 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 值, 但不能包含:

• LOBBLOB 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 – 将 c2c4 c5 FP 索引从 dbspace Dsp3 移动到 Dsp6c1 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 特权

您拥有基础表

UNIQUEPRIMARY KEYFOREIGN 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。
+-------------------------------------华丽的分割线-------------------------------------------------------------------------