远程Sybase数据库技术支持,联系手机:13811580958,QQ:289965371!

 

随着Sybase被完全整合到SAP下,Sybase原来的支持网站被SAP Support Portal取代。
只有购买了SAP服务的用户才能使用账号登录SAP Support Portal进行介质下载、补丁升级、报Incident等。
目前,原Sybase所有产品(包括:Adaptive Server Enterprise、Sybase IQ、Replication Server、PowerDesigner等)的官方手册仍然可以从http://infocenter.sybase.com/help/index.jsp进行浏览或下载。暂不清楚该网站http://infocenter.sybase.com/help/index.jsp何时会被完全迁移到SAP Support上!
Sybase官方手册英文版有html和pdf两种格式,而中文版手册只有pdf一种格式。为了国内Sybase用户更方便、快捷地搜索Sybase常见产品的官方手册内容,特将中文版Sybase官方手册转为html格式!
Sybase产品官方手册中文版的html格式所有内容的版权归SAP公司所有!本博客站长是Sybase数据库的铁杆粉丝!

如有Sybase数据库技术问题需要咨询,请联系我!

  QQ :289965371 点击这里给我发消息
  Email:

以下官方手册为ASE 15.7 ESD#2中文版:

  1. 新增功能公告 适用于 Windows、Linux 和 UNIX 的 Open Server 15.7 和 SDK 15.7
  2. 新增功能摘要
  3. 新增功能指南
  4. ASE 15.7 发行公告
  5. 配置指南(windows)
  6. 安装指南(windows)
  7. 参考手册:构件块
  8. 参考手册:命令
  9. 参考手册:过程
  10. 参考手册:表
  11. Transact-SQL® 用户指南
  12. 系统管理指南,卷 1
  13. 系统管理指南,卷 2
  14. 性能和调优系列:基础知识
  15. 性能和调优系列:锁定和并发控制
  16. 性能和调优系列:监控表
  17. 性能和调优系列:物理数据库调优
  18. 性能和调优系列:查询处理和抽象计划
  19. 性能和调优系列:使用 sp_sysmon 监控 Adaptive Server
  20. 性能和调优系列:利用统计分析改进性能
  21. 程序员参考 jConnect for JDBC 7.0.7
  22. Adaptive Server Enterprise 中的 Java
  23. 组件集成服务用户指南
  24. Ribo 用户指南
  25. 内存数据库用户指南
  26. Sybase Control Center for Adaptive Server® Enterprise
  27. 安全性管理指南
  28. 实用程序指南

 


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

alter database

说明 增加分配给数据库以及存档数据库的修改页部分的空间量。改变一个或 多个数据库范围的属性,如 DML 日志记录级别、压缩的缺省值、行内 大对象 (LOB) 存储等。

语法 alter database database_name

[on {default | database_device} [= size] [, database_device [= size]]...]

[log on {default | database_device} [= size] [, database_device [= size]]...]

set { [durability = { no_recovery | at_shutdown | full}] [[,] dml_logging = {full | minimal} ]

[[,] template = { database_name | NULL}] [, [no] async_init]

[, compression = {none | row | page}]

[, lob_compression = {compression_level | off}]

[,] inrow_lob_length = value [log off database_device

[= size | [from logical_page_number] [to logical_page_number]] [, database_device

[= size | [from logical_page_number] [to logical_page_number]] [with override]

[for load]

[for proxy_update]

参数 database_name

是数据库的名称。数据库名称可以是文字、变量或存储过程参数。


on

指示数据库扩展的大小和位置。如果您的日志和数据在不同的设备段 上,请为数据设备使用 on,并为日志设备使用 log on

default

指示 alter database 可将数据库扩展放到任何缺省数据库设备上 (如

《参考手册:过程》的 “系统过程”中的 sp_helpdevice 存储过程所 示)。若要指定数据库扩展的大小而不指定其确切位置,请使用:

on default = size

若要将数据库设备的状态更改为缺省状态,请使用 sp_diskdefault

database_device 是用于放置数据库扩展的数据库设备的名称。一个数据库可以存储于 多个数据库设备上,每个设备都可有不同的空间量。若要在 Adaptive Server ® 中添加数据库设备,请使用 disk init


size

是分配给数据库扩展的空间量。以下是示例单位指示符,交替使用了 大写、小写、单引号和双引号:“k”或 “K”(千字节)、“m”或 “M”(兆字节)、“g”或 “G”(千兆字节)以及 “t”或 “T

(兆兆字节)。 Sybase ® 建议始终包括单位指示符。如果不包括单位 指示符,则引号是可选的。不过,如果包括单位指示符,则必须使用 引号。如果不提供单位指示符,则假定提供的值的单位为兆字节。

如果不指定值,则 alter database 会将数据库扩展 1MB 4 个分配单 元 (选择两者中的较大者)。最小量为:

image

服务器的逻辑页大小 数据库扩展大小

2K 1MB

4K 1MB

8K 2MB

16K 4MB


log on

指示您希望为数据库的事务日志指定额外空间。log on 子句使用与 on

子句相同的缺省值。

durability

确定数据库的持久性级别,取以下值之一:

full – 将所有事务都写入磁盘。如果创建数据库时不指定持久性 级别,此值将为缺省值,以确保从服务器故障中完全恢复。除 tempdb 之外的所有系统数据库都使用此持久性级别 (用于磁盘 驻留式数据库的传统持久性级别)。 tempdb 使用的持久性级别为 no_recovery

no_recovery – 只有服务器处于运行状态时,事务才是持久性的。 如果服务器出现故障或正常关闭,那么所有持久性都将丢失。对 于持久性设置为 no_recovery 的磁盘驻留式数据库, Adaptive Server 会在运行时以不可控方式定期向磁盘设备中写入数据。用 no_recovery 创建的数据库以任何方式 (正常、非正常或服务器故 障及重新启动)关闭后均无法恢复,但会基于 model 或模板数据 库 (如果已定义)重新创建该数据库。

at_shutdown – 在服务器运行时以及正常关闭后,事务是持久性 的。如果服务器出现故障,所有持久性都将丢失。

[no] async_init

启用或禁用异步数据库初始化。


compression

指示 alter database 对此数据库中的新建表应用的压缩级别。

none – 不压缩数据。

row – 压缩单个行中的一个或多个数据项。只有在压缩形式比未 压缩形式更节省空间时, Adaptive Server 才会用 row 压缩形式存 储数据。

page – 当页面已满时,则会使用页级压缩来压缩现有的采用行 压缩形式的数据行,从而创建页级字典、索引和字符编码条目。

Adaptive Server 只有已经在行级压缩数据后才会在页级压缩数 据,因此,将压缩设置为 page 意味着 page row 压缩。

lob_compression = off | compression_level

确定新创建的表的压缩级别。选择 off 意味着表不使用 LOB 压缩。

compression_level

表压缩级别:

• 0 – 不压缩 lob 列。

• 1 9 Adaptive Server 使用 ZLib 压缩。通常,压缩级别数字越 大, Adaptive Server 压缩 LOB 数据的程度就更大,压缩和非压缩 数据之间的比率就越大 (也就是说,压缩数据与非压缩数据大小 相比,节省的空间量就越大 (以字节为单位))。

但是,压缩量取决于 LOB 内容,压缩级别越高,进程的 CPU 占 用率就越高。也就是说,级别 9 提供的压缩率最高,但 CPU 使用 率也最高。

• 100 Adaptive Server 使用 FastLZ 压缩。这是 CPU 使用率最低的 压缩率;通常用于较少的数据量。

• 101 Adaptive Server 使用 FastLZ 压缩。与值为 100 时相比,值 为 101 时的 CPU 占用率略高,但压缩率也略高。

inrow_lob_length = value

指定行内 text image LOB 列的字节数,以及行内 Unitext LOB 列的字 符数。

log off database_device 从指定的数据库设备中删除不想要的数据库日志部分。使用 log off 可 减少分配给数据库日志以及存档数据库已修改页部分的空间量。

不能将 log off 与任何其它 alter database 参数 (包括 log onfor load

with override)一起使用。


= size

指定此命令应影响的设备的结尾处的空间量。为此,设备结尾处是此 数据库在该设备上使用的编号最大的逻辑页。此命令指定物理存储, 从数据库中删除指定设备上的每个日志页:

alter database sales_db log off mylogdev

指定的大小值会进行舍入,以恰好符合分配单位数。在使用 16KB 逻 辑页大小的安装中,您将会删除 52MB,而非 50,因为该服务器上的 每个分配单位都是 4MB。只有在数据库的日志段使用的空间量比该设 备上的空间少时, Adaptive Server 才会删除比指定空间量少的空间。

from logical_page_number

标识此命令影响的第一个页码。 Adaptive Server 会自动调整该页码以 指示分配页的页 ID。缺省的 from 位置是设备上的最小编号逻辑页。

to logical_page_number 标识此命令影响的最后一个页码。只能删除整个分配单位 (256 页的 倍数)因此, Adaptive Server 会自动调整页码,使其达到分配单位的 最后一页。如果 logical_page_number 恰好是分配页的页码 (即,可被 256 整除),则该分配单位不会受影响。例如,to 512 影响第 512 页以 前的页 (但不包括第 512 页)。

缺省的 to 位置是设备上的最大编号逻辑页。

dml_logging {minimal | default}

指示 insertupdate delete 命令的记录级别。 full (缺省值)会将所 有更改都记录到日志中以保留所有事务的完整记录。如果数据库使用 minimal loggingAdaptive Server 会尝试不将行或页更改记录到 syslogs 中。但 Adaptive Server 可能会生成某种内存日志记录活动,以支持回 退事务等运行时操作。

template

确定数据库使用的模板。可以是以下各项之一:

database_name – 具有完全持久性且处于可用状态的磁盘驻留式 用户数据库。

NULL – 删除与当前模板数据库的绑定。在以后重新启动服务器 的过程中,该数据库将使用 model 作为模板数据库。

with override

强制 Adaptive Server 接受设备规范,即使在同一设备上混合有数据和 事务日志也要接受,因此会危及数据库的最新数据的可恢复性。如果 试图不使用此子句在同一设备上混合日志和数据,则 alter database 命 令会失败。如果混合了日志和数据并且使用 with override,将会收到警 告,但命令会成功执行。


for load

仅在 create database for load 之后并必须重新创建要从转储装载的数据 库的空间分配和段使用情况时才使用。

for proxy_update

强制重新同步代理数据库内的代理表。

示例 示例 1 向缺省数据库设备上为 2K 逻辑页配置的用户数据库中添加 3MB

1,536 页):

alter database mydb

示例 2 为名为 newdata 的数据库设备上的 pubs2 数据库的已分配空间添加

3MB 空间:

alter database pubs2 on newdata = 3

示例 3 针对为 2K 逻辑页配置的服务器,为 userdata1 中的数据添加

10MB 空间,为 logdev 中的日志添加 2MB 空间:

alter database production on userdata1 = "10M"

log on logdev='2.5m'

示例 4 更改宽松持久性数据库 pubs5_rddb 的持久性级别,使其成为具有 完全持久性的常规数据库:

alter database pubs5_rddb set durability = full

示例 5 改变 pubs3 数据库的模板:

alter database pubs3

set template = new_pubs_template_db

示例 6 更改宽松持久性磁盘驻留式数据库的持久性级别:

alter database pubs7 set durability=at_shutdown

示例 7 更改 model 数据库的 DML 日志记录级别,该数据库的持久性级别 设置为 full。在完成此更改后基于 model 创建的所有数据库都将继承最 少日志记录级别属性:

alter database model set dml_logging = minimal

示例 8 pubs2 数据更改为页级压缩:

alter database pubs2 set compression = page

示例 9 pubs2 数据库更改为使用 LOB 压缩:

alter database pubs2 set lob_compression = 100


示例 10 此示例修改 pubs 数据库以使其行内 LOB 列的长度更改为 400 字 节:

alter database pubs

set inrow_lob_length = 400

示例 11 从设备 mylogdev 中删除 50MB 的数据库 sales_db

alter database sales_db log off mylogdev='50M'

此示例删除 mylogdev sales_db 中编号最大的逻辑页 (最大值可达

50 MB)。

示例 12 从设备 mylogdev 中删除数据库 sales_db 的空间,并指定要删除的 确切页:

alter database sales_db log off mylogdev from 7168 to 15360

由于逻辑页 15360 是分配页,因此,此示例影响 mydev 上从 7168 15359 的所有逻辑页,但不影响第 15360 页,也不影响指定范围内不在 mylogdev 上实际存在的任何页。

用法 限制

如果不包括单位指示符,则引号是可选的。不过,如果包括单位指 示符,则必须使用引号。

如果所有固定长度列的总大小加上行开销大于表的锁定方案和页大 小允许的值,则 Adaptive Server 会报告错误。

因为 Adaptive Server 以包含 256 个逻辑页的块为单位为 create database alter database 分配数据库空间,所以这些命令会将指定 大小向下取整为最接近的分配单元的整数倍。

您可以将 size 指定为 float 数据类型,但它会向下取整为分配单元的 整数倍。

虽然 Adaptive Server 的确在以下情况下创建表,但当您执行数据操 纵语言操作时,将会收到关于大小限制的错误:

单个可变长度列的长度超出最大列大小。

对于仅数据锁定表,除初始列之外的任何可变长度列的偏移量 超出了 8191 字节的限制。

如果 Adaptive Server 无法分配请求的空间,它会为每个设备分配尽 可能相近的空间,并显示一条消息,告知已经为每个数据库设备分 配了多少空间。

要使用 alter database,您必须正在使用 master 数据库,或正在执行

master 数据库中的存储过程。


只能在主设备上扩展 master 数据库。试图使用 alter database master 数据库扩展到其它任何数据库设备都将导致错误消息。例 如,使用:

alter database master on master = 1

每次您在数据库设备上用 create database alter database 分配空间 时,分配均代表一个设备段,且分配是作为一行在 sysusages 中输 入的。

如果您对一个正在进行转储的数据库使用 alter database,则除非转 储完成,否则 alter database 不能完成。 Adaptive Server 可锁定转储 期间数据库空间使用的内存映射。如果在此内存映射锁定期间发出 alter database,则 Adaptive Server 可在转储完成后从磁盘更新此映 射。如果中断 alter database,则 Adaptive Server 会指示您运行 sp_dbremap。如果不运行 sp_dbremap,则直到重新启动服务器, Adaptive Server 才可以使用添加的空间。

您可以在脱机数据库上 database_device 上使用 alter database

alter database 用于存档数据库

任何时候 (而不是仅仅在空间不足时)都可以使用 alter database 为存档 数据库的修改页面区域增加空间。增加修改页面区域中的空间可让挂起 的命令继续执行。语法为:

alter database database_name

[ on database_device [= size]

[, database_device [= size]]...]

改变内存数据库和宽松持久性数据库

不能将 modelmaster sybsystemdb 指定为模板数据库。

如果将 use template 子句中的数据库名称设置为 NULL,则会删除与 现有模板数据库的绑定,并将 model 定义为模板数据库。

改变在数据库恢复顺序序列中比其模板数据库先出现的数据库的模 板定义,将自动对恢复顺序重新排序,因此当您重新启动服务器时, 新模板数据库将在数据库恢复顺序中出现在其相关数据库之前。

如果更改 durability dml_logging 的设置, alter database 会在执行命 令前自动尝试将数据库设置为单用户模式。您也可以在发出 alter table 之前手动将数据库设置为单用户模式。

数据库必须处于单用户模式,才能更改其持久性级别设置。

只能在已包含内存数据库的内存存储高速缓存中增加内存数据库的 大小。

不能更改系统数据库、模板数据库或本地临时数据库的持久性级别。


在将数据库的持久性级别更改为 full 时,装载序列将中断。例如, 对于使用完全持久性的磁盘驻留式数据库,如果您:

a 转储数据库。

b 执行 dump transaction

c 第二次执行 dump transactiond 将持久性更改为 no_recoverye 将持久性更改为 full

您将不能第三次执行 dump transaction,而必须执行完全 dump database

在分配更多空间后备份 master

每次使用 alter database 之后,请使用 dump databas e 备份 master 数据 库。这样做可使得在 master 破坏后恢复起来更加容易和安全。

如果您使用 alter database 而不备份 master ,则您可以使用 disk refi t 恢 复更改。

把日志存放在单独的设备上

当您对 create databas e 使用了 log on 扩展时,若要增加为事务日志分 配的存储空间量,请在发出 alter database 时在 log on 子句中给出日 志设备的名称。

如果您不使用 create database log on 扩展将日志放置在单独的设备 上,则万一发生硬盘故障,您将无法完全恢复。在这种情况下,您 可以通过使用 alter database log on 子句,然后使用 sp_logdevice 将 日志移动到它自己的设备,从而扩展日志。

改变数据库的压缩

set compression 指定数据库范围的压缩级别,这仅适用于新建的表。

可以将 set lob_compression 单独使用,也可以将其与其它 set 子子句 一起使用。但是,其它 set 子子句要求数据库处于单用户模式 (例 如,如果更改数据库的持久性级别)。

行内 LOB

使用 inrow_lob_length 可在数据库范围增大或减小行内 LOB 长度。

更改 inrow_lob_length 会影响在以后的 create table alter table add 列 命令中创建 LOB 列。有效值范围为 0 到数据库逻辑页大小。

缩减日志空间

有关 alter database log off 变体:


虽然 log off 选项指定要作为逻辑页删除的页范围,但它是实际已删 除的关联物理页。逻辑页仍保留在数据库中,但因形成了空洞而无 法可用。空洞是一个或多个没有物理存储与之关联的分配单位。

有关在 master.dbo.sysusages 表中提供的设备上存在哪些分配单位

(当您创建数据库或增加数据库空间时,以 256 个数据页为单位进 行划分的空间)的信息,该表中按数据库 ID、起始逻辑页码、逻辑 页中的大小、设备 ID 以及设备中的起始偏移量列出磁盘区段。

如果指定的 to 页小于 from 页,则页会进行互换,也就是说, to 页变 成 from 页,反之亦然。如果 from to 指定相同的页,则该命令仅会 影响含有该页的分配单位。该命令不会因调整 to 页而导致命令错误。

如果您不提供任何子句,则整个设备都会受影响。这等同于 log offdevice from 0。此命令指定物理存储,从数据库中删除指定设备上 的每个日志页:

alter database sales_db log off mylogdev

如果 alter database 检测到错误,它不会执行,并且会返回一条消息 指示原因,如:

• The database log becomes too small. (数据库日志变得太小。)

要删除的片段中包含分配给 syslogs 的页。也就是说,活动日志 占用了要删除的日志片段的空间。

• The amount of log free space after the fragment is removed is too small to accommodate the last chance threshold. (删除该片段后的 可用日志空间量太小,无法容纳最后机会阈值。)

获得关于空间使用情况的帮助

若要查看数据库已使用的设备段的名称、大小和使用情况,请执行

sp_helpdb dbname

若要查看当前数据库使用了多少空间,请执行 sp_spaceused

system default

system default 段会映射到 alter database 命令的 on 子句中包括的每 个新数据库设备。若要解除这些段的映射,请使用 sp_dropsegment

当您使用 alter database (不带 override)来扩展正由此数据库使用的 设备上的数据库时,映射到此设备的段会同时得到扩展。如果您使 用 override 子句,则所有在 on 子句中命名的设备段都成为系统/缺省 段,且所有在 log on 子句中命名的设备段成为日志段。


使用 alter database 唤醒休眠进程

如果用户进程因达到日志段的最后机会阈值而挂起,请使用 alter database 增加日志段空间。如果可用空间量超过最后机会阈值,则 进程被唤醒。

使用 for proxy_update

如果输入 for proxy_update 子句时没有指定其它选项,则数据库的大 小不会扩展;而代理表 (如果有)将从代理数据库中删除并通过元 数据进行重新创建,该元数据是从执行 create database ... with default_location = 'pathname' 时所指定的路径名中获取的。

如果使用 alter database 和其它选项来扩展数据库的大小,则在扩展 大小后将执行代理表同步。

for proxy_update 为数据库管理员提供易于使用的单步操作,通过该 操作可在单个远程站点获得所有表精确的最新代理表示。

所有外部数据源都支持重新同步,而不仅仅是高可用性集群环境中 的主服务器。而且,不需要用 for proxy_update 子句来创建数据库。 如果通过 create database 或使用 sp_defaultloc 指定了缺省存储位置, 则数据库中包含的元数据可与远程存储位置上的元数据同步。

若要确认数据库得到正确同步,以使所有代理表拥有正确的方案可 访问您刚刚重新装载的主数据库的内容,您可能需要在承载代理数 据库的服务器上运行 for proxy_update 子句。

标准 符合 ANSI SQL 的级别Transact-SQL 扩展。

权限 alter database 的权限检查因您的细化权限设置而异。

image

细化权限已启用 在启用细化权限的情况下,对于 sybsecurity,您必须是数据库所有者或者具有 以下特权之一:

own database (on sybsecurity) manage auditing。 对于所有其它数据库,您必须是数据库所有者或者具有 own database 特权

(对数据库)。

细化权限已禁用 在禁用细化权限的情况下,您必须是数据库所有者,或者是具有 sa_role

sso_role 的用户 (对于 sybsecurity)。


审计 sysaudits event extrainfo 列中的值如下:


事件

审计选项

审计的命令或访问权限

extrainfo 中的信息

2

alter

alter database

角色 – 当前活动角色

关键字或选项 alter size

先前值 NULL

当前值 NULL

其它信息 NULL

代理信息 set proxy 有效时的初始登录名


另请参见 命令 create database, disk init, drop database, load database.

系统过程 sp_addsegment, sp_dropsegment, sp_helpdb, sp_helpsegment, sp_logdevice, sp_renamedb, sp_spaceused.




--------------------------------------华丽的分割线-------------------------------------------------------------------------
之前就已经研发成功了能够从Sybase SQL Anywhere的DB文件中恢复数据的工具:ReadASADB。
此工具支持ASA v5.0,v6.0,v7.0,v8.0,v9.0,v10.0,v11.0,v12.0等版本。
恢复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
  2. 适用于所有的UltraLite版本
  3. 能够恢复出来表结构和数据
  4. 能够恢复自定义数据类型
  5. 能够恢复存储过程等对象的语法
  6. 能够导出到目标数据库
  7. 能够导出到SQL文件并生成导入脚本
  8. 支持多种字符集  包括:cp850、cp936、gb18030、utf8等
  9. 能够恢复未加密或者简单加密类型的数据
  10. 简单易用
  11. 限制:不支持AES加密的数据文件
请参考:研发成功了从Sybase SQL Anywhere的DB文件上恢复数据的工具
            SQL Anywhere数据库非常规恢复工具ReadASADB使用介绍

ReadASADB适用场景

各种误操作:

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

本工具的应用场景:

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