执行 Amazon RDS for Db2 数据库实例的常见数据库任务 - Amazon Relational Database Service
Amazon Web Services 文档中描述的 Amazon Web Services 服务或功能可能因区域而异。要查看适用于中国区域的差异,请参阅 中国的 Amazon Web Services 服务入门 (PDF)

执行 Amazon RDS for Db2 数据库实例的常见数据库任务

您可以在 RDS for Db2 数据库实例上执行某些与数据库相关的常见 DBA 任务。为了提供托管服务体验,Amazon RDS 未提供数据库实例的 Shell 访问权限。此外,主用户无法运行需要 SYSADMSYSMAINTSYSCTRL 权限的命令或实用程序。

管理缓冲池

您可以针对 RDS for Db2 数据库创建、更改或删除缓冲池。创建、更改或删除缓冲池需要更高级别的 SYSADMIN 权限,而主用户无法获得该权限。而应使用 Amazon RDS 存储过程。

您也可以刷新缓冲池。

创建缓冲池

要创建 RDS for Db2 数据库的缓冲池,请调用 rdsadmin.create_bufferpool 存储过程。有关更多信息,请参阅 IBM Db2 文档中的 CREATE BUFFERPOOL 语句

创建缓冲池
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_user using master_password"
  2. 通过调用 rdsadmin.create_bufferpool 创建缓冲池。有关更多信息,请参阅rdsadmin.create_bufferpool

    db2 "call rdsadmin.create_bufferpool( 'database_name', 'buffer_pool_name', buffer_pool_size, 'immediate', 'automatic', page_size, number_block_pages, block_size)"

更改缓冲池

要更改 RDS for Db2 数据库的缓冲池,请调用 rdsadmin.alter_bufferpool 存储过程。有关更多信息,请参阅 IBM Db2 文档中的 ALTER BUFFERPOOL 语句

更改缓冲池
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_username using master_password"
  2. 通过调用 rdsadmin.alter_bufferpool 更改缓冲池。有关更多信息,请参阅rdsadmin.alter_bufferpool

    db2 "call rdsadmin.alter_bufferpool( 'database_name', 'buffer_pool_name', buffer_pool_size, 'immediate', 'automatic', change_number_blocks, number_block_pages, block_size)"

删除缓冲池

要删除 RDS for Db2 数据库的缓冲池,请调用 rdsadmin.drop_bufferpool 存储过程。有关更多信息,请参阅 IBM Db2 文档中的删除缓冲池

重要

确保没有为要删除的缓冲池分配任何表空间。

删除缓冲池
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_user using master_password"
  2. 通过调用 rdsadmin.drop_bufferpool 删除缓冲池。有关更多信息,请参阅rdsadmin.drop_bufferpool

    db2 "call rdsadmin.drop_bufferpool( 'database_name', 'buffer_pool_name')"

刷新缓冲池

您可以刷新缓冲池以强制实施检查点,以便 RDS for Db2 将页面从内存写入存储。

注意

您不需要刷新缓冲池。Db2 在提交事务之前同步写入日志。脏页可能仍在缓冲池中,但是 Db2 会将它们异步写入存储。即使系统意外关闭,当您重启数据库时,Db2 也会自动执行崩溃恢复。在崩溃恢复期间,Db2 将已提交的更改写入数据库,或者回滚对未提交事务的更改。

刷新缓冲池
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到您的 Db2 数据库。在以下示例中,用您自己的信息替换 rds_database_aliasmaster_usernamemaster_password

    db2 connect to rds_database_alias user master_username using master_password
  2. 刷新缓冲池。

    db2 flush bufferpools all

管理存储

Db2 使用自动存储来管理数据库对象(例如表、索引和临时文件)的物理存储。自动存储允许 Db2 系统根据需要创建和管理存储路径,而不是手动分配存储空间和跟踪正在使用的存储路径。这可以简化 Db2 数据库的管理并降低因人为错误而导致错误的可能性。有关更多信息,请参阅 IBM Db2 文档中的自动存储

使用 RDS for Db2,您可以通过自动扩展逻辑卷和文件系统来动态增加存储大小。有关更多信息,请参阅使用 Amazon RDS 数据库实例的存储

管理表空间

您可以为 RDS for Db2 数据库创建、更改、重命名或删除表空间。创建、更改、重命名或删除表空间需要更高级别的 SYSADM 权限,而主用户无法获得该权限。而应使用 Amazon RDS 存储过程。

创建表空间

要为您的 RDS for Db2 数据库创建表空间,请调用 rdsadmin.create_tablespace 存储过程。有关更多信息,请参阅 IBM Db2 文档中的 CREATE TABLESPACE 语句

重要

要创建表空间,您必须具有相同页面大小的缓冲池才能与表空间相关联。有关更多信息,请参阅管理缓冲池

创建表空间
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_username using master_password"
  2. 通过调用 rdsadmin.create_tablespace 创建表空间。有关更多信息,请参阅rdsadmin.create_tablespace

    db2 "call rdsadmin.create_tablespace( 'database_name', 'tablespace_name', 'buffer_pool_name', tablespace_initial_size, tablespace_increase_size, 'tablespace_type')"

更改表空间

要更改 RDS for Db2 数据库的表空间,请调用 rdsadmin.alter_tablespace 存储过程。您可以使用此存储过程来更改表空间的缓冲池、降低高水位或使表空间联机。有关更多信息,请参阅 IBM Db2 文档中的 ALTER TABLESPACE 语句

更改表空间
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_username using master_password"
  2. 通过调用 rdsadmin.alter_tablespace 更改表空间。有关更多信息,请参阅rdsadmin.alter_tablespace

    db2 "call rdsadmin.alter_tablespace( 'database_name', 'tablespace_name', 'buffer_pool_name', buffer_pool_size, tablespace_increase_size, 'max_size', 'reduce_max', 'reduce_stop', 'reduce_value', 'lower_high_water', 'lower_high_water_stop', 'switch_online')"

重命名表空间

要更改 RDS for Db2 数据库的表空间名称,请调用 rdsadmin.rename_tablespace 存储过程。

重命名表空间
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_username using master_password"
  2. 通过调用 rdsadmin.rename_tablespace 重命名表空间。有关更多信息,包括对表空间命名的限制,请参阅rdsadmin.rename_tablespace

    db2 "call rdsadmin.rename_tablespace( 'database_name', 'source_tablespace_name', 'target_tablespace_name')"

删除表空间

要删除 RDS for Db2 数据库的表空间,请调用 rdsadmin.drop_tablespace 存储过程。在删除表空间之前,请先删除表空间中的所有对象,例如表、索引或大型对象(LOB)。有关更多信息,请参阅 IBM Db2 文档中的删除表空间

删除表空间
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_username using master_password"
  2. 通过调用 rdsadmin.drop_tablespace 删除表空间。有关更多信息,请参阅rdsadmin.drop_tablespace

    db2 "call rdsadmin.drop_tablespace( 'database_name', 'tablespace_name')"

检查表空间的状态

您可以使用 cast 命令检查表空间的状态。

检查表空间的状态
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到您的 Db2 数据库。在以下示例中,用您自己的信息替换 rds_database_aliasmaster_usernamemaster_password

    db2 connect to rds_database_alias user master_username using master_password
  2. 返回摘要输出。

    对于摘要输出:

    db2 "select cast(tbsp_id as smallint) as tbsp_id, cast(tbsp_name as varchar(35)) as tbsp_name, cast(tbsp_type as varchar(3)) as tbsp_type, cast(tbsp_state as varchar(10)) as state, cast(tbsp_content_type as varchar(8)) as contents from table(mon_get_tablespace(null,-1)) order by tbsp_id"

返回有关表空间的详细信息

返回有关表空间的详细信息
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到您的 Db2 数据库。在以下示例中,用您自己的信息替换 rds_database_aliasmaster_usernamemaster_password

    db2 connect to rds_database_alias user master_username using master_password
  2. 返回数据库中面向一个成员或面向所有成员的所有表空间的详细信息。

    对于一个成员:

    db2 "select cast(member as smallint) as member, cast(tbsp_id as smallint) as tbsp_id, cast(tbsp_name as varchar(35)) as tbsp_name, cast(tbsp_type as varchar(3)) as tbsp_type, cast(tbsp_state as varchar(10)) as state, cast(tbsp_content_type as varchar(8)) as contents, cast(tbsp_total_pages as integer) as total_pages, cast(tbsp_used_pages as integer) as used_pages, cast(tbsp_free_pages as integer) as free_pages, cast(tbsp_page_top as integer) as page_hwm, cast(tbsp_page_size as integer) as page_sz, cast(tbsp_extent_size as smallint) as extent_sz, cast(tbsp_prefetch_size as smallint) as prefetch_sz, cast(tbsp_initial_size as integer) as initial_size, cast(tbsp_increase_size_percent as smallint) as increase_pct, cast(storage_group_name as varchar(12)) as stogroup from table(mon_get_tablespace(null,-1)) order by member, tbsp_id "

    对于所有成员:

    db2 "select cast(member as smallint) as member cast(tbsp_id as smallint) as tbsp_id, cast(tbsp_name as varchar(35)) as tbsp_name, cast(tbsp_type as varchar(3)) as tbsp_type, cast(tbsp_state as varchar(10)) as state, cast(tbsp_content_type as varchar(8)) as contents, cast(tbsp_total_pages as integer) as total_pages, cast(tbsp_used_pages as integer) as used_pages, cast(tbsp_free_pages as integer) as free_pages, cast(tbsp_page_top as integer) as page_hwm, cast(tbsp_page_size as integer) as page_sz, cast(tbsp_extent_size as smallint) as extent_sz, cast(tbsp_prefetch_size as smallint) as prefetch_sz, cast(tbsp_initial_size as integer) as initial_size, cast(tbsp_increase_size_percent as smallint) as increase_pct, cast(storage_group_name as varchar(12)) as stogroup from table(mon_get_tablespace(null,-2)) order by member, tbsp_id "

列出表空间的状态和存储组

要列出表空间的状态和存储组,请运行以下 SQL 语句:

db2 "SELECT varchar(tbsp_name, 30) as tbsp_name, varchar(TBSP_STATE, 30) state, tbsp_type, varchar(storage_group_name,30) storage_group FROM TABLE(MON_GET_TABLESPACE('',-2)) AS t"

列出表的表空间

要列出表的表空间,运行以下 SQL 语句。在以下示例中,将 SCHEMA_NAMETABLE_NAME 替换为架构和表的名称:

db2 "SELECT VARCHAR(SD.TBSPACE,30) AS DATA_SPACE, VARCHAR(SL.TBSPACE,30) AS LONG_SPACE, VARCHAR(SI.TBSPACE,30) AS INDEX_SPACE FROM SYSCAT.DATAPARTITIONS P JOIN SYSCAT.TABLESPACES SD ON SD.TBSPACEID = P.TBSPACEID LEFT JOIN SYSCAT.TABLESPACES SL ON SL.TBSPACEID = P.LONG_TBSPACEID LEFT JOIN SYSCAT.TABLESPACES SI ON SI.TBSPACEID = P.INDEX_TBSPACEID WHERE TABSCHEMA = 'SCHEMA_NAME' AND TABNAME = 'TABLE_NAME'"

列出表空间容器

列出表空间的表空间容器
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到您的 Db2 数据库。在以下示例中,用您自己的信息替换 rds_database_aliasmaster_usernamemaster_password

    db2 connect to rds_database_alias user master_username using master_password
  2. 返回数据库中所有表空间容器或特定表空间容器的列表。

    对于所有表空间容器:

    db2 "select cast(member as smallint) as member, cast(tbsp_name as varchar(35)) as tbsp_name, cast(container_id as smallint) as id, cast(container_name as varchar(60)) as container_path, container_type as type from table(mon_get_container(null,-2)) order by member,tbsp_id,container_id"

    对于特定的表空间容器:

    db2 "select cast(member as smallint) as member, cast(tbsp_name as varchar(35)) as tbsp_name, cast(container_id as smallint) as id, cast(container_name as varchar(60)) as container_path, container_type as type from table(mon_get_container('TBSP_1',-2)) order by member, tbsp_id,container_id"

生成性能报告

您可以使用过程或脚本生成性能报告。有关使用过程的信息,请参阅 IBM Db2 文档中的 DBSUMMARY procedure ‐ Generate a summary report of system and application performance metrics

Db2 在其 ~sqllib/sample/perf 目录中包含一个 db2mon.sh 文件。运行该脚本会生成低成本、广泛的 SQL 指标报告。要下载 db2mon.sh 文件和相关的脚本文件,请参阅 IBM db2-samples GitHub 存储库中的 perf 目录。

使用脚本生成性能报告
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到您的 Db2 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 connect to rdsadmin user master_username using master_password
  2. 通过调用 rdsadmin.create_bufferpool 创建一个名为 db2monbp、页面大小为 4096 的缓冲池。有关更多信息,请参阅rdsadmin.create_bufferpool

    db2 "call rdsadmin.create_bufferpool('database_name','db2monbp',4096)"
  3. 通过调用 rdsadmin.create_tablespace 创建一个名为 db2montmptbsp 且使用 db2monbp 缓冲池的临时表空间。有关更多信息,请参阅rdsadmin.create_tablespace

    db2 "call rdsadmin.create_tablespace('database_name',\ 'db2montmptbsp','db2monbp',4096,1000,100,'T')"
  4. 打开 db2mon.sh 脚本,并修改有关连接到数据库的行。

    1. 删除以下行。

      db2 -v connect to $dbName
    2. 将上一步中的行替换为下一行。在以下示例中,将 master_usernamemaster_password 替换为您的 RDS for Db2 数据库实例的主用户名和主密码。

      db2 -v connect to $dbName user master_username using master_password
  5. 更改到脚本所在的目录。在以下示例中,将 directory 替换为脚本所在目录的名称。

    cd directory
  6. 运行 db2mon.sh 脚本以按指定的间隔输出报告。在以下示例中,将 rds_database_aliasseconds 替换为数据库的名称和报告生成之间的秒数(0 到 3600)。

    ./db2mon.sh rds_database_alias seconds | tee -a db2mon.out

收集有关数据库的信息

您可以使用 Amazon RDS 存储过程收集有关数据库的信息。这些信息可以帮助监控您的数据库或排查问题。

收集有关数据库的信息
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_username using master_password"
  2. 通过调用 rdsadmin.db2pd 收集信息。有关更多信息,请参阅rdsadmin.db2pd_command

    db2 "call rdsadmin.db2pd_command('db2pd_cmd')"

强制应用程序退出数据库

您可以使用 Amazon RDS 存储过程来强制应用程序退出 RDS for Db2 数据库,以便维护数据库。

强制应用程序退出数据库
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_username using master_password"
  2. 通过调用 rdsadmin.force_application 来强制应用程序退出数据库 有关更多信息,请参阅rdsadmin.force_application

    db2 "call rdsadmin.force_application( ?, 'applications')"