Warning: file_get_contents(/data/phpspider/zhask/data//catemap/5/sql/67.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 从一个表到另一个表的重复列集_Java_Sql_Oracle_Jdbc - Fatal编程技术网

Java 从一个表到另一个表的重复列集

Java 从一个表到另一个表的重复列集,java,sql,oracle,jdbc,Java,Sql,Oracle,Jdbc,我的要求是从表中读取一些列集。 源表有许多大约20-30个数字列,我只想从源表中读取其中的一组列,并将这些列的值添加到目标表中。我的数据库在Oracle上,编程语言是JDBC/Java 源表是非常动态的-经常有插入和删除发生在 信息技术而在destination表中,我希望将数据保留至少30天 天。 我的设置如下所述- 数据库是Oracle。 源表中的行数=2000万行,共30列 destinationt表中的行数=3亿行,2-3列 这些列都是数字 我在考虑不要打开普通的JDBC连接并传输数据,

我的要求是从表中读取一些列集。 源表有许多大约20-30个数字列,我只想从源表中读取其中的一组列,并将这些列的值添加到目标表中。我的数据库在Oracle上,编程语言是JDBC/Java

源表是非常动态的-经常有插入和删除发生在 信息技术而在destination表中,我希望将数据保留至少30天 天。 我的设置如下所述- 数据库是Oracle。 源表中的行数=2000万行,共30列 destinationt表中的行数=3亿行,2-3列

这些列都是数字

我在考虑不要打开普通的JDBC连接并传输数据, 从桌子的大小来看,这可能会很慢。 我试图使用一些 类sql-

SQL> spool on
SQL> select c1,c5,c6 from SRC_Table;
SQL> spool off
然后使用SQLLoader将数据加载到目标数据库中

源表正在存储时间序列数据,数据将在2天内从源表中清除/删除。它是OLTP环境的一部分。目标表有更大的保留期-30天的数据可以存储在这里,它是OLAP环境的一部分。因此,源表上的视图(其中视图仅从源表中选择一组列)在此环境中不起作用。 欢迎对此方法提出任何建议或评论

编辑
我的桌子是分区的。复制数据的最简单方法是交换分区网络表

*ALTER TABLE <table_name>
EXCHANGE PARTITION <partition_name>
WITH TABLE <new_table_name>
<including | excluding> INDEXES
<with | without> VALIDATION
EXCEPTIONS INTO <schema.table_name>;*
*改变表格
交换分区
带桌子
索引
验证
例外情况进入*

但是由于我的源表和目标表有不同的列,所以我认为exchange分区不起作用。

这个问题似乎有点模糊,坦率地说有点奇怪。一个表中有数百列,并且您在数据库中复制数据,这一事实表明了一种hosed数据库设计

这听起来像是一个触发器的工作,而不是手工操作。在源表上创建一个insert触发器,以便在插入列之后将其复制到目标表

另一种可能性是,由于您似乎只需要原始表中的一部分数据,而不是复制它(这是数据库设计的主要问题),因此创建一个只包含所需列和范围的视图。然后像访问其他表一样访问该视图

我愿意猜测问题的根源是访问源表中所需的信息太慢。这意味着您可以通过更好的索引来解决这个问题。另外,您的源表可能太宽了


由于我不是Oracle人员,因此我将其语法留给读者作为练习,但这个概念应该是合理的。

切题地说,您可能希望了解Oracle的分区和

分区可以将表和索引拆分为更小、更易于管理的组件,这是任何具有高性能和高可用性要求的大型数据库的关键要求。Oracle Database 11g提供了最广泛的分区方法选择,包括间隔、引用、列表和范围,以及两种方法的组合分区,如订单日期(范围)和地区(列表)或地区(列表)和客户类型(列表)

  • 更快的性能将查询时间从几分钟减少到几秒钟
  • 提高可用性—24小时7天访问关键信息
  • 提高可管理性管理较小的数据“块”
  • 实现信息生命周期管理—经济高效地使用存储

如前所述,将表划分为日常分区将使归档更容易。Shamik,好的,您正在加载一个OLAP数据库,其中包含OLTP数据

可接受的延迟是多少?您的OLAP是否需要今天的数据才能让人们明天早上进入办公室,还是更接近实时

说插页“频繁”并不意味着什么。我们中的一些人已经习惯了每秒数千个TXN——对其他人来说,每秒1个TXN是很多

你说有很多数据。同样的想法。我读过《人物》的帖子,里面有巨大的表格,有几百万张记录。我有一张有数千亿条记录的桌子。再说一遍。实数非常有用

不要使用Schwern建议的触发器。如果您认为您的插入量很大,这意味着您可能在该领域遇到了问题。扳机只会让事情变得更糟

Oracle为从OLTP到OLAP获取数据提供了许多不同的选择。与其重新发明轮子,不如用已经写好的东西。Oracle Streams天生就是做这项工作的。您可以使用Oracle AQ滚动您自己的流。您可以使用数据库更改通知或更改数据捕获来捕获插入的行,而无需触发器

这是一个非常常见的问题,这就是为什么我列出了4种旨在解决这个问题的技术

高级排队 溪流 更改数据捕获 数据库更改通知


开始用谷歌搜索这些术语,然后带着这些术语的问题回来。您最好不要从头开始构建自己的数据库或使用触发器。

请提供一些示例数据,5-7行:您拥有什么以及您想要得到什么。一个表中有数百列?那太糟糕了,嗯。我是新来的。我不知道如何编辑主要问题以提供更多信息。伙计,我希望列名不是真正的c1、c5和c6Shamik。。。。完全同意!如果复制数据是一个主要问题,我们就不需要ETL或复制工具。真正的主要问题是试图针对OLTP数据库创建复杂的报告。这些往往是巨大的。巨大的SQL,巨大的性能