暂无图片
暂无图片
暂无图片
暂无图片
暂无图片

Oracle 迁移至 SQL Server

Ty3306 2023-09-14
1925

Oracle 迁移 SQL Server

背景

公司系统整合,基于各种原因,需将某 Oracle 转为 SQL Server 并与其他 SQL Server 库合并。


工具

Microsoft SQL Server Migration Assistant (SSMA) for Oracle 工具,用于将 Oracle 数据库迁移到 SQL Server。 SSMA for Oracle 会将 Oracle 数据库对象转换为 SQL Server 对象并加载到 SQL Server,然后将数据从 Oracle 迁移到 SQL Server 。


SSMA 客户端由以下任务的程序文件组成:

  • 连接到一个 Oracle 数据库。

  • 连接到一个 SQL Server 实例。

  • 将 Oracle 数据库对象转换为 SQL Server 语法。

  • 将对象加载到 SQL Server 中。

  • 将数据库迁移到 SQL Server。


本文档介绍 SSMA for Oracle,并提供将 Oracle 数据库迁移到 SQL Server的分步说明。


1. 安装

下载:https://www.modb.pro/doc/117141

1.1 环境要求

  • 需要迁移的 Oracle 最好要高于 Oracle 9。

  • Windows 7 或更高版本,或者 Windows Server 2008 或更高版本。

  • Microsoft Windows Installer 3.1 或更高版本。

  • Microsoft .NET Framework 4.7.2 版或更高版本。

  • 网络要能连接到要迁移的 Oracle 数据库。

  • 能够访问要将数据库对象和数据迁移到的目标 SQL Server ,并对其拥有足够的权限。

  • 4 GB RAM 及以上。


1.2 安装 SSMA for Oracle 客户端

双击 SSMAforOracle_9.3.0.msi









1.3 安装 SSMA for Oracle 扩展包

SSMA 扩展包将部署扩展存储过程,并将 sysdb 数据库添加到指定的 SQL Server 实例。 扩展存储过程提供了模拟 Oracle 功能和行为所需的功能,而 sysdb 数据库包含迁移数据所需的表和存储过程。

此外,在将数据迁移到 SQL Server 时,SSMA 会在使用服务器端数据迁移引擎来迁移数据时创建 SQL Server 代理作业。


1.3.1 环境要求

在 SQL Server 上安装 SSMA for Oracle 服务器组件之前,请确保满足以下要求:

  • 已安装 SQL Server 实例。

  • Microsoft Windows Installer 3.1 或更高版本。

  • Microsoft .NET Framework 4.7.2 版或更高版本。

  • 用于 Oracle 的 OLE DB 提供程序(如果正在使用 OLE DB),并连接到要迁移的 Oracle 数据库。 可以从 Oracle 网站安装程序。

  • 在安装过程中,必须运行 SQL Server Browser 服务。 此服务用于在安装向导中填充一组 SQL Server 实例。 安装之后,可以禁用 SQL Server Browser 服务。


1.3.2 安装

SSMAforOracleExtensionPack_9.3.0.msi







等一会,会自动弹出新的对话框




Windows 身份验证会使用 Windows 凭据来尝试登录到 SQL Server 实例。 如果选择“服务器身份验证”,则必须输入一个 SQL Server 登录名和密码。


要求设置主密钥的密码,该密码将用于加密在服务器端数据迁移期间存储在扩展包数据库中的任何敏感数据。 提供一个强密码。


sysdb 数据库是使用此数据库中创建的数据迁移(使用服务器端数据迁移引擎)所需的表和存储过程创建的。




安装完成后会桌面会出现相应的图标



1.3.3 启用 CLR

sp_configure 'clr enabled', 1
GO
RECONFIGURE
GO

如果未启用 CLR,当 SSMA 连接到 SQL Server 时会收到如下错误:

SSMA 无法检索此扩展包程序集版本信息。 请在数据库服务器上重新安装此扩展包。


安装此扩展包之后,sysdb 数据库中会出现 ssma_oracle.bcp_migration_packages 表。




2. 迁移流程

要将对象和数据从 Oracle 数据库迁移到 SQL Server 数据库,则参考用以下过程:

  1. 创建一个新的 SSMA 项目。

    创建项目后,即可设置项目转换、迁移和类型映射选项。

  2. 连接到 Oracle 数据库服务器。

  3. 连接到一个 SQL Server 实例。

  4. 将 Oracle 数据库架构映射到 SQL Server 数据库架构。

  5. (可选)创建评估报告,以评估要转换的数据库对象并估算转换时间。

  6. 将 Oracle 数据库架构转换为 SQL Server 架构。

  7. 将转换后的数据库对象加载到 SQL Server 中。

    有两个选择:

    • 保存一个脚本,并在 SQL Server 中运行此脚本

    • 同步数据库对象

  8. 将数据迁移到 SQL Server。



3. 迁移

3.1 新建项目




3.2 项目设置-数据类型映射

Tools -> Projects Settings -> Type Mapping



3.3 连接到 Oracle



填写连接信息


3.4 选择需要迁移的schema




可以看到已经加载除了 192.168.10.22 中相关的 Schemas 和 Synonyms



选择需要转换的对象,这里就以转换表 TY.T1 为例

选择 T1 表后,可以看到又边会出现表的一些信息,可以进行查看


3.5 连接到 SQL Server

要将 Oracle 数据库迁移到 SQL Server,必须连接到 SQL Server 的目标实例。 连接时,SSMA 会获取 SQL Server 实例中的所有数据库的元数据,并在 SQL Server 元数据资源管理器中显示数据库元数据。


3.5.1 SQL Server 权限

用于连接到 SQL Server 的帐户需要不同的权限,具体取决于帐户执行的操作:

  • 要将 Oracle 对象转换为 Transact-SQL 语法、从 SQL Server 更新元数据或者将转换后的语法保存到脚本,帐户必须拥有登录到 SQL Server 实例的权限。

  • 要将数据库对象加载到 SQL Server 中,帐户必须是 db_ddladmin 数据库角色的成员。

  • 要将数据迁移到 SQL Server,帐户必须是:

    • db_owner 数据库Owner。

    • sysadmin 管理员服务器角色的成员, 在数据迁移期间创建 SQL Server 代理作业步骤以运行 SSMA 批量复制工具时,需要满足这一条件。

  • 要运行 SSMA 生成的代码,帐户必须对目标数据库的 ssma_oracle 架构中的所有用户定义函数拥有 EXECUTE 权限。 这些函数提供了 Oracle 系统函数的等效功能,供转换后的对象使用。


3.5.2 连接


Server Name: sqlserver 连接地址,因SSMA 是装在本地的,则用 localhost 表示本地连接

Server port:默认,如果端口有设置,则填指定的端口

Database:需要迁移到 sqlserver 上的哪个数据库



3.5.3 架构转换

在“Oracle 元数据资源管理器”窗格中,右键单击要使用的架构,然后选“转换架构” 。 或者,可以选择右上方的“转换架构”选项卡。



在“Oracle 元数据资源管理器”窗格中,右键单击要使用的架构,然后选“转换架构” 。 或者,可以选择右上方的“转换架构”选项卡。


将转换后的 Transact-SQL 文本与原始代码进行比较,并查看建议。


在“输出”窗格中,选择“查看结果”图标,然后在“错误列表”窗格中查看任何错误


3.5.4 迁移结构

在“SQL Server 元数据资源管理器”窗格中,右键单击数据库,然后选择“与数据库同步” 。 此操作会将 Oracle 架构发布到 SQL Server 实例。



查看源项目与目标之间的映射,如此处所示:



3.5.5 迁移数据

在“Oracle 元数据资源管理器”窗格中,右键单击要迁移的架构或对象,然后选择“迁移数据” 。 或者,可以选择右上方的“迁移数据”选项卡。

若要迁移整个数据库的数据,请选中数据库名称旁边的复选框。 若要从单个表中迁移数据,请展开数据库,展开“表”,然后选中表旁边的复选框。 若要忽略单个表中的数据,请清除对应的复选框。






输入 Oracle 和 SQL Server 的连接详细信息

迁移完成后,查看“数据迁移报告”



至此,则已完成全部的迁移。



总结

值得注意的是,这里只是迁移一个表的实验,没那么复杂,生产环境中会包括,function、package、trigger、view等等对象的转换问题。

  • 语法问题。Oracle 和 SQL Server 有些对象的写法上有差异,在转换后可能需要改写。

  • 数据类型。有些类型Oracle里有,SQL Server 里没有,比如 number,varchar2等。

  • 系统函数。有些函数的结果也可能不同,如:SUBSTR。

  • 游标。

  • dblinke无法转换。

  • 用户自定义类型无法转换。











「喜欢这篇文章,您的关注和赞赏是给作者最好的鼓励」
关注作者
【版权声明】本文为墨天轮用户原创内容,转载时必须标注文章的来源(墨天轮),文章链接,文章作者等基本信息,否则作者和墨天轮有权追究责任。如果您发现墨天轮中有涉嫌抄袭或者侵权的内容,欢迎发送邮件至:contact@modb.pro进行举报,并提供相关证据,一经查实,墨天轮将立刻删除相关内容。

文章被以下合辑收录

评论