Java 如何在Sybase数据库中归档旧数据?

Java 如何在Sybase数据库中归档旧数据?,java,database,sybase,archive,staging-table,Java,Database,Sybase,Archive,Staging Table,我正在开发一个基于Struts作为服务器端java技术构建的应用程序,Sybase ASE 15用作存储应用程序数据的数据库。现在Sybase中的表中已经填充了大量数据,因此高级管理层希望将几年(比如3年)以前的数据存档并从数据库表中删除,但存档的数据应该能够在需要时进行恢复 我们还应该能够自动识别表之间的依赖关系,然后决定数据归档的表顺序 我们还需要将表格式与数据一起存储,因此数据检索过程很容易 我是一个JAVA爱好者,对从数据库归档数据一无所知。此外,我主要与Oracle合作,而且对Syba

我正在开发一个基于Struts作为服务器端java技术构建的应用程序,Sybase ASE 15用作存储应用程序数据的数据库。现在Sybase中的表中已经填充了大量数据,因此高级管理层希望将几年(比如3年)以前的数据存档并从数据库表中删除,但存档的数据应该能够在需要时进行恢复

我们还应该能够自动识别表之间的依赖关系,然后决定数据归档的表顺序

我们还需要将表格式与数据一起存储,因此数据检索过程很容易

我是一个JAVA爱好者,对从数据库归档数据一无所知。此外,我主要与Oracle合作,而且对Sybase非常陌生

请告知我是否有任何工具/程序可用于归档Sybase数据库中的数据。关于这个问题的任何帮助/指导/建议都将非常有用

我读过关于通过对数据库中的数据进行分区来实现这一点的文章。当前数据库已使用循环分区方法进行分区。是否有可能在已经分区的数据库上实现基于时间戳的数据库分区。此外,所有表都不包含时间戳列


我还了解到,如果无法进行分区,也可以通过创建视图来实现数据归档。我想知道这个选项是否可行,如果可行,如何实现?

一个简单而廉价的方法是在同一台服务器上创建第二个数据库,名为archive。数据库应启用“选择进入”选项。现在,您将生成一个“selectinto”查询,将普通数据库中的数据输入归档数据库。如果发生这种情况,您可以使用与“selectinto”命令相同的条件运行delete查询,以除去主数据库中的数据。如果您的表在一段时间内没有更改,您可以始终在存档数据库中使用相同的表。如果确实发生了变化,您可能希望每次都重新创建表,并将其命名为
tablename year month

如果要求将数据保存在平面文件中,请使用
bcp
实用程序提取数据。我通常将此提取实用程序与以下参数一起使用:

bcp <database>..<tablename> out /path/<tablename>.out -U<username> -P<password> -S<servername> -c 
bcp。。out/path/.out-U-P-S-c
请参阅中有关所有参数和选项的详细文档

一旦所有这些平面文件都包含了您的数据,您就可以截断所有表,然后重新开始使用一个干净的空数据库,直到需要再次存档为止。如果不需要将整个表提取到文件中,我建议您执行以下操作:

  • 创建具有相同架构的临时表
  • 在该表中选择要存档的数据
  • 删除原始表中具有相同where子句的数据
  • 使用上述bcp out命令将数据提取到平面文件中

首先要了解的是,Sybase是一家生产多种数据库产品的公司,因此了解您使用的数据库产品(ASE、IQ、SQLAnywhere等)以及版本会很有帮助。在不知道任何细节的情况下,我的直觉是按日期对数据进行分区。然后,您可以归档分区并在必要时进行恢复。我不这样认为,我们可以在数据库级别进行归档。只有在表中定义了日期列时,才能在表级别进行归档。使用的Sybase产品是Sybase ASE 15。请就如何在Sybase ASE 15.0Hi Dom上实现数据归档向我提供建议,感谢您的回复。我被要求将归档的数据存储到平面文件中,并将这些文件存储在SFTP服务器上,这样可以减小数据库的大小。如果你对此有任何想法,请告诉我。@azaveri7这是另一种可能的方法。只需确保表模式与导出时相同。一旦表多年来发生变化,您可能无法再将数据直接加载到原始表中,您必须先创建一个新的临时表来加载数据。