【问题标题】:How to archive old data in Sybase database?如何归档sybase数据库中的旧数据?
【发布时间】:2014-08-26 06:28:29
【问题描述】:

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

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

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

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

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

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

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

【问题讨论】:

  • 首先要意识到 Sybase 是一家生产多种数据库产品的公司,因此了解您使用的数据库产品(ASE、IQ、SQLAnywhere 等)以及版本会很有帮助.在不知道任何细节的情况下,我的直觉是按日期对数据进行分区。然后,您可以归档分区并在必要时恢复它们。
  • 我不这么认为,我们可以在数据库级别进行归档。只有在表中定义了日期列时才能在表级别进行。
  • 使用的 Sybase 产品是 Sybase ASE 15。
  • 请告诉我如何在 Sybase ASE 15.0 上实现数据归档

标签: java database sybase archive staging-table


【解决方案1】:

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

【讨论】:

  • 嗨,Dom,感谢您的回复。我被要求将存档数据存储到平面文件中,并将这些文件存储在 SFTP 服务器上,这样可以减少数据库大小。如果您对此有任何想法,请告诉我。
  • @azaveri7 这是另一种可能的方式。只需确保您拥有导出时的表架构。一旦表多年来发生变化,您可能无法再将数据直接加载到原始表中,您必须先创建一个新的临时表来加载数据。
【解决方案2】:

如果要求您将数据保存在平面文件中,请使用bcp 实用程序来提取数据。我通常使用带有以下参数的提取实用程序:

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

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

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

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

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2020-10-19
    • 2012-09-11
    • 1970-01-01
    • 1970-01-01
    • 2023-04-10
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多