Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.

SQL Anywhere 11.0.1 (中文) » SQL Anywhere 服务器 - SQL 的用法 » 远程数据和批量操作 » 导入和导出数据 » 将数据库迁移到 SQL Anywhere

 

使用 sa_migrate 系统过程

使用 sa_migrate 系统过程可迁移远程数据。如果要删除表或外键映射,则可使用扩展方法。

使用 sa_migrate 系统过程迁移所有表

如果同时为 table-nameowner-name 参数提供 NULL 值,则会迁移数据库中的所有表,包括系统表。远程数据库中属于不同用户的同名的表在目标数据库中都属于同一个所有者。因此,应该一次只迁移与一个所有者关联的表。

♦  迁移某个远程用户的所有表
  1. 创建目标数据库。请参见创建数据库

  2. 在 Interactive SQL 中,连接到目标数据库。

  3. 创建一个远程服务器以连接到远程数据库。请参见使用 CREATE SERVER 语句创建远程服务器

  4. 创建用于连接远程数据库的外部登录。只有当用户在目标数据库和远程数据库上具有不同的口令,或者当您在远程数据库上登录时使用的用户 ID 与在目标数据库上登录时使用的用户 ID 不同时,才需要创建外部登录。请参见创建外部登录

  5. 创建本地用户,该用户将拥有目标数据库中迁移的表。请参见创建新用户

  6. 在 [SQL 语句] 窗格中,运行 sa_migrate 系统过程。例如,

    CALL sa_migrate( 'local_user1', 'rmt_server1', NULL, 'remote_user1', NULL, 1, 1, 1 );

    此过程使用指定条件依次调用若干过程,并迁移属于用户 remote_user1 的所有远程表。

如果不想让目标数据库上的同一个用户拥有所有迁移的表,则必须通过指定 local-table-ownerowner-name 参数为目标数据库上的每位所有者运行一次 sa_migrate 过程。

有关详细信息,请参见sa_migrate 系统过程

使用 sa_migrate 系统过程迁移各个表

不要为 table-nameowner-name 参数都提供 NULL 值。这将迁移数据库中的所有表,包括系统表。远程数据库中属于不同用户的同名的表在目标数据库中都属于同一个所有者。建议您一次迁移与一个所有者关联的表。

♦  导入远程表(具有修改):
  1. 创建目标数据库。请参见创建数据库

  2. 在 Interactive SQL 中,连接到目标数据库。

  3. 创建一个远程服务器以连接到远程数据库。请参见使用 CREATE SERVER 语句创建远程服务器

  4. 创建用于连接远程数据库的外部登录。只有当用户在目标数据库和远程数据库上具有不同的口令,或者当您在远程数据库上登录时使用的用户 ID 与在目标数据库上登录时使用的用户 ID 不同时,才需要创建外部登录。请参见创建外部登录

  5. 创建本地用户,该用户将拥有目标数据库中迁移的表。请参见创建新用户

  6. 运行 sa_migrate_create_remote_table_list 系统过程。例如,

    CALL sa_migrate_create_remote_table_list( 'rmt_server1',
         NULL, 'remote_user1', 'mydb' );

    必须为 Adaptive Server Enterprise 和 Microsoft SQL Server 数据库指定数据库名。

    此过程使用要迁移的远程表列表填充 dbo.migrate_remote_table_list 表。可以从此表中删除不想迁移的远程表的行。

    有关详细信息,请参见sa_migrate_create_remote_table_list 系统过程

  7. 运行 sa_migrate_create_tables 系统过程。例如:

    CALL sa_migrate_create_tables( 'local_user1' );

    此过程从 dbo.migrate_remote_table_list 中提取远程表列表,然后为列出的每个远程表创建代理表和基表。此过程还为迁移的表创建所有主键索引。

    有关详细信息,请参见sa_migrate_create_tables 系统过程

  8. 如果要将数据从远程表迁移到目标数据库上的基表中,可运行 sa_migrate_data 系统过程。例如,

    执行以下语句:

    CALL sa_migrate_data( 'local_user1' );

    此过程将数据从每个远程表迁移到由 sa_migrate_create_tables 过程创建的基表中。

    有关详细信息,请参见sa_migrate_data 系统过程

    如果不想从远程数据库中迁移外键,则可以跳至第 10 步。

  9. 运行 sa_migrate_create_remote_fks_list 系统过程。例如,

    CALL sa_migrate_create_remote_fks_list( 'rmt_server1' );

    此过程使用与 dbo.migrate_remote_table_list 中列出的每个远程表关联的外键列表填充表 dbo.migrate_remote_fks_list。

    您可以删除不想在本地基表上重新创建的任何外键映射。

    有关详细信息,请参见sa_migrate_create_remote_fks_list 系统过程

  10. 运行 sa_migrate_create_fks 系统过程。例如,

    CALL sa_migrate_create_fks( 'local_user1' );

    此过程在基表上创建在 dbo.migrate_remote_fks_list 中定义的外键映射。

    有关详细信息,请参见sa_migrate_create_fks 系统过程

  11. 如果要删除为执行迁移而创建的代理表,可运行 sa_migrate_drop_proxy_tables 系统过程。例如,

    CALL sa_migrate_drop_proxy_tables( 'local_user1' );

    此过程删除为迁移创建的所有代理表,整个迁移过程到此完成。

    有关详细信息,请参见sa_migrate_drop_proxy_tables 系统过程