Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - 数据库管理 » 启动并连接到数据库 » 使用数据库文件

 

使用附加 dbspace

通常是大数据库所需的

对于大多数数据库来说,单个数据库文件就已足够。但是,对于大数据库的用户来说,附加数据库文件有时是必需的。附加数据库文件还是将相关信息聚集在独立文件中的方便工具。

当您初始化某个数据库时,它包含一个数据库文件。这第一个数据库文件称为主文件系统 dbspace。缺省情况下,所有数据库对象和所有数据都放在主文件中。

dbspace 是一个为数据创建更多空间的附加数据库文件。一个数据库可以包含在多达 13 个独立文件(一个主文件和 12 个 dbspace)中。每个表及其索引必须包含在单个数据库文件中。SQL 命令 CREATE DBSPACE 可将新文件添加到数据库中。

临时表只在临时 dbspace 中创建。

有多种方法可指定于其中创建基表或其它数据库对象的 dbspace。在以下列表中,位置靠前的方法所指定的位置优先于位置靠后的方法所指定的位置。

  1. IN DBSPACE 子句(如果已指定)

  2. default_dbspace 选项(如果已设置)

  3. 系统 dbspace

如果 dbspace 名称包含一个句点并且未加上引号,则数据库服务器为此名称生成一个错误。

每个数据库文件最大允许有 228(约 2 亿 6 千 8 百万)数据库页。例如,使用页面大小为 4 KB 的数据库创建的数据库文件最大可增至 1 TB (228*4 KB)。但是,实际上,在其中创建文件的物理文件系统所允许的最大文件大小会对可允许的最大大小产生很大的影响。

尽管一些旧的文件系统将文件大小限制为最大不超过 2 GB,但是许多文件系统(如使用 NTFS 文件系统的 Windows 文件系统)允许利用完整的数据库文件大小。如果数据库中放置的数据量超过最大文件大小,就有必要将数据分成多个数据库文件。而且,您可能因大小限制以外的原因(例如聚簇相关对象)而想要创建多个 dbspace。

有关支持的操作系统所允许的最大文件大小的信息,请参见SQL Anywhere 大小和数量限制

您可以使用 sa_disk_free 系统过程获取有关 dbspace 可用空间的信息。请参见sa_disk_free_space 系统过程

SYSDBSPACE 系统视图包含有关用于数据库的所有 dbspace 的信息。请参见SYSDBSPACE 系统视图

拆分现有的数据库

如果您想要在多个 dbspace 之间拆分现有的数据库对象,则必须卸载数据库并修改所生成的命令文件(缺省情况下,名为 reload.sql),以便重建数据库。在 reload.sql 文件中,将 IN 子句添加到 CREATE TABLE 语句中,以便为不想放到主文件中的每一个表指定 dbspace。

对 dbspace 的权限

SQL Anywhere 支持对 dbspace 使用权限。只有 CREATE 权限受支持。CREATE 权限允许用户在指定的 dbspace 中创建数据库对象。可以通过执行 GRANT CREATE 语句授予 dbspace 的 CREATE 权限。请参见GRANT 语句

Dbspace 权限具有如下性质:

  • 试图用基础数据创建新对象的用户必须具有放置基础数据的 dbspace 的 CREATE 权限。

  • 即使已发出 GRANT CREATE ON 语句,用户(被授予者)也必须具有 RESOURCE 权限才能创建新数据库对象。

  • 放置于特定 dbspace 中以及需要 CREATE 权限的对象的当前列表包括表、索引、文本索引和实例化视图。请注意,诸如普通视图和过程的对象没有任何基础数据,因此不需要 CREATE 权限。

  • 可以直接授予用户 CREATE 权限,也可以通过成为已授予此权限的组的成员继承此权限。

  • 可以授予 PUBLIC 对特定 dbspace 的 CREATE 权限,在这种情况下,拥有 RESOURCE 权限的所有用户也可以在此 dbspace 上创建对象。

  • 新创建的 dbspace 将其 CREATE 权限自动授予 PUBLIC。

  • 可以撤消权限,例如,在试图保护 dbspace 安全时。也可以管理内部 dbspace(系统和临时)的权限以控制访问。

  • 创建本地临时表不需要任何权限;dbspace 权限不影响创建本地临时表。但是,创建全局临时表需要对临时 dbspace 的 RESOURCE 权限和 CREATE 权限。

另请参见

创建 dbspace
为数据库文件预分配空间
删除 dbspace