随着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数据库技术问题需要咨询,请联系我!
以下官方手册为SAP IQ 16.0 SP03中文版:
ALTER TABLE 语句
转至参数 (第 370 页) 转至示例 (第 376 页) 转至用法 (第 379 页) 转至标准 (第 379 页) 转至权限 (第 379 页)
语法
语法 1 - Alter Owner
ALTER TABLE table_name ALTER OWNER TO new_owner
[ { PRESERVE | DROP } PERMISSIONS ] [ { PRESERVE | DROP } FOREIGN KEYS ]
语法 2
ALTER TABLE [ owner.]table-name
|{ ENABLE | DISABLE } RLV STORE
{ alter-clause, ... }
alter-clause - (back to Syntax 2)
| ALTER column-name column-alteration
| ALTER [ CONSTRAINT constraint-name ] CHECK ( condition )
| SPLIT PARTITION range-partition-name
INTO ( range-partition-decl, range-partition-decl )
| MERGE PARTITION partition-name-1 INTO partition-name-2
| UNPARTITION
| PARTITION BY
| composite-partitioning-schemecomposite-partitioning-scheme
create-clause - (back to alter-clause)
column-name column-definition [ column-constraint ]
| [ PARTITION BY ] range-partitioning-scheme
column definition - (back to create-clause)
column-name data-type [ NOT NULL | NULL ] [ IN dbspace-name ]
[ 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 [ , … ] )
| 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
| [ 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
| 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
}
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
(返回顶部) (第 368 页)
• { 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。
注意:
• 当指定高 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 列将返回一 个错误。
• 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 语句。
注意: 不能通过 MODIFY 修改表约束或列约束。要更改约束,必须通过 DELETE
删除旧约束并通过 ADD 添加新约束。
• 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 子句。)例如:
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 都会阻止在整个移动期间内对表执行任何修改。
注意: 无法将对象移动到高速缓存 dbspace。
• MOVE TO – 当表映射至新的 dbspace 时,移动同一 dbspace 内驻留的所有表对 象,其中包括列、索引、唯一约束、主键、外键和元数据。不能在分区表上请求 ALTER Column MOVE TO 子句。
无法将 BIT 数据类型列显式置于 dbspace 中。BIT 数据类型不支持以下内容:
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 个分区。在范围分区模式中,分区键是包含表分 区键的列:
range-partition-decl:
partition-name VALUES <= ( {constant-expr | MAX } [ ,
{ 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,并生成错 误:
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)))
• 不允许执行可导致数据丢失的隐式转换。在以下示例中,分区界限与分区键类 型不兼容。舍入假设可导致数据丢失,并生成错误:
CREATE TABLE emp_id (id INT) PARTITION BY RANGE(id) (p1 VALUES
<= (10.5), p2 VALUES <= (100.5))
• 在以下示例中,分区界限与分区键数据类型兼容。界限值会直接转换为浮点 值。无需进行舍入处理,且支持转换:
CREATE TABLE id_emp (id FLOAT)
PARTITION BY RANGE(id) (p1 VALUES <= (10), p2 VALUES <= (100))
• 不允许将非二进制数据类型转换为二进制数据类型。例如,不允许进行以下转 换,并会返回错误:
CREATE TABLE newemp (name BINARY) PARTITION BY RANGE(name)
(p1 VALUES <= ("Maarten"), p2 VALUES <= ("Zymmerman")
• 在范围分区表中,不能将 NULL 用作界限。
• 如果分区键第一列中的单元格值计算结果为 NULL,则对应行将属于第一个分 区。SAP Sybase IQ 仅支持一列分区键,因此分区键中的任何 NULL 都会将对 应行分配到第一个分区。
• PARTITION BY HASH – 基于内部散列函数处理的分区-键值向各个分区映射数 据。散列分区键被限定为最多有 8 个列,其声明的列宽总和小于等于 5300 个字 节。对于散列分区,表创建者仅确定分区键列;分区的数量和位置将在内部确定。
在散列分区声明中,分区键是一个或多个列,其合成值将确定存储有各行数据的 分区:
hash-partitioning-scheme:
HASH ( partition-key [ , partition-key, … ] )
• 限制 –
• 只能对基表进行散列分区。试图对全局临时表或局部临时表进行分区将会 引发错误。
• 只能对空的未分区表进行散列分区。
• 不能添加、删除、合并或拆分散列分区。
• 不能为散列分区键添加列或从中删除列。
• PARTITION BY HASH RANGE – 按范围对已进行散列分区的表划分子分区。在 散列范围分区模式声明中,SUBPARTITION BY RANGE 子句将向现有散列范围 分区表添加一个新的范围子分区:
hash-range-partitioning-scheme:
PARTITION BY HASH ( partition-key [ , partition-key, … ] )
[ SUBPARTITION BY RANGE ( range-partition-decl [ , range- partition-decl ... ] ) ]
散列分区指定如何在逻辑上分布和托管数据;范围子分区指定如何在物理上放置 数据。新的范围子分区通过散列进行逻辑分区,其散列分区键与现有的散列范围 分区表相同。范围子分区键被限定为仅一列。
• 限制 –
• 只能对基表进行散列分区。试图对全局临时表或局部临时表进行分区将会 引发错误。
• 只有散列分区表为空表时才能按范围对其进行子分区。
• 不能添加、删除、合并或拆分散列分区。
• 不能为散列分区键添加列或从中删除列。
注意: 与散列范围分区相同,范围分区和复合分区模式要求有单独授权的 VLDB
管理组件。
• 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 特权显式授予表的新所有者。
• 存在依赖于原始表的已启用实例化视图。
(返回顶部) (第 368 页)
• 示例 1 – 向 Employees 表添加一个新列,说明他们在哪个办公室工作:
ALTER TABLE Employees ADD office CHAR(20)
• 示例 2 – 从 Employees 表中删除 office 列:
ALTER TABLE Employees DROP office
• 示例 3 – 向 Customers 表添加一列,用于为每个客户指派一个销售联系人:
ALTER TABLE Customers
ADD SalesContact INTEGER REFERENCES Employees (EmployeeID)
• 示例 4 – 向 Customers 表添加一个新列 CustomerNum,并指定缺省值 88:
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 中。
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:
ALTER TABLE foo ALTER c1 MOVE TO Dsp7
• 示例 7 – 使用多个 ALTER TABLE 子句对分区进行移动、拆分、重命名和合并。 创建分区表:
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:
ALTER TABLE bar MOVE PARTITION p2 TO DBSP5;
将分区 p4 拆分为 2 个分区:
ALTER TABLE bar SPLIT PARTITION p4 INTO (P41 VALUES <= ('2008-06-30') IN dbsp4,
P42 VALUES <= ('2008-12-31') IN dbsp4);
下面的 SPLIT PARTITION 报告一个错误,因为它需要移动数据。拆分后,并非所 有现有行都位于同一分区内。
ALTER TABLE bar SPLIT PARTITION p3 INTO (P31 VALUES <= ('2007-06-30') IN dbsp3, P32 VALUES <= ('2007-12-31') IN dbsp3);
会报告以下错误:
No data move is allowed, cannot split partition p3.
下面的 SPLIT PARTITION 报告一个错误,因为它更改了分区的边界值:
ALTER TABLE bar SPLIT PARTITION p2 INTO (p21 VALUES <= ('2006-06-30') IN dbsp2,
P22 VALUES <= ('2006-12-01') IN dbsp2);
会报告以下错误:
Boundary value for the partition p2 cannot be changed.
将分区 p3 合并到 p2。由于不允许将边界值较高的分区合并到边界值较低的分 区,因此,系统会报告错误。
ALTER TABLE bar MERGE PARTITION p3 into p2;
会报告以下错误:
Partition 'p2' is not adjacent to or before partition 'p3'.
将分区 p2 合并到 p3:
ALTER TABLE bar MERGE PARTITION p2 INTO P3;
将分区 p1 重命名为 p1_new:
ALTER TABLE bar RENAME PARTITION p1 TO p1_new;
对表 bar 取消分区:
ALTER TABLE bar UNPARTITION;
对表 bar 进行分区。此命令会报告错误,因为所有行必须位于第一个分区中。
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);
会报告以下错误:
All rows must be in the first partition.
对表 bar 进行分区:
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 存储库中以进行实时内存更新。
ALTER TABLE tab1 DISABLE RLV STORE
用法
(返回顶部) (第 368 页)
ALTER TABLE 语句可更改以前创建的表中的表属性(列定义和约束)。该语法允许 使用一组变更子句;但在每个 ALTER TABLE 语句中,只能添加、修改或删除一个表 约束或列约束。只要 ALTER TABLE 语句影响了当前正由其它连接使用的表,就会禁 止该语句。ALTER TABLE 可能很耗时,并且在处理语句时,服务器不会处理引用相 同表的请求。
注意: 您不能更改本地临时表,但可以在仅有一个连接使用全局临时表时,更改全 局临时表。
SAP Sybase IQ 强制执行 REFERENCES 和 CHECK 约束。只有在满足以下条件时, 才会评估添加到 ALTER TABLE 语句的表和/或列检查约束:变更表操作过程中在所 添加的其中一个新列中定义这些约束。有关 CHECK 约束的详细信息,请参见 “CREATE TABLE 语句”。
如果在视图定义中使用 SELECT * ,并且变更 SELECT * 所引用的表,则您必须运行 ALTER VIEW <viewname> RECOMPILE 以确保视图定义正确,并防止在查询该视图时 出现意外的结果。
副作用:
• 自动提交。ALTER 和 DROP 选项用于关闭当前连接的所有游标。Interactive SQL
数据窗口同时也会被清除。
• ALTER TABLE 操作开始时执行检查点。
• 一旦更改了列或表,引用更改列的任何存储过程、视图或其它项将不再有效。
(返回顶部) (第 368 页)
• SQL - ISO/ANSI SQL 语法的服务商扩充。
• SAP Sybase 数据库产品 - 一些子句受 SAP Adaptive Server® Enterprise 的支持。
(返回顶部) (第 368 页)
句法 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 系统特权 |
另请参见
• 限制 (第 126 页)
• 范围分区 (第 127 页)
• 散列分区 (第 128 页)
• 散列范围分区 (第 129 页)
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。+-------------------------------------华丽的分割线-------------------------------------------------------------------------