本文介绍 Oracle SQL Server 迁移助手 (SSMA) 无法转换包含对 Oracle SEQUENCE 对象的引用的语句的一些原因。

A SEQUENCE 是用于生成有序数字序列的 Oracle 对象。 当用户需要创建唯一数字以充当任何表中的主键或外键时,这非常有用。

如果 SSMA 无法在项目的 SSMA 源元数据中找到序列对象,则显示错误消息。

有两种可能性导致 SSMA 无法在源元数据中找到序列的情况:

  • 连接到 Oracle 数据库时,该 SEQUENCE 对象已从导入操作中排除。
  • SEQUENCE 对象使用数据库链接位于远程数据库上。
  • 请考虑以下示例:

    INSERT INTO employees (employeeid, lastname, Firstname)
    VALUES(SQ1.nextval, 'David', 'Miller');
    

    此查询是指在 Oracle 中创建的序列 SQ1 ,SSMA 会尝试迁移到 SQL Server。 但是,如果此 SSMA 找不到此序列的引用,则会生成以下错误:

    O2SS0188:源元数据中找不到序列

    可能的补救措施

    此错误可能是由于 Oracle 中的某些安全功能,或者与 Oracle 数据库连接时出现一些问题。 若要解决此问题,需要确保 SSMA 已正确连接到 Oracle 数据库,并且 Oracle 数据库中的所有对象(如触发器、过程,特别是序列)在 Oracle 元数据资源管理器可见。

    在前面的示例中,通过引用 Oracle 元数据资源管理器,确保 SSMA 与 Oracle 数据库正确链接。 如果在元数据资源管理器中的“序列”节点下看不到相应的所需序列,请重新连接到具有DBA权限的 Oracle。 然后,引用的序列应在 Oracle 元数据资源管理器可见。

    SEQUENCE如果引用的数据库位于使用数据库链接的另一个数据库中,SSMA 不支持直接迁移要在 SQL Server 中共享使用的序列。 而是重新创建 SEQUENCE 源数据库,删除查询中的数据库链接引用,然后使用 SSMA 将数据库转换为 SEQUENCE SQL Server 数据库。

  • O2SS0214:列具有绑定序列,但在源元数据中找不到序列
  • O2SS0217:不支持调用标识序列 CURRVAL (错误)
  • O2SS0221:不支持调用标识序列 NEXTVAL (错误)
  •