如何在Sybase数据库中存档旧数据?

时间:2014-08-26 06:28:30

标签: java database sybase archive staging-table

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

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

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

我是一名JAVA人,对从数据库归档数据一无所知。此外,我主要与Oracle合作,对Sybase来说也很陌生。

请告诉我有没有可用于存档Sybase数据库数据的工具/程序。关于这个问题的任何帮助/指导/指示将非常有帮助。

我读到了通过在数据库中划分数据来实现这一目标。当前数据库已经以循环分区方法分区。是否可以基于已分区数据库上的时间戳实现数据库分区。此外,所有表都不包含时间戳列。

我还读到如果无法进行分区,也可以通过创建视图来实现数据存档。我想知道这个选项是否可行,如果是,那怎么可能实现呢?

2 个答案:

答案 0 :(得分:0)

一种简单易行的方法是在同一服务器上创建名为archive的第二个数据库。数据库应该有" select into"选项已启用。现在,您生成一个"选择"将正常数据库中的数据输入到归档数据库的查询。如果发生这种情况,你可以运行一个删除查询,其条件与"选择"相同。用于删除主数据库中的数据的命令。如果您的表在您可以随时使用存档数据库中的相同表的情况下没有更改。如果确实发生了变化,您可能希望每次都创建该表,并将其命名为tablename-year-month

答案 1 :(得分:0)

如果要求您使用平面文件中的数据,请使用bcp实用程序来提取数据。我通常使用此提取实用程序,其中包含以下参数:

bcp <database>..<tablename> out /path/<tablename>.out -U<username> -P<password> -S<servername> -c 

请参阅SybBooks中有关所有参数和选项的详细文档。

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

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