转换 Oracle 架构 (OracleToSQL)

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

转换过程

转换数据库对象从 Oracle 获取对象定义,将其转换为类似的 SQL Server 对象,然后将此信息加载到 Oracle Microsoft SQL Server 迁移助手(SSMA)的元数据中。 它不会将信息加载到 SQL Server 的实例中。 然后,可以使用 SQL Server 元数据资源管理器查看对象及其属性。

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

设置转换选项

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

转换结果

下表显示了转换了哪些 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 上创建索引视图,但存在一些例外情况。 如果具体化视图包括以下一个或多个构造,转换将失败:

用户定义的函数。

SELECTWHEREGROUP BY子句中出现非确定性字段、函数或表达式。

SELECT*WHEREGROUP BY子句中的浮点数列使用(之前问题的特殊情况)。

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

COUNT (独特 <字段>)。

FETCH

OUTER 连接(LEFTRIGHTFULL)。

子查询,其他视图。

OVERRANKLEADLOG

MINMAX

UNIONMINUSINTERSECT

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 数据库”。
  • 您可以从迁移中排除对象。 在 SQL Server 元数据资源管理器和 Oracle 元数据资源管理器中,清除项旁边的复选框。 然后将对象加载到 SQL Server 中,并从 Oracle 迁移数据。