数据库查询数据如何在3台计算机之间处理?

时间:2017-10-21 02:18:30

标签: sql oracle oracle-sqldeveloper

我试图了解如何在服务器之间真正处理和发送数据,但我无法找到一步一步的详细解释。用一个例子来解释:

假设您有100M大小为10GB的记录,并且您需要使用单独的台式计算机通过LAN在2个数据库服务器之间传输数据以执行该脚本。总共有三台电脑:

  1. 服务器A具有您从中选择数据的源数据库。
  2. 服务器B具有您要将数据写入的目标数据库。
  3. 桌面C是您使用SQL Developer或TOAD等客户端工具执行脚本的地方。
  4. SQL看起来像这样:

    Insert Into ServerBDatabase.MyTable (MyFields) 
    Select MyFields 
    From ServerADatabase.MyTable
    

    有人可以解释数据的处理位置和发送方式吗?或者甚至指出一个很好的资源来阅读这个主题。

    例如,我试图了解它是否是这样的:

    1. 桌面C上的客户端工具将查询命令发送到服务器A上的DBMS。此时,通过LAN发送的所有内容都是命令的文本。

    2. 服务器A上的DBMS接收查询命令,解释它,然后 处理服务器A上的数据。此时,完整的10GB数据被加载到内存中进行处理,并且没有任何内容通过LAN发送。

    3. 在服务器A上处理完整的100M记录后,服务器A上的DBMS将查询命令的文本和LAN上的完整100M数据记录一起发送到服务器B上的DBMS。在带宽限制方面,这些数据被分解并通过LAN以每秒一定的比特数发送到块中,并以这些数据块数量加载到服务器B的内存中。

    4. 当服务器B上的DBMS收到LAN上的数据块时,它会将其重新组合在服务器B上的内存中,以便将其重新恢复为完整的100M记录状态。

    5. 一旦100M记录由服务器B上的DBMS完全拼凑回来,服务器B上的DBMS就会执行查询命令,将目标表中记录的记录插入目标表中的一行。一段时间并将其写入磁盘。

    6. 所有这些都是假设,所以我知道我可以把它全部弄错,这就是我寻求帮助的原因。请帮助纠正我的错误和/或填写空白。

1 个答案:

答案 0 :(得分:1)

这是您的查询:

Insert Into ServerBDatabase.MyTable (MyFields)
    Select MyFields
    From ServerADatabase.MyTable;

据推测,您是在连接到服务器A的客户端工具上执行此操作(尽管相同的推理适用于服务器B)。整个查询将发送到服务器,服务器A需要与服务器B建立远程连接。

换句话说,一旦发送了查询,客户端就与它无关 - 除了等待查询被发送。

关于从一个数据库插入另一个数据库的细节,这些数据库取决于数据库。我希望数据能够在一个事务中流式传输到服务器B上的表中。具体细节可能取决于特定的数据库软件及其配置。