Click here to view and discuss this page in DocCommentXchange. In the future, you will be sent there automatically.
将一组远程表迁移到 SQL Anywhere 数据库中。
sa_migrate( base_table_owner , server_name [, table_name [, owner_name [, database_name [, migrate_data [, drop_proxy_tables [, migrate_fkeys ] ] ] ] ] ] )
base_table_owner 使用此 VARCHAR(128) 参数指定在目标 SQL Anywhere 数据库中拥有迁移表的用户。使用 GRANT CONNECT 语句创建此用户。此参数需要值。
server_name 使用此 VARCHAR(128) 参数指定用于连接到远程数据库的远程服务器的名称。使用 CREATE SERVER 语句创建此服务器。此参数需要值。
table_name 如果要迁移单个表,请使用此可选的 VARCHAR(128) 参数指定表名。否则,应该为此参数指定 NULL(缺省值)。不要将 table_name 和 owner_name 参数都指定为 NULL。
owner_name 如果只迁移属于一个所有者的表,请使用此可选的 VARCHAR(128) 参数指定该所有者的名称。否则,应该为此参数指定 NULL(缺省值)。不要将 table_name 和 owner_name 参数都指定为 NULL。
database_name 使用此可选的 VARCHAR(128) 参数指定远程数据库的名称。如果想仅迁移远程服务器上一个数据库中的表,必须指定数据库名。否则,为此参数使用 NULL(缺省值)。
migrate_data 使用此可选的 BIT 参数指定是否迁移远程表中的数据。此参数可为 0(不迁移数据)或 1(迁移数据)。缺省情况下将迁移数据(1 为缺省值)。
drop_proxy_tables 使用此可选的 BIT 参数指定在迁移完成后是否删除为迁移进程所创建的代理表。此参数可为 0(不删除代理表)或 1(删除代理表)。缺省情况下将删除代理表(1 为缺省值)。
migrate_fkeys 使用此可选的 BIT 参数指定是否迁移外键映射。此参数可为 0(不迁移外键映射)或 1(迁移外键映射)。缺省情况下将迁移外键映射(1 为缺省值)。
可以使用此过程将表从远程 Oracle、IBM DB2、Microsoft SQL Server、Adaptive Server Enterprise 或 SQL Anywhere 数据库迁移到 SQL Anywhere 中。使用此过程,仅需要一步,即可从指定的服务器迁移一组远程表,包括它们的外键映射。sa_migrate 系统过程调用以下系统过程:
如果需要更大的灵活性,可能需要使用这些系统过程而不是 sa_migrate。例如,如果迁移外键关系由不同用户拥有的表,则使用 sa_migrate 时无法保持外键关系。
在可以迁移任何表之前,必须先使用 CREATE SERVER 语句创建远程服务器以连接到远程数据库。可能还需要使用 CREATE EXTERNLOGIN 语句创建到远程数据库的外部登录。
可通过仅指定 base_table_owner 和 server_name 参数,将所有表从远程数据库迁移到 SQL Anywhere 数据库。然而,如果仅指定这两个参数,所有迁移的表都将属于目标 SQL Anywhere 数据库中的一个所有者。如果表在远程数据库上有不同的所有者,并且您希望它们在 SQL Anywhere 数据库上有不同的所有者,则必须分别为每个所有者迁移表,每次调用 sa_migrate 过程时都指定 base_table_owner 和 owner_name 参数。
不要将 table_name 和 owner_name 参数都指定为 NULL。为 table_name 和 owner_name 参数提供 NULL 值将迁移数据库中的所有表,包括系统表。此外,远程数据库中那些名称相同但所有者不同的表在目标数据库中均属同一所有者。建议您一次迁移与一个所有者关联的表。
您必须具有以下系统特权:
CREATE TABLE 或 CREATE ANY TABLE(如果您不是基表所有者)
SELECT ANY TABLE(如果您不是基表所有者)
INSERT ANY TABLE(如果您不是基表所有者)
ALTER ANY TABLE(如果您不是基表所有者)
CREATE ANY INDEX(如果您不是基表所有者)
DROP ANY TABLE(如果您不是基表所有者)
无
以下语句迁移远程数据库中所有属于用户 DBA 的表(包括外键映射),迁移远程表中的数据,并在迁移完成后删除代理表。此例中,迁移的所有表都属于目标 SQL Anywhere 数据库中的 LocalUser。
CALL sa_migrate( 'LocalUser', 'RemoteSA', NULL, 'DBA', NULL, 1, 1, 1 );
以下语句迁移远程数据库中所有属于用户 DBA 的表。在目标 SQL Anywhere 数据库中,这些表属于用户 LocalUser。迁移期间创建的代理表在迁移完成后不会遭到删除,它们属于 LocalUser。
CALL sa_migrate( 'LocalUser', 'RemoteSA', NULL, 'DBA', NULL, 1, 0, 1 );