Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/oracle/9.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
Sql 基于年龄或日期从oracle表中删除数百万行的脚本_Sql_Oracle_Oracle9i - Fatal编程技术网

Sql 基于年龄或日期从oracle表中删除数百万行的脚本

Sql 基于年龄或日期从oracle表中删除数百万行的脚本,sql,oracle,oracle9i,Sql,Oracle,Oracle9i,是否有可能在oracle中编写脚本,根据年龄从表中删除行。i、 例如,我想删除s行。我有一个包含数百万行的表,我只想保留最近3个月的行。下表的列名如下所示 我对数据库非常陌生。如何为此编写脚本?由于FEED\u DT\u TM是日期,因此无需使用to\u DATE将其转换为日期。简单地 DELETE FROM your_table_name WHERE sysdate - feed_dt_tm >= 120 由于FEED\u DT\u TM是一个日期,因此无需使用to\u DATE将其

是否有可能在oracle中编写脚本,根据年龄从表中删除行。i、 例如,我想删除s行。我有一个包含数百万行的表,我只想保留最近3个月的行。下表的列名如下所示


我对数据库非常陌生。如何为此编写脚本?

由于
FEED\u DT\u TM
日期
,因此无需使用
to\u DATE
将其转换为
日期
。简单地

DELETE FROM your_table_name
 WHERE sysdate - feed_dt_tm >= 120

由于
FEED\u DT\u TM
是一个
日期
,因此无需使用
to\u DATE
将其转换为
日期
。简单地

DELETE FROM your_table_name
 WHERE sysdate - feed_dt_tm >= 120

由于在单个事务中删除了这么多行,您还应该预测将使用大量的撤消空间。您删除的所有行将短暂保存在undo表空间中,以允许您回滚事务,更重要的是,在您提交删除之前,允许其他用户查看这些行。请参阅以获取建议。

由于在一个事务中删除了这么多行,您还应该预测将使用大量的撤消空间。您删除的所有行将短暂保存在undo表空间中,以允许您回滚事务,更重要的是,在您提交删除之前,允许其他用户查看这些行。请参阅建议。

也考虑在新表中保留所需行的选项,然后删除旧表。

类似于

create table new_table_2_months
as
select * 
  from table1
  where date_column > (sysdate-60)

drop table table1;

alter table new_table_2_months rename to table1;

确保还查看约束、索引和其他对象(如果适用于初始表)。不要忘记测试、测试、测试。

< P>也考虑在新表中保留所需行的选项,然后删除旧表。

类似于

create table new_table_2_months
as
select * 
  from table1
  where date_column > (sysdate-60)

drop table table1;

alter table new_table_2_months rename to table1;

确保还查看约束、索引和其他对象(如果适用于初始表)。不要忘了测试,测试,测试。

自己尝试一下,但是作为“选择”查询来测试where子句。一旦确定数据看起来正确,请进行备份,然后切换到实际的“删除”查询。我不确定在Oracle9i@Raghavendar-FEED_DT_TM的数据类型是什么?如果是
日期
,您不想调用
来查看日期。如果它是一个
VARCHAR2
,那么几乎肯定要使用与字符串格式匹配的格式掩码。从数据模型的角度来看,它应该是一个
DATE
。FEED_DT_TM的数据类型是DATE。@Justin-最好编写一个查询来执行上述操作还是编写一个脚本。因为我只想在表中保留前2个月的数据。请自己尝试,但作为“选择”查询来测试where子句。一旦确定数据看起来正确,请进行备份,然后切换到实际的“删除”查询。我不确定在Oracle9i@Raghavendar-FEED_DT_TM的数据类型是什么?如果是
日期
,您不想调用
来查看日期。如果它是一个
VARCHAR2
,那么几乎肯定要使用与字符串格式匹配的格式掩码。从数据模型的角度来看,它应该是一个
DATE
。FEED_DT_TM的数据类型是DATE。@Justin-最好编写一个查询来执行上述操作还是编写一个脚本。因为我只想在表中保留前两个月的数据。非常感谢。我仍然不知道是否使用一条delete语句从表中删除大约1200万行。是否有任何方法可以以不同的方式执行相同的操作,如编写脚本并运行脚本。我担心执行上述删除操作需要更长的时间。@Raghavender-还有其他方法可以删除大量行。然而,这些方法将花费更长的时间,消耗更多的资源,并且更难编写和测试。单个
DELETE
语句是删除大量行的最有效方法。谢谢您,先生。我的顾虑现在已经解决了。我将在与DBA讨论后执行上述操作。实际上,我的DBA让我写一个脚本而不是delete语句,我会让他知道的。非常感谢。我仍然不知道是否使用一条delete语句从表中删除大约1200万行。是否有任何方法可以以不同的方式执行相同的操作,如编写脚本并运行脚本。我担心执行上述删除操作需要更长的时间。@Raghavender-还有其他方法可以删除大量行。然而,这些方法将花费更长的时间,消耗更多的资源,并且更难编写和测试。单个
DELETE
语句是删除大量行的最有效方法。谢谢您,先生。我的顾虑现在已经解决了。我将在与DBA讨论后执行上述操作。实际上,我的DBA让我写一个脚本而不是delete语句,我会让他知道的