在 MSSQL 中从链接服务器 ORACLE 快速加载数据
Fast loading of data from a linked server ORACLE in MSSQL
我在 DB MSSQL 中有程序从链接服务器 ORACLE 加载数据
在 DB MSSQL 中有一个表:
- table_1 包含订单 ID
的列表
- table_2 包含订单的详细信息
在DB MSSQL中使用过程来更新和加载数据到table_2,过程使用运算符 IN 和 CURSOR ,它工作了很长时间。
table_2 包含 1-2 百万行。
是否有任何其他方法可以使用 table_1 中的初始数据将数据从 ORACLE DBMS 快速加载到 MSSQL 中?
听起来好像要在SQL*Server和Oracle之间同步数据。最好的方法是使用可以做到这一点的商业产品。我已经在我们的商店中开发了一些执行此操作的例程,但这并非微不足道。
最简单的方法是使用升序 UID。在同步结束时将最大值记录到table中。下次 运行 同步时,从 > 唯一值开始。
我尽量避免游标,我使用insert/selects。它们更容易编码,运行 非常快,并且作为一个单元失败。我每 4 小时将 60 万条记录从 Oracle 复制到 SQL 服务器。
下面的例子是TSQL,从SQL服务器执行。如果您需要从 Oracle 执行,相同的代码很容易转换为 PL/SQL。两种方法我都做过。
- @last_loaded - 跟踪已加载到数据库中的最高 ID
- tracker_table - table 用于存储 last_loaded 值。
- load_type = 2 - 跟踪器 table 可用于跟踪不同负载的 ID。
- oracledb.. - SQL 服务器链接到 Oracle 的服务器的名称
- COPYSCHEMA - 包含 Oracle table 的模式名称。始终指定!
COPYTABLE - 我们从中复制的 Oracle table 的名称
-- 示例代码
DECLARE @last_loaded INT;
SELECT last_loaded
INTO @last_loaded
FROM tracker_table
WHERE load_type = '2';
INSERT INTO LOAD_TABLE ( ID
, COLUMNA
, COLUMNB
, COLUMNC )
SELECT ID
, columna
, columnb
, columnc
FROM oracledb..COPYSCHEMA.COPYTABLE
WHERE ID > coalesce(@last_loaded, 0);
SELECT MAX(LAST_LOADED)
INTO @last_loaded
FROM LOAD_TABLE;
UPDATE TRACKER_TABLE
SET
LAST_LOADED = @last_loaded
WHERE LOAD_TYPE = 2;
我在 DB MSSQL 中有程序从链接服务器 ORACLE 加载数据
在 DB MSSQL 中有一个表:
- table_1 包含订单 ID 的列表
- table_2 包含订单的详细信息
在DB MSSQL中使用过程来更新和加载数据到table_2,过程使用运算符 IN 和 CURSOR ,它工作了很长时间。 table_2 包含 1-2 百万行。
是否有任何其他方法可以使用 table_1 中的初始数据将数据从 ORACLE DBMS 快速加载到 MSSQL 中?
听起来好像要在SQL*Server和Oracle之间同步数据。最好的方法是使用可以做到这一点的商业产品。我已经在我们的商店中开发了一些执行此操作的例程,但这并非微不足道。
最简单的方法是使用升序 UID。在同步结束时将最大值记录到table中。下次 运行 同步时,从 > 唯一值开始。
我尽量避免游标,我使用insert/selects。它们更容易编码,运行 非常快,并且作为一个单元失败。我每 4 小时将 60 万条记录从 Oracle 复制到 SQL 服务器。
下面的例子是TSQL,从SQL服务器执行。如果您需要从 Oracle 执行,相同的代码很容易转换为 PL/SQL。两种方法我都做过。
- @last_loaded - 跟踪已加载到数据库中的最高 ID
- tracker_table - table 用于存储 last_loaded 值。
- load_type = 2 - 跟踪器 table 可用于跟踪不同负载的 ID。
- oracledb.. - SQL 服务器链接到 Oracle 的服务器的名称
- COPYSCHEMA - 包含 Oracle table 的模式名称。始终指定!
COPYTABLE - 我们从中复制的 Oracle table 的名称
-- 示例代码
DECLARE @last_loaded INT; SELECT last_loaded INTO @last_loaded FROM tracker_table WHERE load_type = '2'; INSERT INTO LOAD_TABLE ( ID , COLUMNA , COLUMNB , COLUMNC ) SELECT ID , columna , columnb , columnc FROM oracledb..COPYSCHEMA.COPYTABLE WHERE ID > coalesce(@last_loaded, 0); SELECT MAX(LAST_LOADED) INTO @last_loaded FROM LOAD_TABLE; UPDATE TRACKER_TABLE SET LAST_LOADED = @last_loaded WHERE LOAD_TYPE = 2;