存档表

启用版本化表或要素类的存档功能后,会创建一个存档类。此类为该业务表的副本,它包含业务表中的所有字段,另外还包括三个新字段:GDB_FROM_DATEGDB_TO_DATEGDB_ARCHIVE_OID

命名:

存档类表的名称是原业务表名称后加一条下划线和 H。如,业务表为FILETEST则存档表就为FILETEST_H。

创建测试表-FILETEST

通过arcmap创建一个要素类FILETEST。
enter description here
然后添加几条数据:

INSERT INTO SDE.FILETEST(objectid,shape)VALUES(1, sde.st_geometry('point(1 2)',4326));
INSERT INTO SDE.FILETEST(objectid,shape)VALUES(2, sde.st_geometry('point(3 4)',4326));

数据存档

既可以对非版本化数据进行存档存档也可以对版本化数据进行存档

版本化数据存档

当启用存档时,指定类的 DEFAULT 版本的所有行都将按同一时间戳被复制到存档类。所有行的 gdb_from_date 属性都带有启用存档操作的日期和时间的时间戳。所有行的 gdb_to_date 属性都带有 12/31/9999 时间戳(无论何时只要一个属性具有 gdb_to_date 12/31/9999,它都是 DEFAULT 版本中对象的当前表示)。
为FILETEST注册版本,再启用归档:
enter description here
这时,空间数据将生成一个存档类:FILETEST_H:
enter description here
当将编辑内容保存或提交到 DEFAULT 版本时,地理数据库会自动将更改存档到存档类。
再插入一条数据:

INSERT INTO SDE.FILETEST(objectid,shape)VALUES(3, sde.st_geometry('point(3 3)',4326));

这时查看FILETEST_H,并没有归档,在arcmap中启用编辑来添加一个点,保存并停止编辑,这是存档FILETEST_H也有了相应的记录:
enter description here

在 DEFAULT 版本中更新的要素通过将 gdb_to_date 属性值设置为存档操作的时间戳来更新存档类中的关联行,并插入带 gdb_from_date 属性值和 gdb_to_date 属性值的新行,其中 gdb_from_date 属性值被设置为存档操作的时间戳,gdb_to_date 属性值被设置为 12/31/9999。
通过arcmap将objectid为2的点移动位置:
enter description hereenter description here
保存并停止编辑,查看FILETEST_H:
enter description here
在 DEFAULT 版本中删除的要素通过将 gdb_to_date 属性值设置为等于存档操作的时间戳来更新存档类中的关联行。并且存档类中不在有它的当前版本。
通过arcmap删除objectid为2的点,查看FILETEST_H:
enter description here
更新存档表在单个数据库事务中执行。如果在事务过程中遇到了错误,则回滚整个存档操作,因而也不会完成保存或提交操作。一旦改正了错误,就可以再次执行保存或提交操作。

对于每个存档操作,DEFAULT 历史标记使用存档操作的值进行更新。当使用历史版本并选择 DEFAULT 历史标记时,这确保存档类的当前表示等同于事务 DEFAULT 版本中的版本化类的表示。

访问存档类实际上可以比使用等同的版本化类占用较少的数据库资源。

posted @ 2017-05-10 16:43  禅楼望月  阅读(644)  评论(0编辑  收藏  举报