服务器 频道

在DB2 UDB中复制空间数据(下篇)

  【IT168 服务器学院】 清单 11. 验证全部设置

INSERT
INTO   streets(id, name, track)
VALUES ( 1, ''first street'',
   db2gse.ST_LineString(''linestring(10 10, 20 20)'', 1) )@

        SELECT id, VARCHAR(name, 20),
       VARCHAR(track..ST_AsText(), 50)
FROM   tg_streets@
ID          2                    3
----------- -------------------- ------------------------------------------------------------
          1 first street         LINESTRING(10.000000 10.000000, 20.000000 20.000000)
  1 record(s) selected.

INSERT
INTO   streets(id, name, track)
VALUES ( 2, ''second street'',
   db2gse.ST_LineString(''linestring(10 15, 20 15)'', 1) )@

        SELECT id, VARCHAR(name, 20),
       VARCHAR(track..ST_AsText(), 50)
FROM   tg_streets@
ID          2                    3
----------- -------------------- ------------------------------------------------------------
          1 first street         LINESTRING(10.000000 10.000000, 20.000000 20.000000)
          2 second street        LINESTRING(10.000000 15.000000, 20.000000 15.000000)
  2 record(s) selected.

DELETE
FROM   streets
WHERE  id = 1@

        SELECT id, VARCHAR(name, 20),
       VARCHAR(track..ST_AsText(), 50)
FROM   tg_streets@
ID          2                    3
----------- -------------------- ------------------------------------------------------------
          2 second street        LINESTRING(10.000000 15.000000, 20.000000 15.000000)
  1 record(s) selected.

UPDATE streets
SET    name = ''another name''
WHERE  id = 2@

        SELECT id, VARCHAR(name, 20),
       VARCHAR(track..ST_AsText(), 50)
FROM   tg_streets@
ID          2                    3
----------- -------------------- ------------------------------------------------------------
          2 another name         LINESTRING(10.000000 15.000000, 20.000000 15.000000)
  1 record(s) selected.

UPDATE streets
SET (name, track) = ( ''yet another name'',
       db2gse.ST_LineString(''linestring(5 5, 1 1)'', 1) )
WHERE ID = 2@

        SELECT id, VARCHAR(name, 20),
       VARCHAR(track..ST_AsText(), 50)
FROM   tg_streets@
ID          2                    3
----------- -------------------- ------------------------------------------------------------
          2 yet another name     LINESTRING(5.000000 5.000000, 1.000000 1.000000)
  1 record(s) selected.
      

  上面的例子中并不包含任何针对 ID 字段的 UPDATE 操作。如果您希望对主键字段中的数据进行修改,或者,更确切地说,您希望对目标主键字段进行修改,那么您就需要先从定义目标主键的字段获取其先前的值。否则,Apply 进程就无法将在源表中修改的记录与相应的目标表记录匹配起来。有关这方面的更多细节请参考 DB2 Replication User''s Guide and Reference [4]。

  设置工具 db2se_repl

我们详细看一看捕获空间数据的变化和准备目标数据库两节中必要的设置步骤。为了更进一步简化管理任务,我们用 Java 编程语言实现了一个名为 db2se_repl 的工具您用这个工具可以通过完全限定名及其所在的数据库对源表进行详细说明,也可以定义您打算将数据复制到哪张目标表上。

  语法

  这个工具的定义是基于语法的,下面您可以看到这种语法的详细情况,以及若干选项和关键字的含义。图中的语法图遵从 DB2 SQL Reference所使用的样式。


 
>>--SETUP SPATIAL REPLICATION------------------------------>
>----| source |--| target |--+------------------------+---><
                             -''-VERBOSE--+---------+---''
                                         -''-TRACE---''

source:
|--REPLICATE TABLE--+-----------------+--table_name-------->
                    -''-schema_name--.--''
>-----+---------------------------+------------------------>
      |     .--,------------.     |
      |     V               |     |
      -''-(-----column_name--+--)---''
>-----FROM CAPTURE SERVER--database_url-------------------->
>-----USER--user_name--PASSWORD--password------------------>
>-----+-----------------------------------------------+----|
      -''-USING--(--CAPTURE SCHEMA--capture_schema--)---''

target:
|--TO TARGET TABLE--+-----------------+--table_name-------->
                    -''-schema_name--.--''
>-----+---------------------------+------------------------>
      |     .--,------------.     |
      |     V               |     |
      -''-(-----column_name--+--)---''
>-----ON APPLY SERVER--database_url------------------------>
>-----+---------------------------------------+------------>
      -''-USER--user_name--PASSWORD--password---''
>-----USING--(--*---SUBSCRIPTION SET--set_name--*--,------->
>-----*--APPLY_QUALIFIER--apply_qualifier--*--,------------>
>-----*--SPATIAL REFERENCE SYSTEM IDENTIFIER--srs_id--*--)-|

  REPLICATE TABLE schema_name.table_name ( column_name, & )

定义待复制的源表及其字段。如果未指定字段名,那么表中的所有字段都将被复制。在所有字段中必须有且仅有一个空间类型的字段。字段清单中必须包含源表的主键。

  FROM CAPTURE SERVER database_url

定义可以找到源表的数据库的名称和位置。数据库的 URL 必须具备如下的格式:
//host-name:port/database-name
这项信息用于通过 Type 4 JDBC 驱动程序链接源数据库。这意味着您不必将数据库加入本地目录。

  CAPTURE SCHEMA capture_schema

定义源数据库上的 capture 模式。如果这项参数未指定,那么默认模式名称为“ASN”。

  TO TARGET TABLE schema_name.table_name (column_name, -'')

用限定性名称表示要复制到的目标表。如果该表不存在,则在目标数据库中基于源表的定义创建一个。在这里不指定字段名;字段名是根据源表派生出来的。

如果目标表已经存在,则重用,并且如果有指定的字段名,那么这些字段名必须和已经存在的表中的字段名相等。

  ON APPLY SERVER database_url

指定目标表所在的数据库的名称和位置。数据库的 URL 必须具备下面的格式:
//host-name:port/database-name
这项信息用于通过 Type 4 JDBC 驱动程序连接目标数据库。这意味着您不必非将这个数据库记录在本地目录中不可。

  SUBSCRIPTION SET set_name

指定一个订阅集合,源到目标的映射关系将作为新成员加入其中。

  APPLY QUALIFIER apply_qualifier

指定用于该订阅集合的应用限定符。

  SPATIAL REFERENCE SYSTEM IDENTIFIER srs_id

指定一个空间参照系的数字标识符。在将已知二进制数据转换成空间数据时将用到这个标识符。这个空间参照系必须已经存在于目标数据库上。
在这里使用的空间参照系(spatial reference system,SRS)最好和源数据库中的数据使用的 SRS 相同。
您必须至少保证源数据库和目标数据库使用的是相同的坐标系。否则,您的数据将表现在一个不同的坐标系中,本质上就会导致不同的数据。

  USER user_name PASSWORD password

定义用于链接源数据库或者目标数据库的用户名及口令。如果不为目标数据库提供用户名和口令,那么给源数据库提供的目标和口令将用于目标数据库。

  VERBOSE

将 asnclp 工具生成的所有消息都输出到标准输出设备上来。默认情况下这些消息是看不到的。

  TRACE

打开 asnclp 工具的跟踪机制。跟踪信息将写入标准输出流。
0
相关文章