迁移数据

可以通过以下两种方式之一迁移数据:联机或脱机。
  • 联机数据移动:可以在 Oracle SQL Developer 内创建与 Microsoft SQL Server 源数据库的连接,然后迁移数据。
  • 脱机数据移动:可以从 Microsoft SQL Server 导出数据。SQL Developer 将创建一系列 BCP 和 sqlldr 文件,您可以从批处理文件运行这些文件。

联机数据移动适用于小型数据集,而脱机数据移动对于移动大量数据非常有用。此外,对于大量数据,建议使用 Oracle Cloud Infrastructure 文件存储来帮助在迁移过程中实现数据移动的整体性能。

将数据脱机迁移

在捕获过程中,将生成脱机数据移动脚本,并将数据提取到名为 datamove 的项目输出目录中。执行这些脚本就是将数据从 sql 服务器窗口主机计算机迁移到 Oracle Autonomous Database。

datamove 目录应如下所示:
Wkdir
	projectName
		datamove
			YYYY-MM-DD_HH-MI-SS
				AdventureWorks

在 AdventureWorks 目录内,您应看到六个子文件夹,这些子文件夹对应于 SQL Server AdventureWorks 数据库下的所有用户。

您应该在 AdventureWorks 文件夹中看到以下目录:

  • ADVENTUREWORKS
  • SALES_ADVENTUREWORKS
  • PERSON_ADVENTUREWORKS
  • PURCHASING_ADVENTUREWORKS
  • HUMANRESOURCES_ADVENTUREWORKS
  • PRODUCTION_ADVENTUREWORKS

您应该在 AdventureWorks 文件夹中看到以下文件:

  • MicrosoftSQLServer_data.bat
  • MicrosoftSQLServer_data.sh
  • oracle_external.bat
  • oracle_external.sh
  • oracle_loader.bat
  • oracle_loader.sh

脚本 MicrosoftSqlServer_data.bat 是主 Windows 系统批处理脚本,该脚本调用在每个方案目录中创建的其他批处理脚本。以下是执行示例:

  1. 在源 Windows 系统提示符上启动 MicrosoftSqlServer_data.bat 脚本。在提示符下,转到该目录并输入 Windows 服务器主机名、Windows 系统管理员帐户(通常为 sa)和 SA 密码。
    prompt> cd "C:\_rkd\_OCI\DB-Migration\Non-Oracle\MS-SQL\wkdir\Capture\sqladvworks4\datamove\YYYY-MM-DD_HH-MI-SS\AdventureWorks\“
    prompt> MicrosoftSQLServer_data.bat sql-server-hostname sa sa-password

    在上述执行过程中,每个数据库表都会按方案生成相应的日志,并存储在子目录日志下的每个方案文件夹中。

  2. (可选)在数据迁移期间或完成之后查看这些日志,并验证数据移动。
    强烈建议查看日志并验证数据迁移。下面是一个示例日志,以粗体显示加载概要。
    SQL*Loader: Release 19.0.0.0.0 - Production on Thu Mar 4 07:39:44 2021
    Version 19.10.0.0.0
    
    Copyright (c) 1982, 2021, Oracle and/or its affiliates.  All rights reserved.
    
    Control File:   control\AdventureWorks.DatabaseLog.ctl
    Data File:      data/AdventureWorks.DatabaseLog.dat
      File processing option string: "str '<EORD>'"
      Bad File:     control\AdventureWorks.DatabaseLog.bad
      Discard File:  none specified
     
     (Allow all discards)
    
    Number to load: ALL
    Number to skip: 0
    Errors allowed: 50
    Bind array:     250 rows, maximum of 1048576 bytes
    Continuation:    none specified
    Path used:      Conventional
    
    Table ADVENTUREWORKS.DATABASELOG, loaded from every logical record.
    Insert option in effect for this table: INSERT
    TRAILING NULLCOLS option in effect
    
       Column Name                  Position   Len  Term Encl Datatype
    ------------------------------ ---------- ----- ---- ---- ---------------------
    DATABASELOGID                       FIRST     *           CHARACTER            
        Terminator string : '<EOFD>'
    POSTTIME                             NEXT     *           CHARACTER            
        Terminator string : '<EOFD>'
        SQL string for column : "TO_TIMESTAMP(:PostTime, 'yyyy-mm-dd HH24:mi:ss.ff3')"
    DATABASEUSER                         NEXT     *           CHARACTER            
        Terminator string : '<EOFD>'
        SQL string for column : "DECODE(:DatabaseUser, CHR(00), ' ', :DatabaseUser)"
    EVENT                                NEXT     *           CHARACTER            
        Terminator string : '<EOFD>'
        SQL string for column : "DECODE(:Event, CHR(00), ' ', :Event)"
    SCHEMA                               NEXT     *           CHARACTER            
        Terminator string : '<EOFD>'
        SQL string for column : "DECODE(:Schema, CHR(00), ' ', :Schema)"
    OBJECT                               NEXT     *           CHARACTER            
        Terminator string : '<EOFD>'
        SQL string for column : "DECODE(:Object, CHR(00), ' ', :Object)"
    TSQL                                 NEXT *****           CHARACTER            
        Maximum field length is 2000000
        Terminator string : '<EOFD>'
    XMLEVENT                             NEXT *****           CHARACTER            
        Maximum field length is 2000000
        Terminator string : '<EOFD>'
    value used for ROWS parameter changed from 250 to 1
    
    Table ADVENTUREWORKS.DATABASELOG:
      1596 Rows successfully loaded.
      0 Rows not loaded due to data errors.
      0 Rows not loaded because all WHEN clauses were failed.
      0 Rows not loaded because all fields were null.
    
    
    Space allocated for bind array:                4001572 bytes(1 rows)
    Read   buffer bytes: 1048576
    
    Total logical records skipped:          0
    Total logical records read:          1596
    Total logical records rejected:         0
    Total logical records discarded:        0
    
    Run began on Thu Mar 04 07:39:44 2021
    Run ended on Thu Mar 04 07:39:56 2021
    
    Elapsed time was:     00:00:12.44
    CPU time was:         00:00:01.79
    

测试迁移

根据迁移的数据库的复杂性,迁移项目的很大一部分可能会测试。

Oracle 不会提供任何工具来自动为您验证迁移的数据库。应在开始迁移之前规划并考虑这一迁移阶段。以下内容应属于您的项目计划:

  1. 请验证数据库结构。
  2. 请验证数据库安全性。
  3. 验证数据。
  4. 验证视图的逻辑正确性。
  5. 测试应用程序。