转换 Oracle 架构 (OracleToSQL)

连接到 Oracle、连接到 SQL Server 并设置项目和数据映射选项之后,可以将 Oracle 数据库对象转换为 SQL Server 数据库对象。

转换过程

当转换数据库对象时,会从 Oracle 中获取对象定义,将这些定义转换为类似的 SQL Server 对象,然后将这些信息加载到 SSMA 元数据中。 此操作不会将这些信息加载到 SQL Server 的实例中。 然后,可使用 SQL Server 元数据资源管理器查看对象及其属性。

在转换期间,SSMA 会将输出消息打印到“输出”窗格,并将错误消息打印到“错误列表”窗格。 利用输出和错误信息确定是必须修改 Oracle 数据库,还是让转换过程获取所需的转换结果。

设置转换选项

在转换对象之前,查看“项目设置”对话框中的项目转换选项。 使用此对话框,可以设置 SSMA 如何转换函数和全局变量。 有关详细信息,请参阅项目设置(转换)(OracleToSQL)

转换结果

下表显示了已转换哪些 Oracle 对象,以及生成的 SQL Server 对象:

Oracle 对象 生成的 SQL Server 对象
函数 如果可以直接将函数转换为 Transact-SQL,SSMA 将创建一个函数。

在某些情况下,必须将函数转换为存储过程。 在这种情况下,SSMA 将创建一个存储过程和一个用来调用存储过程的函数。
过程 如果过程可以直接转换为 Transact-SQL,SSMA 将创建一个存储过程。

在某些情况下,必须在一个自治事务中调用一个存储过程。 在这种情况下,SSMA 将创建两个存储过程:一个用于实现过程,另一个用于调用正在实现的存储过程。
SSMA 创建一组存储过程和函数,用类似的对象名称进行统一。
序列 SSMA 创建序列对象(SQL Server 2012 或 SQL Server 2014)或模拟 Oracle 序列。
具有依赖对象(如索引和触发器)的表 SSMA 创建具有依赖对象的表。
具有依赖对象(如触发器)的视图 SSMA 创建具有依赖对象的视图。
具体化视图 SSMA 在 SQL Server 上创建索引视图,但有一些异常情况。 如果具体化视图包含以下一个或多个构造,转换将失败:

用户定义函数

SELECT、WHERE 或 GROUP BY 子句中的非确定性字段/函数/表达式

SELECT*、WHERE 或 GROUP BY 子句中的 Float 列的用法(上一个问题的特殊情况)

自定义数据类型(包括嵌套表)

COUNT(非重复 <field>)

FETCH

OUTER 联接(LEFT、RIGHT 或 FULL)

子查询,其他视图

OVER、RANK、LEAD、LOG

MIN、MAX

UNION、MINUS、INTERSECT

HAVING
触发器 SSMA 基于以下规则创建触发器:

BEFORE 触发器转换为 INSTEAD OF 触发器。

AFTER 触发器转换为 AFTER 触发器。

INSTEAD OF 触发器转换为 INSTEAD OF 触发器。 在同一操作上定义的多个 INSTEAD OF 触发器合并到一个触发器中。

使用游标模拟行级触发器。

复合触发器转换为 INSTEAD OF 触发器。 多个复合触发器合并为单个触发器

级联触发器转换为多个单独的触发器。
同义词 为以下对象类型创建同义词:

表和对象表

视图和对象视图

存储过程

函数

解析以下对象的同义词并替换为直接对象引用:

序列



Java 类架构对象

用户定义的对象类型

另一个同义词的同义词无法迁移,将被标记为错误。

不为具体化视图创建同义词。
用户定义类型 SSMA 不支持转换用户定义类型。 用户定义类型,包括它们在 PL/SQL 程序中的用法,都被标记为以下规则指导的特殊转换错误:

用户定义类型的表列转换为 VARCHAR(8000)。

存储过程或函数的用户定义类型的参数转换为 VARCHAR(8000)。

PL/SQL 块中的用户定义类型的变量转换为 VARCHAR(8000)。

对象表转换为标准表。

对象视图转换为标准视图。

转换 Oracle 数据库对象

要转换 Oracle 数据库对象,请首先选择要转换的对象,然后让 SSMA 执行转换。 要在转换期间查看输出消息,请在“视图”菜单上选择“输出”。

要将 Oracle 对象转换为 SQL Server 语法

  1. 在 Oracle 元数据资源管理器中,展开 Oracle 服务器,然后展开“架构”。

  2. 选择要转换的对象:

    • 要转换所有架构,请选中“架构”旁边的复选框。

    • 要转换或忽略一个数据库,请选中架构名称旁边的复选框。

    • 要转换或忽略一个类别的对象,请展开一个架构,然后选中或清除类别旁边的复选框。

    • 要转换或忽略单个对象,请展开类别文件夹,然后选中或清除对象旁边的复选框。

  3. 要转换所有选定的对象,请右键单击“架构”,然后选择“转换架构”。

    也可以右键单击对象或其父级文件夹,然后选择“转换架构”,以转换单个对象或对象类别。

查看转换问题

有些 Oracle 对象可能无法转换。 可以通过查看摘要转换报告,来确定转换成功率。

查看摘要报告

  1. 在 Oracle 元数据资源管理器中,选择“架构”。

  2. 在右窗格中选择“报告”选项卡。

    此报告显示已评估或转换的所有数据库对象的摘要评估报告。 也可以查看单个对象的摘要报告:

    • 要查看单个架构的报告,请在 Oracle 元数据资源管理器中选择此架构。

    • 要查看单个对象的报告,请在 Oracle 元数据资源管理器中选择此对象。 存在转换问题的对象具有一个红色的错误图标。

对于转换失败的对象,可以查看导致转换失败的语法。

查看单个转换问题

  1. 在 Oracle 元数据资源管理器中,展开“架构”。

  2. 展开显示了一个红色错误图标的架构。

  3. 在架构的下方,展开显示红色错误图标的文件夹。

  4. 选择显示红色错误图标的对象。

  5. 在右侧窗格中,单击“报告”选项卡

  6. “报告”选项卡的顶部具有一个下拉列表。 如果此列表显示“统计信息”,请将所选内容更改为“源”

    SSMA 将在代码的正上方显示源代码和几个按钮。

  7. 单击“下一个问题”按钮。 这是一个红色的错误图标,具有一个指向右侧的箭头。

    SSMA 将突出显示它在当前对象中找到的第一个有问题的源代码。

对于无法转换的每个项目,必须确定要对该对象执行的操作:

  • 可以在“SQL”选项卡上修改过程的源代码。

  • 可以修改 Oracle 数据库中的对象,以移除或修改有问题的代码。 要将更新后的代码加载到 SSMA 中,必须更新元数据。 有关详细信息,请参阅连接到 Oracle 数据库 (OracleToSQL)

  • 可将对象从迁移中排除。 在将对象加载到 SQL Server 中并从 Oracle 迁移数据之前,在 SQL Server 元数据资源管理器和 Oracle 元数据资源管理器中,清除项旁边的复选框。

下一步

迁移过程中的下一步是将转换后的对象加载到 SQL Server 中

另请参阅

将 Oracle 数据库迁移到 SQL Server (OracleToSQL)