

# Amazon RDS for Db2 的已知问题和限制
<a name="db2-known-issues-limitations"></a>

下面各项是有关使用 Amazon RDS for Db2 的已知问题和限制：

**Topics**
+ [身份验证限制](#db2-known-issues-limitations-authentication-limit)
+ [非防护例程](#db2-known-issues-limitations-non-fenced-routines)
+ [迁移期间的非自动存储表空间](#db2-known-issues-limitations-non-automatic-storage-tablespaces)
+ [设置 db2\$1compatibility\$1vector 参数](#db2-known-issues-limitations-db2-compatibility-vector)
+ [迁移包含无效包的数据库](#db2-known-issues-limitations-invalid-packages-migrating)

## 身份验证限制
<a name="db2-known-issues-limitations-authentication-limit"></a>

Amazon RDS 将 `db2auth` 默认设置为 `JCC_ENFORCE_SECMEC`。但是，如果您不想通过网络强制使用用户 ID 和密码加密，可以通过将参数组中的 `db2auth` 参数更改为 `CLEAR_TEXT` 来覆盖此设置。有关更多信息，请参阅 [在 Amazon RDS 中修改数据库参数组中的参数](USER_WorkingWithParamGroups.Modifying.md)。

## 非防护例程
<a name="db2-known-issues-limitations-non-fenced-routines"></a>

RDS for Db2 不支持创建非防护例程，也不支持通过备份和还原数据来迁移这些例程。要检查您的数据库是否包含任何非防护例程，请运行以下 SQL 命令：

```
SELECT 'COUNT:' || count(*) FROM SYSCAT.ROUTINES where fenced='N' and routineschema not in ('SQLJ','SYSCAT','SYSFUN','SYSIBM','SYSIBMADM','SYSPROC','SYSTOOLS')
```

## 迁移期间的非自动存储表空间
<a name="db2-known-issues-limitations-non-automatic-storage-tablespaces"></a>

RDS for Db2 不支持创建新的非自动存储表空间。当您使用原生还原对数据库进行一次性迁移时，RDS for Db2 会自动将您的非自动存储表空间转换为自动存储表空间，然后将您的数据库还原到 RDS for Db2。有关一次性迁移的信息，请参阅[针对 Amazon RDS for Db2 从 Linux 迁移到 Linux](db2-one-time-migration-linux.md)和[针对 Amazon RDS for Db2 从 AIX 或 Windows 迁移到 Linux](db2-one-time-migration-aix-windows-linux.md)。

## 设置 db2\$1compatibility\$1vector 参数
<a name="db2-known-issues-limitations-db2-compatibility-vector"></a>

使用 Amazon RDS，您可以在创建数据库实例时创建初始数据库，然后修改关联参数组中的参数。但是，对于 Db2，如果您要在参数组中设置 `db2_compatibility_vector` 参数，则必须先在自定义参数组中修改此参数，在没有数据库的情况下创建数据库实例，然后使用 `rdsadmin.create_database` 存储过程创建数据库。

**设置 `db2_compatibility_vector` 参数**

1. [创建自定义参数组](USER_WorkingWithParamGroups.Creating.md)。（您无法修改默认参数组中的参数。）

1. [修改参数](USER_WorkingWithParamGroups.Modifying.md)。

1. [创建数据库实例](USER_CreateDBInstance.md)。

1. 使用 `rdsadmin.create_database` 存储过程[创建数据库](db2-managing-databases.md#db2-creating-database)。

1. [将参数组与包含数据库的数据库实例相关联](USER_WorkingWithParamGroups.Associating.md)。

## 迁移包含无效包的数据库
<a name="db2-known-issues-limitations-invalid-packages-migrating"></a>

如果您使用 `RESTORE` 命令，将包含 `INVALID` 包的 Db2 数据库迁移到 RDS for Db2，则在开始使用数据库时可能会遇到问题。由于数据库实例用户 `rdsdb` 的授权设置以及删除了从 `PUBLIC` 授权，`INVALID` 包可能会导致问题。`INVALID` 包会导致以下命令失败：
+ `db2updv115`
+ `db2 "call SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS()"`

在使用 `RESTORE` 命令迁移数据库之前，请运行以下命令来确保数据库中不包含 `INVALID` 包：

```
db2 "SELECT 'COUNT:' || count(*) FROM SYSCAT.INVALIDOBJECTS"
```

如果命令返回的计数大于零，则调用以下命令：

```
db2 "call SYSPROC.ADMIN_REVALIDATE_DB_OBJECTS()"
```

然后，调用前面的命令以确认您的数据库中不再包含 `INVALID` 包。

```
db2 "SELECT 'COUNT:' || count(*) FROM SYSCAT.INVALIDOBJECTS"
```

现在，您已做好准备，可以备份数据库并将其还原到 RDS for Db2 数据库实例。