【发布时间】:2010-10-05 23:55:26
【问题描述】:
我的要求是从表中读取一组列。 源表有很多 - 大约 20-30 个数字列,我想只从源表中读取一组这些列,并继续将这些列的值附加到目标表中。我的数据库在 Oracle 上,编程语言是 JDBC/Java。
源表是非常动态的 - 经常发生插入和删除 它。而在目标表中,我想将数据保留至少 30 天。 我的设置描述如下 - 数据库是甲骨文。 源表中的行数 = 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 环境的一部分。因此,视图仅从源表中选择一组列的源表视图在此环境中不起作用。 欢迎对这种方法提出任何建议或评论 cmets。
编辑 我的表是分区的。复制数据最简单的方法是交换分区网表
*ALTER TABLE <table_name>
EXCHANGE PARTITION <partition_name>
WITH TABLE <new_table_name>
<including | excluding> INDEXES
<with | without> VALIDATION
EXCEPTIONS INTO <schema.table_name>;*
但由于我的源表和目标表有不同的列,所以我认为交换分区不起作用。
【问题讨论】:
-
请提供一些示例数据,5-7 行:你有什么和你想得到什么。
-
一张表中有数百个列?这很糟糕,嗯。
-
我是论坛的新手,不知道如何编辑主要问题以提供更多信息。
-
伙计,我希望列名不是真正的 c1、c5 和 c6