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

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

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

管理缓冲池

您可以针对 RDS for Db2 数据库创建、更改或删除缓冲池。创建、更改或删除缓冲池需要更高级别的 SYSADMSYSCTRL 权限,而主用户无法获得相应的权限。而应使用 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

管理数据库

可以在 RDS for Db2 数据库实例上创建、删除或还原数据库。创建、删除或还原数据库需要更高级别的 SYSADM 权限,而主用户无法获得该权限。而应使用 Amazon RDS 存储过程。

还可以执行常见的管理任务,例如监控、维护和收集有关数据库的信息。

创建数据库

要在 RDS for Db2 数据库实例上创建数据库,请调用 rdsadmin.create_database 存储过程。有关更多信息,请参阅 IBM Db2 文档中的 CREATE DATABASE 命令

注意

如果您在使用 Amazon RDS 控制台或 AWS CLI 创建 RDS for Db2 数据库实例时未指定数据库的名称,则可以通过调用此存储过程来创建数据库。有关更多信息,请参阅使用说明适用于 rdsadmin.create_database 的 。

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

    db2 "connect to rdsadmin user master_user using master_password"
  2. 通过调用 rdsadmin.create_database 创建数据库。有关更多信息,请参阅 rdsadmin.create_database

    db2 "call rdsadmin.create_database('database_name')"

为数据库配置设置

要为 RDS for Db2 数据库实例上的数据库配置设置,请调用 rdsadmin.set_configuration 存储过程。例如,您可以配置在还原操作期间要创建的缓冲区或缓冲区操纵器的数量。

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

    db2 "connect to rdsadmin user master_user using master_password"
  2. (可选)通过调用 rdsadmin.show_configuration 检查您当前的配置设置。有关更多信息,请参阅 rdsadmin.show_configuration

    db2 "call rdsadmin.show_configuration('name')"
  3. 通过调用 rdsadmin.set_configuration 配置数据库的设置。有关更多信息,请参阅 rdsadmin.set_configuration

    db2 "call rdsadmin.set_configuration( 'name', 'value')"

修改数据库参数

Amazon RDS for Db2 使用三种类型的参数:数据库管理器配置参数、注册表变量和数据库配置参数。可以通过参数组更新前两种类型,并通过 rdsadmin.update_db_param 存储过程更新最后一种类型。

注意

只能修改现有参数的值。无法添加 RDS for Db2 不支持的新参数。

有关这些参数以及如何修改其值的更多信息,请参阅 Amazon RDS for Db2 参数

配置日志保留期

要配置 Amazon RDS 为 RDS for Db2 数据库保留日志文件的时间长度,请调用 rdsadmin.set_archive_log_retention 存储过程。

为数据库配置日志保留期
  1. 使用 RDS for Db2 数据库实例的主用户名和主密码连接到 rdsadmin 数据库。在以下示例中,用您自己的信息替换 master_usernamemaster_password

    db2 "connect to rdsadmin user master_user using master_password"
  2. (可选)通过调用 rdsadmin.show_archive_log_retention 检查您当前的日志保留期配置。有关更多信息,请参阅 rdsadmin.show_archive_log_retention

    db2 "call rdsadmin.show_archive_log_retention( ?, 'database_name')"
  3. 通过调用 rdsadmin.set_archive_log_retention 配置数据库的日志保留期。有关更多信息,请参阅 rdsadmin.set_archive_log_retention

    db2 "call rdsadmin.set_archive_log_retention( ?, 'database_name', 'archive_log_retention_hours')"

删除数据库

要从 RDS for Db2 数据库实例中删除数据库,请调用 rdsadmin.drop_database 存储过程。有关更多信息,请参阅 IBM Db2 文档中的 Dropping databases

注意

只有满足某些条件时,才能通过调用存储过程来删除数据库。有关更多信息,请参阅使用说明适用于 rdsadmin.drop_database 的 。

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

    db2 "connect to rdsadmin user master_user using master_password"
  2. 通过调用 rdsadmin.drop_database 来删除数据库。有关更多信息,请参阅 rdsadmin.drop_database

    db2 "call rdsadmin.drop_database('database_name')"

还原数据库

要在 RDS for Db2 数据库实例上还原数据库,请调用 rdsadmin.restore_database 存储过程。有关更多信息,请参阅 IBM Db2 文档中的 RESTORE DATABASE 命令

注意

如果您在使用 Amazon RDS 控制台或 AWS CLI 创建 RDS for Db2 数据库实例时未指定数据库的名称,则可以通过调用此存储过程来还原数据库。有关更多信息,请参阅使用说明适用于 rdsadmin.restore_database 的 。

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

    db2 "connect to rdsadmin user master_user using master_password"
  2. (可选)通过调用 rdsadmin.show_configuration 来检查当前的配置设置以优化还原操作。有关更多信息,请参阅 rdsadmin.show_configuration

    db2 "call rdsadmin.show_configuration('name')"
  3. 通过调用 rdsadmin.set_configuration 来配置设置以优化还原操作。显式设置这些值可以提高还原包含大量数据的数据库时的性能。有关更多信息,请参阅 rdsadmin.set_configuration

    db2 "call rdsadmin.set_configuration( 'name', 'value')"
  4. 通过调用 rdsadmin.restore_database 来还原数据库。有关更多信息,请参阅 rdsadmin.restore_database

    db2 "call rdsadmin.restore_database( ?, 'database_name', 's3_bucket_name', 's3_prefix', restore_timestamp, 'backup_type')"
  5. 通过调用 rdsadmin.rollforward_database 使数据库恢复联机并应用其它事务日志。有关更多信息,请参阅 rdsadmin.rollforward_database

    db2 "call rdsadmin.rollforward_database( ?, 'database_name', 's3_bucket_name', s3_prefix, 'rollfoward_to_option', 'complete_rollforward')"
  6. 如果在上一步中将 complete_rollforward 设置为 FALSE,则必须通过调用 rdsadmin.complete_rollforward 来完成使数据库恢复联机的过程。有关更多信息,请参阅 rdsadmin.complete_rollforward

    db2 "call rdsadmin.complete_rollforward( ?, 'database_name')"

收集有关数据库的信息

要收集有关数据库的信息,请调用 rdsadmin.db2pd_command 存储过程。这些信息可以帮助监控您的数据库或排查问题。

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

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

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

强制应用程序退出数据库

要强制应用程序退出 RDS for Db2 数据库,请调用 rdsadmin.force_application 存储过程。在对数据库进行维护之前,请强制应用程序退出数据库。

强制应用程序退出数据库
  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')"

生成性能报告

您可以使用过程或脚本生成性能报告。有关使用过程的信息,请参阅 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
    3. 移除以下各行。

      db2 -v create bufferpool db2monbp db2 -v create user temporary tablespace db2montmptbsp bufferpool db2monbp db2 -v drop tablespace db2montmptbsp db2 -v drop bufferpool db2monbp
  5. 运行 db2mon.sh 脚本以按指定的间隔输出报告。在以下示例中,将 absolute_path 替换为指向脚本文件的完整路径,将 rds_database_alias 替换为数据库的名称,并将 seconds 替换为报告生成之间的秒数(0 到 3600)。

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

    示例

    以下示例显示脚本文件位于 home 目录下的 perf 目录中。

    /home/db2inst1/sqllib/samples/perf/db2mon.sh rds_database_alias seconds | tee -a db2mon.out
  6. 删除为 db2mon.sh 文件创建的缓冲池和表空间。在以下示例中,将 master_usernamemaster_password 替换为您的 RDS for Db2 数据库实例的主用户名和主密码。将 database_name 替换为数据库的名称。

    db2 connect to rdsadmin user master_username using master_password db2 "call rdsadmin.drop_tablespace('database_name','db2montmptbsp')" db2 "call rdsadmin.drop_bufferpool('database_name','db2monbp')"

管理存储

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 存储过程。有关更多信息,请参阅 IBM Db2 文档中的 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"

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

可以通过使用 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(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 语句来列出表空间的状态和存储组。

要列出表空间的状态和存储组,请运行以下 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 语句来列出表的表空间。

要列出表的表空间,运行以下 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'"

列出表空间容器

可以通过使用 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(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"