ALTER DATABASE 语句

ALTER DATABASE 语句将向 或从其中除去现有存储路径, 用于自动存储器表空间的路径集合添加新的存储器路径。

自动存储器表空间是使用自动存储器创建的表空间; 即,已在 CREATE TABLESPACE 语句上指定了 MANAGED BY AUTOMATIC STORAGE 子句,或者完全未指定 MANAGED BY 子句。 如果为自动存储器启用了数据库,那么数据库管理器可以完全确定其表空间的容器和空间管理特征。 如果数据库当前未启用自动存储器,那么添加存储路径的操作将启用该数据库。

重要信息: 不推荐使用此语句,在将来的发行版中可能会将其除去。 请改为使用 CREATE STOGROUP 或 ALTER STOGROUP 语句。

调用

该语句可嵌入到应用程序中或以交互方式发出。 它是一个可执行语句,仅当 DYNAMICRULES 运行行为对于程序包有效时才能动态编译 (SQLSTATE 42509)。

权限

语句的授权标识所拥有的特权必须包含 SYSADM 或 SYSCTRL 权限。

语法

Read syntax diagramSkip visual syntax diagramALTER DATABASEdatabase-name 1ADD STORAGE ON,'storage-path'DROP STORAGE ON,'storage-path'
Notes:
  • 1 Each clause can be specified only once.

描述

数据库名称
一个可选值,用于指定要变更的数据库的名称。 如果指定了该值,那么该值必须与应用程序当前所连接的数据库的名称匹配 (而不是客户机可能已编目的别名); 否则,将返回错误 (SQLSTATE 42961)。
添加存储器
指定要将一个或多个新存储器 路径 添加到用于自动存储器表空间的存储器 路径 集合中。
"storage-path"
一个字符串常量,用于指定要在其中创建自动存储器表空间的容器的位置。 字符串的格式取决于操作系统,如下表所示:
操作系统 字符串格式
Linux®
AIX®
Solaris
HP-UX
绝对路径。
Windows 磁带机的字母名称。
将存储器放在
指定要从用于自动存储器表空间的存储路径集合中除去一个或多个存储路径。 如果表空间正在主动使用正在删除的存储路径,那么存储路径的状态将从 正在使用 更改为 删除暂挂 ,并且将阻止将来使用该存储路径。
"storage-path"
一个字符串常量,用于指定要从中除去存储路径的位置。 字符串的格式取决于操作系统,如下表所示:
操作系统 字符串格式
Linux
AIX
Solaris
HP-UX
绝对路径。
Windows 磁带机的字母名称。

规则

  • 对于在 版本 10.1 或更高版本上运行的数据库,此语句的操作将应用于数据库的缺省存储器组。 如果没有为数据库定义存储器组,那么将使用名称 IBMSTOGROUP。
  • 要添加的存储路径必须根据路径的命名规则有效,并且 必须可访问 (SQLSTATE 57019)。 同样,在分区数据库环境中,存储路径必须存在并且在每个数据库分区上都可访问 (SQLSTATE 57019)。
  • 要删除的存储路径当前必须存在于数据库中 (SQLSTATE 57019) ,并且不能已处于 删除暂挂 状态 (SQLSTATE 55073)。
  • 为自动存储器启用的数据库必须至少具有一个存储路径。 不允许从数据库中删除所有存储路径 (SQLSTATE 428HH)。
  • 添加数据库分区服务器时,无法执行 ALTER DATABASE 语句 (SQLSTATE 55071)。
  • 不能在 Db2® pureScale® 环境中指定 DROP STORAGE ON (SQLSTATE 56038)。

注意

  • 添加新存储路径时:
    • 使用自动存储器的现有常规表空间和大型表空间最初不会使用这些新路径。 仅当发生空间不足情况时,数据库管理器才能选择在这些路径上创建新的表空间容器。
    • 由自动存储器管理的现有临时表空间不会自动使用新的存储器路径。 必须正常停止数据库,然后重新启动这些表空间中的容器以使用新的存储路径。 作为替代方法,可以删除并重新创建临时表空间。 创建时,这些表空间将自动使用具有足够可用空间的所有存储路径。
  • 将存储路径添加到数据库以启用自动存储器不会导致数据库将现有非自动存储器启用的表空间转换为使用自动存储器。
  • 虽然 ADD STORAGE 和 DROP STORAGE 是记录的操作,但 他们是 在前滚操作期间是否重做取决于复原数据库的方式。 如果复原操作未重新定义与数据库关联的存储路径,那么将重新执行包含存储路径 change 的日志记录,并且在前滚操作期间将 或删除 日志记录中描述的存储路径。 但是,如果在复原操作期间 重新定义了 存储路径,那么前滚操作将不会重做 ADD STORAGE 或 DROP STORAGE 日志记录,因为假定您已设置存储路径。
  • 为数据库分区上的存储路径计算可用空间时,数据库管理器会检查存储路径中是否存在以下目录或安装点,并将使用找到的第一个目录或安装点。
    <storage path>/<instance name>/NODE####/<database name>
    <storage path>/<instance name>/NODE####
    <storage path>/<instance name>
    <storage path>
    其中:
    • <storage path> is a storage path associated with the database
    • <instance name> is the instance under which the database resides
    • NODE#### 对应于数据库分区号 (例如, NODE0000 或 NODE0001)
    • <database name> is the name of the database

    文件系统可以安装在存储路径下的某个点,并且数据库管理器将识别可用于表空间容器的实际可用空间量可能与存储路径目录本身的关联量不同。

    请考虑一个示例,其中一个物理机器上存在两个逻辑数据库分区,并且存在单个存储路径 (/dbdata)。 每个数据库分区都将使用此存储路径,但您可能希望在其自己的文件系统中隔离每个分区的数据。 在这种情况下,可以为每个分区创建单独的文件系统,并且可以将其安装在 /dbdata/<instance>/NODE####上。 在存储路径上创建容器并确定可用空间时,数据库管理器不会检索 /dbdata的可用空间信息,而是会将其检索到相应的 /dbdata/<instance>/NODE#### 目录。

  • 通常,必须对分区数据库环境中的每个分区使用相同的存储路径。 其中一个例外是在存储路径中使用数据库分区表达式的情况。 执行此操作将允许在存储路径中反映数据库分区号,以便生成的路径名在每个分区上都不同。
  • 删除一个或多个表空间正在使用的存储路径时,该路径的状态将从 正在使用 更改为 删除暂挂。 未来在这条路上的增长不会发生。 必须先重新平衡每个受影响的表空间 (使用 ALTER TABLESPACE 语句的 REBALANCE 子句) ,以便将其容器数据从存储路径中移出,然后才能从数据库中完全除去该路径。 只有常规表空间和大型表空间支持重新平衡。 应该删除并重新创建临时表空间,以使其容器从删除的路径中除去。 当路径不再由任何表空间使用时,将从数据库中物理除去该路径。

    对于分区数据库,将在每个分区上独立维护路径。 当给定数据库分区上不再使用路径时,将以物理方式从该分区中除去该路径。 其他分区仍可能显示路径处于 删除暂挂 状态。

    可以通过发出以下 SQL 语句来确定使用删除暂挂存储路径的自动存储器表空间的列表:
    SELECT DISTINCT A.TBSP_NAME, A.TBSP_ID, A.TBSP_CONTENT_TYPE
      FROM TABLE(MON_GET_TABLESPACE(NULL,-2)) AS A
      WHERE A.TBSP_PATHS_DROPPED = 1
  • 删除最初使用数据库分区表达式指定的存储路径时,必须在该删除中使用相同的存储路径字符串 (包括数据库分区表达式)。 如果指定了数据库分区表达式,那么可以在数据库快照的 具有数据库分区表达式的路径 元素 (db_storage_path_with_dpe) 中找到此路径字符串。 如果指定的原始路径中未包含数据库分区表达式,那么不会显示此元素。
  • 可以将给定的存储路径多次添加到数据库。 使用 DROP STORAGE ON 子句时,指定该特定路径一次将从数据库中删除该路径的 所有 实例。

示例

  1. /db 目录 (/db/filesystem1/db/filesystem2) 下的两个路径以及名为 /filesystem3 的第三个路径添加到与当前连接的数据库相关联的自动存储器表空间的空间中。
       ALTER DATABASE ADD STORAGE ON '/db/filesystem1', '/db/filesystem2',
         '/filesystem3'
  2. 将驱动器 DE 添加到与 SAMPLE 数据库关联的自动存储器表空间的空间。
       ALTER DATABASE SAMPLE ADD STORAGE ON 'D:', 'E:\'
  3. 将目录 F:\DBDATA 和驱动器 G 添加到与当前连接的数据库相关联的自动存储器表空间的空间中。
       ALTER DATABASE ADD STORAGE ON 'F:\DBDATA', 'G:'
  4. 添加使用数据库分区表达式来区分每个数据库分区上的存储路径的存储路径。
       ALTER DATABASE ADD STORAGE ON '/dataForPartition $N'
    将在数据库分区 0 上使用的存储路径为 /dataForPartition0; 在数据库分区 1 上使用的存储路径为 /dataForPartition1; 依此类推。
  5. 将存储路径添加到未启用自动存储器的数据库,以便为数据库启用自动存储器。
       CREATE DATABASE MYDB AUTOMATIC STORAGE NO
       CONNECT TO MYDB
       ALTER DATABASE ADD STORAGE ON '/db/filesystem1', '/db/filesystem2' 
    现在,数据库 MYDB 已启用自动存储器。
  6. 从当前连接的数据库中除去路径 /db/filesystem1/db/filesystem2
       ALTER DATABASE DROP STORAGE ON '/db/filesystem1', '/db/filesystem2'
    成功删除存储器后,对使用这些存储路径来重新平衡表空间的每个表空间使用带有 REBALANCE 子句的 ALTER TABLESPACE 语句。
  7. 先前已将具有数据库分区表达式 (/dataForPartition $N) 的存储路径添加到数据库,现在将除去该存储路径。
       ALTER DATABASE DROP STORAGE ON '/dataForPartition $N'
    成功删除存储器后,对使用这些存储路径来重新平衡表空间的每个表空间使用带有 REBALANCE 子句的 ALTER TABLESPACE 语句。